본문 바로가기
자격증/SQLD

SQLD 정리 / 과목 2 SQL 기본 및 활용 / 제2장 SQL 활용 / 제1절 표준 조인

by RUCKUS 2021. 5. 27.

제1절 표준 조인

 

1. STANDARD SQL 개요

  (1) 일반 집합 연산자

  • UNION (합집합) -> UNION, UNION ALL
  • INTERSECTION (교집합) -> INTERSECT
  • DIFFERENCE (차집합) -> EXCEPT(Oracle은 MINUS)
  • PRODUCT (곱집합) -> CROSS JOIN

  (2) 순수 관계 연산자

  • SELECT -> WHERE (SELECT 연산과 SELECT 절은 다르다)
  • PROJECT -> SELECT
  • (NATURAL) JOIN -> 다양한 JOIN
  • DIVIDE -> 사용 X


2. FROM 절 JOIN 형태

  [ANSI/ISO SQL FORM 절 JOIN의 형태]

  • INNER JOIN
  • NATURAL JOIN
  • USING 조건절
  • ON 조건절
  • CROSS JOIN
  • OUTER JOIN

 

3. INNER JOIN

  • 내부 JOIN이라고 하며, JOIN조건에서 동일한 값이 있는 행만 반환한다.
  • USING이나 ON 조건절을 필수적으로 사용해야 한다.
  • WHERE 절 JOIN 조건
    SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
    FROM EMP, DEPT
    WHERE EMP.DEPTNE = DEPT.DEPTNO​
  • FROM 절 JOIN 조건 (INNER는 생략 가능)
    SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME
    FROM EMP INNER JOIN DEPT
    ON EMP.DEPTNO = DEPT.DEPTNO​

4. NATURAL JOIN

  • 두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI(=) 등가 조인을 수행한다.
  • USING, ON, WHERE 절에서 조건을 정의 할 수 없다. 
  • SQL Server는 지원하지 않는 기능이다.
  • 코드
    SELECT DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
  • SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
    NATURAL JOIN에 사용된 열은 식별자를 가질 수 없다.
  • NATURAL JOIN에서 (*) 와일드카드 처럼 별도의 순서를 정하지 않으면 조인의 기준 칼럼이 먼저 출력된다. 그리고 JOIN에 사용된 칼럼이 하나로 출력된다. INNER JOIN은 각각 출력된다.

 

5. USING 조건절

  • 같은 이름을 가진 칼럼들 중에서 원하는 칼럼에 대해서만 선택적으로 EQUI JOIN 실행 (SQL Server는 없는 기능)
  • ALIAS나 테이블이름과 같은 접두사를 붙일 수 없다.
  • 코드
    SELECT *
    FROM DEPT JOIN DEPT_TEMP
    USING (DEPTNO);​

6. ON 조건절

  • 칼럼명이 다르더라도 JOIN 조건을 사용할 수 있다.
  • ON조건의 괄호는 옵션이다.
  • ALIAS나 테이블 명과 같은 접두사를 사용하여 칼럼을 논리적으로 명확하게 지정해주어야 한다.
  • 코드 예제
    SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
    FROM EMP E JOIN DEPT D
    ON (E.DEPTNO = D.DEPTNO);​
    [WHERE과 혼용]
    SELECT E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME 
    FROM EMP E JOIN DEPT D 
    ON (E.DEPTNO = D.DEPTNO) 
    WHERE E.DEPTNO = 30;​
    [ON 조건절 + 데이터 검증 조건 추가]
    [다중 테이블 JOIN]
  • SELECT E.ENAME, E.MGR, D.DEPTNO, D.DNAME FROM EMP E JOIN DEPT D ON (E.DEPTNO = D.DEPTNO AND E.MGR = 7698); ​
  • SELECT E.EMPNO, D.DEPTNO, D.DNAME, T.DNAME New_DNAME 
    FROM EMP E JOIN DEPT D 
    ON (E.DEPTNO = D.DEPTNO) 
    JOIN DEPT_TEMP T 
    ON (E.DEPTNO = T.DEPTNO);

 

7. CROSS JOIN

  • CARTESIAN PRODUCT / 테이블 간의 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합
  • 양쪽 집합의 M*N건의 데이터 조합 발생
    SELECT ENAME, DNAME 
    FROM EMP CROSS JOIN DEPT 
    ORDER BY ENAME;​

8. OUTER JOIN

  • INNER JOIN과 대비하여 외부 JOIN으로 불리면 JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용가능
  • USING 이나 ON 을 필수적으로 사용해야 한다.
  • LEFT OUTER JOIN
    조인 수행 시 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 우측테이블에서 JOIN 대상 데이터를 읽어온다.
  • RIGHT OUTER JOIN
    LEFT OUTER JOIN과 반대로 우측 테이블이 기준이 되어 결과 출력
  • FULL OUTER JOIN
    합집합 개념으로 LEFT와 RIGHT를 모두 읽어 온다

9. INNER vs OUTER vs CROSS JOIN 비교

 

  • INNER JOIN : B-B, C-C 2건 출력
  • LEFT OUTER JOIN : B-B, C-C, D-NULL, E-NULL 4건 출력
  • RIGHT OUTER JOIN : NULL-A, B-B, C-C 3건 출력
  • FULL OUTER JOIN : NULL-A, B-B, C-C, D-NULL, E-NULL 5건 출력
  • CARTESIAN PRODUCT (CROSS JOIN) : 3 * 4 12건 출력