[SQL] SQL JOIN의 종류와 예시

이지IT
|2023. 4. 23. 19:23
반응형

SQL JOIN 절은 테이블 간의 관련 열을 기반으로 두 개 이상의 테이블에서 행을 결합하는 데 사용됩니다. SQL JOIN에는 INNER JOIN, LEFT JOIN, RIGHT JOIN 및 FULL OUTER JOIN과 같은 여러 유형이 있습니다.

JOIN의 유형은 다음과 같습니다.

  • INNER JOIN: 두 테이블에서 일치하는 값을 가진 행을 반환합니다.

  • LEFT JOIN(또는 LEFT OUTER JOIN)
    왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 오른쪽 테이블의 열에 대해 NULL 값이 반환됩니다.

  • RIGHT JOIN(또는 RIGHT OUTER JOIN)
    오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 왼쪽 테이블의 열에 대해 NULL 값이 반환됩니다.

  • FULL OUTER JOIN
    왼쪽 또는 오른쪽 테이블에 일치하는 항목이 있으면 모든 행을 반환합니다. 일치하는 항목이 없으면 일치하지 않는 테이블의 열에 대해 NULL 값이 반환됩니다.


다음은 JOIN 절을 사용하기 위한 기본 구문입니다.

SELECT column1, column2, ...
FROM table1
JOIN_TYPE JOIN table2
ON table1.column_name = table2.column_name;


1. INNER JOIN

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.department_id;


이 쿼리는 "department_id" 열을 사용하여 "employees" 및 "departments" 테이블 간에 INNER JOIN을 수행하여 부서 이름과 함께 직원의 성과 이름을 검색합니다.

2. LEFT JOIN

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.department_id;


이 쿼리는 직원이 어떤 부서에도 할당되지 않은 경우에도 부서 이름과 함께 모든 직원의 성과 이름을 검색합니다.

3. RIGHT JOIN

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.department_id;


이 쿼리는 부서에 직원이 없더라도 해당 부서에 속한 직원의 성과 이름과 함께 모든 부서 이름을 검색합니다.

4. FULL OUTER JOIN

FULL OUTER JOIN은 MySQL에서 지원되지 않습니다. 그러나 이를 지원하는 데이터베이스(예: PostgreSQL, SQL Server, Oracle)에서 구문은 다음과 같습니다.

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
FULL OUTER JOIN departments
ON employees.department_id = departments.department_id;


이 쿼리는 직원이 부서에 할당되지 않았거나 부서에 직원이 없는 경우에도 모든 직원의 이름과 성을 부서 이름과 함께 검색합니다.

JOIN 절의 특정 구현은 사용 중인 DBMS(예: MySQL, PostgreSQL, SQL Server, Oracle, SQLite)에 따라 다를 수 있습니다.


CROSS JOIN과 SELF JOIN

1. CROSS JOIN

데카르트 JOIN이라고도 하는 CROSS JOIN은 첫 번째 테이블의 각 행을 두 번째 테이블의 각 행과 결합하여 두 테이블의 데카르트 곱을 생성하는 JOIN 작업 유형입니다. 테이블 JOIN에는 조건이 필요하지 않습니다. CROSS JOIN의 결과 집합에는 JOIN되는 두 테이블의 행 수를 곱한 것과 동일한 행 수가 있습니다.

1) 테이블 예시

1 번 테이블

id name
1 A
2 B

2 번 테이블

id color
1 Red
2 Green

 

2) 테이블1과 테이블2 사이의 CROSS JOIN

SELECT * FROM Table1 CROSS JOIN Table2;

 

3) Output

id name id color
1 A 1 Red
1 A 2 Green
2 B 1 Red
2 B 2 Green


2. SELF JOIN


SELF JOIN은 일반 JOIN 작업이지만 단일 테이블에 적용됩니다. SELF JOIN을 수행하려면 테이블에 대한 별칭을 생성하고 이 별칭을 사용하여 JOIN 조건에서 동일한 테이블을 참조해야 합니다. SELF JOIN은 관련 열을 기반으로 동일한 테이블의 행을 결합하려는 경우에 사용됩니다.

1) 테이블 예시

id name manager_id
1 Alice NULL
2 Bob 1
3 Carol 1
4 Dave 2


2) 직원과 해당 관리자를 찾기 위한 SELF JOIN

SELECT e1.name AS Employee, e2.name AS Manager
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;

 

3) Output

Employee Manager
Bob Alice
Carol Alice
Dave Bob

 

반응형