SQL 결합(JOIN) 의 종류
SQL에는 기능적 관점으로 분류되는 결합의 종류로 크로스 결합 (CROSS JOIN), 내부 결합 (INNER JOIN), 외부 결합 (OUTER JOIN)이 존재한다. 위의 세가지 결합에 대해서 하나씩 예를 들어가며 설명해보려 한다.
- 크로스 결합 (CROSS JOIN)
우선, 크로스 결합은 실무에서는 거의 사용하지 않는 결합이다. 하지만 크로스 결합은 모든 결합 연산의 모체이기 때문에 훑고 가는 것이 좋다. 크로스 결합 예시에서는 단순히 결합이 어느 역할을 하는 연산인지 이해하는 데에 초점을 두어 설명하겠다.
결합을 설명하기 위해 아래와 같은 두 테이블(EMP : 사원 정보 / DEPT : 부서 정보)을 만들었다. 두 테이블에서는 dept_id 라는 필드를 동시에 가지고 있는 것을 알 수있다.
CROSS JOIN은 수학에서의 데카르트 곱이라고 부르는 연산으로, 2개 테이블의 레코드에서 가능한 모든 조합을 구하는 연산이다. 아래는 위의 두 테이블을 가지고 CROSS JOIN을 한 결과이다.
결과를 보면 바로 깨닫게 되는 두가지 이유 때문에, 실무에서 CROSS JOIN은 사용하지 않는다.
- CROSS JOIN의 결과가 실무에 필요한 경우가 없을 것이다.
- 의미 없는 결과임에도 비용이 매우 많이 드는 연산이다.
참고로 [ SELECT * FROM EMP, DEPT ]의 결과도 CROSS JOIN의 결과와 같게 출력된다.
- 내부 결합 (INNER JOIN)
결합 연산 중 가장 많이 이용되는 조합이다. 내부 결합에서는 사용할 테이블 안에 모두 존재하는 필드가 필요하며, 위의 예시에서는 부서ID(dept_id)를 사용할 수 있다.
이 결과를 살펴보면, 위에서 출력된 CROSS JOIN 결과 안의 레코드 중 몇몇의 결과가 출력된 것을 볼 수있다. 이것이 INNER JOIN에서 "내부"라는 용어를 사용하는 이유이다.
아래는 위의 내부 결합(INNER JOIN) 코드와 같은 기능을 하는 상관 서브쿼리 코드의 예시이다.
내부 결합과 같은 기능을 하지만, 상관 서브쿼리를 스칼라 서브쿼리로 사용하게 되면 결과 레코드 수만큼 상관 서브쿼리를 실행하기 때문에 비용이 높아진다. 따라서 기본적으로는 내부 결합을 사용하는 것이 좋다.
- 외부 결합 (OUTER JOIN)
외부 결합에는 아래와 같은 세 가지 종류가 존재한다.
1. 왼쪽 외부 결합 (LEFT JOIN)
2. 오른쪽 외부 결합 (RIGHT JOIN)
3. 완전 외부 결합(FULL JOIN)
왼쪽 외부 결합(LEFT JOIN)과 오른쪽 외부 결합 (RIGHT JOIN)은 마스터가 되는 테이블이 어느 쪽에 적어지느냐에 따라 모양이 다를 뿐, 그 기능은 동일하다. 아래는 두 결합의 예시를 보여준다.
외부 결합(OUTER JOIN)에서는 크로스 결합(CROSS JOIN)의 결과에서 보이지 않던 NULL 값(마지막 레코드)이 출력 되는 것을 알 수 있다. 이는 마스터 테이블 쪽에만 존재하는 키가 있을 때 해당 키를 제거하지 않고 그대로 결과에 보존하는 것을 알려준다.
지금까지의 포스팅에서는 다양한 SQL 기본 함수에 대해 알아보았다.
다음 포스팅부터는 앞에서 살펴본 기본 함수를 활용한 다양한 예시와 응용 함수에 대해 알아보도록 하자.
'Data Analysis > SQL' 카테고리의 다른 글
[SQL] 13. SQL 레코드 순서 응용2 (예제 - 레코드 순번 활용 : 중앙값 구하기) (0) | 2019.07.21 |
---|---|
[SQL] 12. SQL 레코드 순서 응용1 (예제 - 레코드에 순번 붙이기) (0) | 2019.07.20 |
[SQL] 10. SQL에서의 반복 (응용 - 재귀 쿼리) (0) | 2019.07.18 |
[SQL] 09. SQL에서의 반복 (CASE&WINDOW함수 + 예시2) (0) | 2019.07.18 |
[SQL] 08. SQL에서의 반복 (개념 + CASE&WINDOW함수 + 예시1) (0) | 2019.07.18 |
댓글