018. 기능적 관점으로 구분하는 조인의 종류 - llighter/database GitHub Wiki
SQL에서 제공하는 조인
- 크로스 조인
- 내부 조인
- 외부 조인
- 자기 조인
- 등가 조인/비등가 조인
- 자연 조인
기능적 관점으로 분류한 조인
- 크로스 조인, 내부 조인, 외부 조인
- 이 세가지는 베타적인 분류
MECE Wikipedia
1. 크로스 조인 - 모든 조인의 모체
크로스 조인은 조인이라는 연산의 모체이다.
- 크로스 조인의 작동
- 크로스 조인 : 데카르트 곱(수학)
- 크로스 조인이 실무에서 사용되지 않는 이유
- 이러한 결과가 필요한 경우가 없다.
- 비용이 매우 많이 드는 연산이다.
- 실수로 사용한 크로스 조인
-- 실수로 사용한 크로스 조인: WHERE 구로 조인 조건을 지정하지 않음
SELECT *
FROM Employees, Departments;
2. 내부 조인 - 왜 '내부'라는 말을 사용할까?
- 내부 조인의 작동
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
- 내부 조인의 결과는 모두 크로스 조인 결과의 일부(부분 집합)이다.
- 내부 조인과 같은 기능을 하는 상관 서브쿼리
-- 내부 조인을 상관 서브쿼리로 작성
SELECT Orders.OrderID,
(SELECT Customers.CustomerName
FROM Customers
WHERE Orders.OrderID = Customers.CustomerID) AS CustomerName
FROM Orders;
- 기본 키를 사용하면 상관 서브쿼리를 스칼라 서브쿼리로 사용할 수 있다.
- 내부 조인 > 상관 서브쿼리
- 상관 서브쿼리를 스칼라 서브쿼리로 사용하면 결과 레코드 수만큼 상관 서브쿼리를 실행해 비용이 높아진다.
스칼라 서브쿼리 : 리턴값이 하나의 단일값(스칼라값)인 쿼리
3. 외부 조인 - 왜 '외부'라는 말을 사용할까?
- 외부 조인의 작동
외부 조인의 종류 3가지
- 왼쪽 외부 조인
- 오른쪽 외부 조인
- 완전 외부 조인
- 마스터 테이블의 위치에 따라 왼쪽, 오른쪽 외부 조인으로 구분한다.
- 마스터 테이블 쪽에만 존재하는 키가 있을 때는 해당 키를 제거하지 않고 결과에 보존한다.
4. 외부 조인과 내부 조인의 차이
- 외부 조인 결과가 크로스 조인의 결가의 부분 집합이 아닌 이유는, 외부 결합이 마스터 테이블의 정보를 모두 보존하고자
NULL
을 생성하기 떄문이다. - 반면 크로스 조인과 내부 조인은
NULL
을 생성하지 않는다.
크로스 조인, 내부 조인, 외부 조인의 관계 벤다이어그램 추가할 것!
5. 자기 조인 - '자기'란 누구일까?
- 자기 조인은 생성되는 결과를 기준으로분류하는 것이 아니라 연산의 대상으로 무엇을 사용하는지에 대한 분류이다.
- 따라서 '자기 조인 + 크로스 조인', '자기 조인 + 외부 조인'과 같은 조합이 가능하다.
- 자기 조인의 작동
0~9 까지 레코드를 갖는 테이블을 '자기 조인 + 크로스 조인'을 해보는 예제 추가하기
- 자기 조인의 사고방식
- 우연히 같은 데이터를 저장하고 있는 두 개의 서로 다른 테이블이라고 생각