:)
[SQL] JOIN 본문
JOIN (조인)
: 두 개 이상의 테이블들을 연결/결합하여 데이터 출력하는 것
[특징]
- 여러 테이블의 데이터를 사용하여 동시 출력하거나 참조할 경우 사용
- FROM절에 조인할 테이블 나열
- 동일한 열 이름이 여러 테이블에 존재할 경우 열 이름 앞에 테이블 이름이나 테이블 Alias 붙임
[종류]
1. 조건의 형태에 따른
1) EQUI JOIN: 두 테이블에서 동일한 값을 가진 열을 기준으로 데이터를 결합
(예시)
employees 테이블
employee_id | name | department_id |
1 | Alice | 101 |
2 | Bob | 102 |
3 | Charlie | 101 |
4 | David | 103 |
departments 테이블
department_id | department_name |
101 | HR |
102 | Engineering |
104 | Marketing |
SELECT employees.employee_id, employees.name, departments.department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id;
employee_id | name | department_name |
1 | Alice | HR |
3 | Charlie | HR |
2 | Bob | Engineering |
2) NON EQUI JOIN: 두 테이블 간의 결합에서 동등 비교가 아닌 다른 연산자(<, >, <=, >=, !=)를 사용하여 데이터를 결합
2. 조인 결과에 따른
1) INNER JOIN : 결합되는 두 테이블에서 공통된 값이 있는 행만 반환
SELECT employees.employee_id, employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
2) OUTER JOIN
- LEFT OUTER JOIN : 왼쪽 테이블의 모든 행을 반환하고 오른쪽 테이블에서 일치하는 값이 없으면 NULL을 반환
SELECT employees.employee_id, employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 반환하고 왼쪽 테이블에서 일치하는 값이 없으면 NULL을 반환
SELECT employees.employee_id, employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;
- FULL OUTER JOIN : 두 테이블에서 일치하는 값이 있으면 해당 행을 반환하고 일치하지 않는 값은 NULL로 반환
SELECT employees.employee_id, employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.department_id;
3. NATURAL JOIN: 두 테이블에 동일한 이름을 가진 column이 있는 경우 해당 열을 기준으로 JOIN을 수행
SELECT *
FROM employees
NATURAL JOIN departments;
employee_id | name | department_id | department_name |
1 | Alice | 101 | HR |
3 | Charlie | 101 | HR |
2 | Bob | 102 | Engineering |
4. CROSS JOIN : 두 테이블의 모든 가능한 조합을 반환
SELECT colors.color, sizes.size
FROM colors
CROSS JOIN sizes;
colors와 sizes 테이블에 있는 모든 색상과 사이즈 조합을 반환
5. SELF JOIN : 하나의 테이블을 스스로와 조인하는 방식
(예시)
employee_id | name | manager_id |
1 | Alice | NULL |
2 | Bob | 1 |
3 | Charlie | 1 |
4 | David | 2 |
5 | Eve | 2 |
SELECT e1.employee_id AS employee_id,
e1.name AS employee_name,
e2.employee_id AS manager_id,
e2.name AS manager_name
FROM employees e1
LEFT JOIN employees e2
ON e1.manager_id = e2.employee_id;
employee_id | name | manager_id | manager_name |
1 | Alice | NULL | NULL |
2 | Bob | 1 | Alice |
3 | Charlie | 1 | Alice |
4 | David | 2 | Bob |
5 | Eve | 2 | Bob |