join 이란? : 2 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것
필요한 데이터를 한 번에 가져올 수 있다.
SELECT 테이블1.컬럼명, 테이블2. 컬럼명
FROM TABLE1, TABLE2
WHERE TABLE1.COLUMN1 = TABLE2.COLUMN2 ;
JOIN 종류 알아보기
1. 동등조인(Equi-Join) : 두 개 이상의 테이블 간에 조인 조건으로 동등 연산자('=')를 사용하여 컬럼값이 서로 일치하는 경우에만 결합하는 조인. 주로 두 테이블 사이에 공통 열(키)이 있는 경우에 사용된다. 이 공통 열을 기반으로 두 테이블의 데이터를 결합하여 하나의 결과 집합을 생성
- INNER JOIN
- JOIN 조건에 충족하는 데이터만 출력되는 방식
- USING이나 ON절 필수적으로 사용
- 중복 테이블의 경우 별개의 컬럼으로 표시
SELECT 주문.주문ID, 고객.고객이름
FROM 주문
INNER JOIN 고객 ON 주문.고객ID = 고객.고객ID;
"주문" 테이블과 "고객" 테이블을 "고객ID"열을 기준으로 INNER JOIN하는 쿼리문
주문ID와 고객 이름이 포함된 결과 집합이 반환된다. (두 테이블 간에 일치하는 행만을 반환)
- NATURAL JOIN
- INNER JOIN의 하위
- 두 테이블간 동일한 이름을 갖는 컬럼들이 모두 동일한 데이터를 가지고 있을 경우 JOIN (MYSQL 지원x)
- USING, ON, WHERE 절에서 X
- JOIN 컬럼에 ALIAS 나 테이블명과 같은 접두사 X
- 별도의 JOIN 조건 지정 X
SELECT *
FROM EMPLOYEES
NATURAL JOIN DEPARTMENTS;
"EMPLOYEES" 테이블과 "DEPARTMENTS" 테이블 모두 "DEPARTMENT_ID" 열을 가지고 있다고 가정하여 NATURAL JOIN하는 쿼리문
두 테이블에서 동일한 "DEPARTMENT_ID" 열을 가진 행들을 기반으로 조인된 결과 집합이 반환
- LEFT OUTER JOIN
- JOIN 조건에 충족하는 데이터가 아니어도 출력
- (+)가 붙지 않은 쪽으로 JOIN, JOIN되는 데이터가 없으면 오른쪽 테이블의 컬럼값이 NULL로 출력
- USING이나 ON 조건절 반드시 사용
- 좌측이 기준
SELECT 직원.*, 부서.부서명
FROM 직원
LEFT OUTER JOIN 부서 ON 직원.부서ID = 부서.부서ID;
"직원"테이블과 "부서"테이블을 "부서ID"열을 기준으로 LEFT OUTER JOIN 하는 쿼리문
모든 직원의 정보와 그들이 속한 부서의 정보가 포함된 결과 집합이 반환, 어떤 직원이 부서에 속하지 않는 경우에도 해당 직원은 결과에 포함되며 그 부서 정보는 NULL로 표시된다.
- RIGHT OUTER JOIN
- JOIN 조건에 충족하는 데이터가 아니어도 출력
- (+)가 붙지 않은 쪽으로 JOIN, JOIN되는 데이터가 없으면 왼쪽 테이블의 컬럼값이 NULL로 출력
- USING이나 ON 조건절 반드시 사용
- 우측이 기준
- FULL OUTER JOIN ( = full join )
- 모든 데이터를 JOIN하여 반환
- 중복 데이터는 삭제
2. 비동등조인(Non-Equi Join) : 비동등 연산자( '>', '<', '>=', '<=', '!=')를 사용하여 두 테이블 간의 조인 조건을 정의하는 조인 유형. 두 테이블의 열 값이 특정 조건을 충족하는 경우에 사용된다.
- CROSS JOIN
- 테이블 사이 JOIN 조건이 없는 경우
- 양쪽 집합 M*N건의 데이터 조합 발생
USING 조건절 : 동일한 이름을 가진 컬럼중 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN(동등 조인)
USING절로 정의된 컬럼 앞에 ALIAS 나 테이블 이름과 같은 접두사 X
ON 조건절 : WHERE 조건절을 분리하여 컬럼명이 다르더라도 JOIN 조건을 사용할 수 있는 장점
ALIAS나 테이블명 반드시 사용