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 |