본문 바로가기
IT

[SQLD] SQL기본_JOIN

by 또닝 2017. 11. 21.

INNER JOIN

JOIN 조건에서 동일한 값이 있는 행만 반환

USING, ON 조건절을 필수적으로 사용해야 한다.

--INNER JOIN
SELECT   T0.LAST_NAME, T1.DEPARTMENT_NAME
  FROM      EMPLOYEES T0
         INNER JOIN
            DEPARTMENTS T1
         ON T0.DEPARTMENT_ID = T1.DEPARTMENT_ID

 

NATURAL JOIN

두 테이블 간의 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN을 수행

USING, ON, WHERE 절에 JOIN 조건을 정의할 수 없다.

--NATURAL JOIN
SELECT   T0.LAST_NAME, T1.DEPARTMENT_NAME
  FROM      EMPLOYEES T0
         NATURAL JOIN
            DEPARTMENTS T1

 

USING 조건절

NATURAL JOIN의 경우 같은 명칭의 모든 컬럼이 JOIN에 참여하나 FROM절의 USING 조건절을 이용하여 같은 이름을 같는 컬럼 중 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN을 할 수 있다.

- USING 조건절에서는 ALIAS 사용불가( USING EMPLOYEES.DEPARTMENT_ID X )

--USING
SELECT   *
  FROM      EMPLOYEES
         JOIN
            DEPARTMENTS
         USING (DEPARTMENT_ID);

 

 

ON 조건절

두 테이블 간 특정 컬럼으로 Equal Join 수행

컬럼명 다르더라도 JOIN 조건을 사용할 수 있는 장점이 있다.

--ON
SELECT   *
  FROM      EMPLOYEES T0
         JOIN
            DEPARTMENTS T1
         ON (T0.DEPARTMENT_ID = T1.DEPARTMENT_ID);

 

--ON조건절과 WHERE조건절 혼용
SELECT   *
  FROM      EMPLOYEES T0
         JOIN
            DEPARTMENTS T1
         ON (T0.DEPARTMENT_ID = T1.DEPARTMENT_ID)
 WHERE   T1.DEPARTMENT_ID = 50;

 

 

 

CROSS JOIN (CARTESIAN PRODUCT)

JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합 ( M*N건 조합 )

--CROSS JOIN
SELECT   *
  FROM     EMPLOYEES
         CROSS JOIN
            DEPARTMENTS;

 

--CROSS JOIN (WHERE 조건 사용:INNER JOIN과 결과 동일)
SELECT   *
  FROM      EMPLOYEES T0
         CROSS JOIN
            DEPARTMENTS T1
 WHERE   T0.DEPARTMENT_ID = T1.DEPARTMENT_ID;

 

OUTER JOIN

JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용

LEFT, RIGHT, FULL OUTER

 

1. LEFT OUTER JOIN

왼쪽의 테이블은 무조건 조회되고, 오른쪽 테이블에 조건이 맞는 행이 있으면 출력

 

--LEFT OUTER JOIN
SELECT   *
  FROM      EMPLOYEES T0
         LEFT OUTER JOIN
            DEPARTMENTS T1
         ON (T0.DEPARTMENT_ID = T1.DEPARTMENT_ID)
 WHERE   T0.EMPLOYEE_ID = 178;

 

 

2. RIGHT OUTER JOIN

오른쪽의 테이블은 무조건 조회되고, 왼쪽 테이블에 조건이 맞는 행이 있으면 출력

 

--RIGHT OUTER JOIN
SELECT   *
  FROM      DEPARTMENTS T0
         RIGHT OUTER JOIN
            EMPLOYEES T1
         ON (T0.DEPARTMENT_ID = T1.DEPARTMENT_ID)
 WHERE   T1.EMPLOYEE_ID = 178; 

 

 

3. FULL OUTER JOIN

양쪽테이블이 모두 조회

 

--FULL OUTER JOIN
--(LEFT OUTER JOIN 
--UNION
--RIGHT OUTER JOIN)
SELECT   *
  FROM      DEPARTMENTS T0
         FULL OUTER JOIN
            EMPLOYEES T1
         ON (T0.DEPARTMENT_ID = T1.DEPARTMENT_ID)

 

 

 

'IT' 카테고리의 다른 글

SQLD 시험 후기  (1) 2017.12.08
[SQLD]SQL활용_그룹함수  (0) 2017.11.22
[SQLD] SQL기본_GROUP BY, HAVING절  (0) 2017.11.21
[SQLD] 함수  (0) 2017.11.20
[SQLD] SQL기본_TCL/WHERE절  (0) 2017.11.20