JOIN
- 두개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것
** EQUI JOIN **
- 두개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법
- 대부분 PK <-> FK의 관계를 기반으로 한다. 그러나 반드시 PK <-> FK의 관계로만 EQUI JOIN이 성립하는 것은 아니다.
** Non EQUI JOIN **
- 두개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용한다.
- Non EQUI JOIN의 경우에는 "=" 연산자가 아닌 다른(Between, >, >=, <, <= 등) 연산자들을 사용하여 JOIN을 수행
INNER JOIN
- '내부 JOIN'이라고 함. JOIN 조건에서 동일한 값이 있는 행만 반환한다.
- DEFAULT 옵션이므로 생략이 가능하지만, CROSS JOIN, OUTER JOIN과는 같이 사용할 수 없다.
- USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
NATURAL JOIN
- 두 테이블간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) JOIN을 수행한다.
- 추가로 USING 조건절, ON 조건절, WHERE절에서 JOIN조건을 정의할 수 없다.
- JOIN에 사용된 칼럼들은 같은 데이터 유형이어야 한다.
- ALIAS나 테이블명과 같은 접두사를 붙일 수 없다.
USING 조건절, ON 조건절
* USING *
- 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 = JOIN을 할 수 있다.
- SQL Server에서는 지원하지 않는다.
- JOIN 칼럼에 대해서는 ALIAS나 테이블이름과 같은 접두사를 붙일 수 없다.
* ON *
- 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점이 있다.
- WHERE 검색 조건은 충돌 없이 사용할 수 있다.
- ON 조건절에서 사용된 괄호는 옵션사항이다.
- ALIAS나 테이블명과 같은 접두사를 사용해야 한다.
OUTER JOIN
- JOIN 조건에서 동일한 값이 없는 행도(NULL 값) 출력된다.
- USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다.
* LEFT OUTER JOIN *
- 조인 수행 시 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 우측 테이블에서 JOIN 대상 데이터를 읽어온다.
* RIGHT OUTER JOIN *
- LEFT OUTER JOIN과 반대로 우측 테이블이 기준이 되어 결과 생성
* FULL OUTER JOIN *
- 합집합 개념으로 LEFT와 RIGHT를 모두 읽어 온다.
INNER vs OUTER vs CROSS JOIN 비교
1) INNER JOIN
- 양쪽 테이블에 모두 존재하는 키 값이 B-B, C-C인 2건이 출력된다.
2) LEFT OUTER JOIN
- TAB1을 기준으로 키 값 조합이 B-B, C-C, D-NULL, E-NULL인 4건이 출력된다. (좌측 테이블 기준)
3) RIGHT OUTER JOIN
- TAB2를 기준으로 키 값 조합이 NULL-A, B-B, C-C인 3건이 출력. (우측 테이블 기준)
4) FULL OUTER JOIN
- 양쪽 테이블을 기준으로 키 값 조합이 NULL-A, B-B, C-C, D-NULL, E-NULL인 5건이 출력된다. (합집합)
5) CROSS JOIN
- 양쪽 테이블 TAB1과 TAB2의 데이터를 곱한 개수인 4 * 3 = 12건이 추출됨
- 키 값 조합이 B-A, B-B, B-C, C-A, C-B, C-C, D-A, D-B, D-C, E-A, E-B, E-C인 12건이 출력된다.
'SQLD' 카테고리의 다른 글
SQLD 개념정리 (GROUP BY, HAVING, ORDER BY, WITH THIS) (1) | 2023.11.06 |
---|---|
SQLD 개념정리 (NULL, NULL 관련 함수) (0) | 2023.11.06 |
SQLD 개념정리 (함수) (0) | 2023.11.05 |
SQLD 개념정리 (관계형 데이터베이스 개요, DML, TCL) (0) | 2023.11.01 |
SQLD 개념정리 (관계형 데이터베이스 개요, DDL) (0) | 2023.10.30 |