자격증/SQLD 자격증 정리

[SQLD] SQL활용 - 표준 조인

sjoo 2021. 7. 19. 22:35

표준 조인 (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;