[SQLD] SQL활용 - 표준 조인
표준 조인 (STANDARD JOIN)
- 일반 집합 연산자
1. UNION -> UNION
2. INTERSECTION -> INTERSECT
3. DIFFERENCE -> EXCEPT(ORACLE에서는 MINUS)
4. PRODUCT -> CROSS JOIN(CARTESIAN PRODUCT)
- 순수 관계 연산자
5. SELECT -> WHERE
6. PROJECT -> SELECT
7. (NATURAL)JOIN -> 다양한 JOIN
8. DIVIDE -> 현재 사용하지 않음
- FROM 절의 JOIN 형태
1. INNER JOIN
: JOIN 조건에서 동일한 값이 있는 행만 반환. USING이나 ON절을 필수적으로 사용
// 기본
SELECT A.AGE, A.NAME FROM TB1 A, TB2 B
WHERE A.NAME=B.NAME;
// ON 조건절 사용
SELECT TB1.NAME, TB1.AGE FROM TB1 (INNER) JOIN TB2
ON TB1.NAME=TB2.NAME;
// USING 조건절 사용
SELECT NAME, A.AGE FROM TB1 A JOIN TB2 B USING(NAME);
※ USING 조건절 사용 시 USING절 안에 포함되는 컬럼에 Alias를 지정하면 오류가 발생한다.
2. NATURAL JOIN
: 두 테이블 간의 동일한 이름을 갖는 모든 컬럼에 대해 EQUL JOIN을 수행, NATURAL JOIN이 명시되면 추가로 USING,ON,WHERE절에서 JOIN 조건 정의 불가, SQL Server는 지원하지 않는다.
SELECT NAME, AGE FROM TB1 A NATURAL JOIN TB2 B;
3. CROSS JOIN
: 양쪽 집합의 M*N건의 데이터 조합이 발생
[ANSI로 작성하는 경우]
CROSS JOIN을 사용하고 ON, USING을 사용하지 않는다.
SELECT * FROM TB1 CROSS JOIN TB2;
[ANSI로 작성하지 않는 경우]
FROM절에 콤마(,)로 나열하고 조인 조건을 설정하지 않는다.
SELECT * FROM TB1, TB2;
4. OUTER JOIN
: JOIN 조건에서 동일한 값이 없는 행도 반환 가능하다. USING이나 ON 조건절을 반드시 사용해야 한다.
데이터가 없을 수도 있는 쪽 JOIN에 (+)를 추가한다.
LEFT OUTER JOIN | 조인 수행시 먼저 표기된 좌측 테이블에 해당하는 데이터를 읽은 후, 나중 표기된 우측 테이블에서 JOIN 대상 데이터를 읽어 온다. 우측 값에서 같은 값이 없는 경우 NULL 값으로 채운다. |
RIGHT OUTER JOIN | LEFT OUTER JOIN의 반대 |
FULL OUTER JOIN | 조인 수행시 좌측, 우측 테이블의 모든 데이터를 읽어 JOIN하여 결과를 생성한다. 중복 데이터는 삭제한다. |
// ORACLE에서 OUTER JOIN
SELECT A.ID ,A.NAME ,A.AMT FROM TB1 A ,TB2 B
WHERE A.ID=B.ID(+);
// ANSI에서 OUTER JOIN
SELECT A.ID ,A.NAME ,A.AMT FROM TB1 A LEFT OUTER JOIN TB2 B
ON A.ID=B.ID;