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 |
'SQL' 카테고리의 다른 글
[SQL] SQL 문자열 함수들과 사용 예시 (0) | 2023.04.23 |
---|---|
[SQL] MySQL 서브 쿼리(SUBQUERY)란? (0) | 2023.04.23 |
[MySQL] MySQL 테이블 관련 절과 명령어(GROUP/OTHER BY, HAVING, 테이블 수정/추가/제거) (0) | 2023.04.23 |
[MySQL] MySQL 쿼리(Query)와 다양한 연산자 (2) | 2023.04.22 |
[MySQL] DB 타입과 MySQL 언어 (0) | 2023.04.22 |