:)

[SQL] JOIN 본문

Data Storage

[SQL] JOIN

andre99 2024. 11. 16. 12:48

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