1. FROM 절 조인 형태
ANSI/ISO SQL에서 표시하는 FROM 절의 조인 형태는 다음과 같다.
- INNER JOIN: DEFAULT 옵션, 조인 조건을 만족하는 행들만 반환한다.
- NATURAL JOIN: INNER JOIN의 하위개념으로, 두 테이블 간 동일한 이름을 가지는 모든 칼럼에 대해 EQUI JOIN을 수행한다.
- USING 조건절: NATURAL JOIN에서, 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있게 함
- ON 조건절: JOIN 조건절과 데이터 제한 조건(WHERE 절)을 분리할 수 있다.
- CROSS JOIN
- OUTER JOIN
2. INNER JOIN
- "INNER JOIN"을 표시하기 위해서는, USING 조건절이나 ON 조건절을 필수적으로 사용해야 한다. 주로 ON 조건절을 이용한다.
SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME
FROM EMP A JOIN DEPT B
ON B.DEPTNO = A.DEPTNO;
3. NATURAL JOIN
- NATURAL JOIN이 명시되면 추가로 "USING 조건절, ON 조건절, WHERE 절에서 조인 조건"을 정의할 수 없다.
SELECT A.EMPNO, A.ENAME, DEPTNO, B.DNAME
FROM EMP A NATURAL JOIN DEPT B;
- 위에서 'B.DEPTNO'가 아닌 'DEPTNO'를 썼는데, NATURAL 조인에 사용된 열은 식별자를 가질 수 없기 때문에 반드시 위의 방식처럼 작성해야 한다.
4. USING 조건절
- FROM 절의 USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다. 단, SQL Server에서는 지원하지 않으니 유의할 것.
SELECT *
FROM DEPT A JOIN DEPT_TEMP B
USING (DEPTNO);
칼럼 2개 사용해도 된다.
SELECT *
FROM DEPT A JOIN DEPT_TEMP B
USING (DEPTNO, DNAME);
5. ON 조건절
- 조인 서술부(ON 조건절)와 비 조인 서술부(WHERE 조건절)를 분리해 이해가 쉬우며, 칼럼명이 다르더라도 조인 조건을 사용할 수 있는 장점이 있다.
SELECT A.EMPNO, A.ENAME, B.DEPTNO, B.DNAME
FROM EMP A JOIN DEPT B
ON (B.DEPTNO = A.DEPTNO);
- JOIN을 여러번 해보자.
SELECT A.EMPNO, A.DEPTNO, B.DNAME, C.DNAME AS NEW_DNAME
FROM EMP A JOIN DEPT B
ON B.DEPTNO = A.DEPTNO
JOIN DEPT B
ON C.DEPTNO = B.DEPTNO
6. CROSS JOIN
- CROSS JOIN은 CARTESIAN PRODUCT(CROSS PRODUCT)와 같은 표현으로, 양쪽 집합의 M*N 건의 데이터 조합이 발생한다.
SELECT A.ENAME, B.DNAME
FROM EMP A CROSS JOIN DEPT B
ORDER BY A.ENAME;
- 정상적인 데이터 모델이라면 CROSS JOIN이 필요가 없으나, 튜닝이나 리포트 작성, 혹은 큰 데이터 처리 테스트를 위해 사용되기도 한다.
7. OUTER JOIN
- 조인 칼럼 위치에 따라 LEFT OUTER JOIN, RIGHT OUTER JOIN, 그리고 FULL JOIN으로 나뉜다.
SELECT *
FROM DEPT A [LEFT OUTER| RIGHT OUTER| FULL] JOIN DEPT_TEMP B
ON B.DEPTNO = A.DEPTNO;
8. INNER vs OUTER vs CROSS JOIN 비교
아래의 두 테이블을 보도록 하자.
(TABLE1) | KEY1 | |
bbb | 123 | B |
ddd | 222 | C |
eee | 233 | D |
fff | 143 | E |
KEY2 | (TABLE2) | |
A | 10 | ㅁㅁㅇ |
B | 11 | ㅈㅎ |
C | 12 | ㄷㄴㅍ |
- INNER JOIN: 양쪽 테이블에 모두 존재하는 키 값이 B-B, C-C인 2건이 출력된다.
- LEFT OUTER JOIN: TAB1을 기준으로 B-B, C-C, D-NULL, E-NULL인 4건이 출력된다.
- RIGHT OUTER JOIN: TAB2을 기준으로 NULL-A, B-B, C-C인 3건이 출력된다.
- FULL OUTER JOIN: 양쪽 테이블을 기준으로 키 값 조합이 NULL-A, B-B, C-C, D-NULL, E-NULL인 5건이 출력된다.
- CROSS JOIN: 양쪽 테이블의 데이터를 곱한 개수인 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' 카테고리의 다른 글
3-7-2. 트랜잭션 (1) | 2022.10.03 |
---|---|
3-7-1. Lock (0) | 2022.10.03 |
2-1-7. 조인 (1) | 2022.09.20 |
2-1-6. ORDER BY 절 (1) | 2022.09.20 |
2-1-5. GROUP BY, HAVING 절 (0) | 2022.09.20 |