연결(JOIN) 쿼리
JOIN의 종류
- INNER JOIN: 두 테이블의 조인 조건을 만족하는 데이터만 반환합니다.
- LEFT JOIN (또는 LEFT OUTER JOIN): 왼쪽 테이블의 모든 데이터와, 오른쪽 테이블에서 조인 조건을 만족하는 데이터를 반환합니다. 조인 조건을 만족하지 않는 오른쪽 테이블의 데이터는 NULL로 표시됩니다.
- RIGHT JOIN (또는 RIGHT OUTER JOIN): 오른쪽 테이블의 모든 데이터와, 왼쪽 테이블에서 조인 조건을 만족하는 데이터를 반환합니다. 왼쪽 테이블에서 조건을 만족하지 않는 데이터는 NULL로 표시됩니다.
- FULL JOIN (또는 FULL OUTER JOIN): 두 테이블의 모든 데이터를 반환하며, 조인 조건을 만족하지 않는 부분은 NULL로 표시됩니다.
- CROSS JOIN: 두 테이블의 모든 조합(카티션 곱)을 반환합니다. 일반적으로 행 수가 크게 늘어나므로 주의해서 사용해야 합니다.
- SELF JOIN: 같은 테이블을 스스로 조인하여 필요한 데이터를 조회합니다.
INNER JOIN
INNER JOIN은 조인 조건을 만족하는 데이터만 반환합니다.
기본 구조
SELECT 열1, 열2, ...
FROM 테이블1
INNER JOIN 테이블2 ON 테이블1.열 = 테이블2.열;
예시
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
- 이 쿼리는 employees 테이블의 department_id와 departments 테이블의 id가 일치하는 행만 조회합니다.
LEFT JOIN (또는 LEFT OUTER JOIN)
LEFT JOIN은 왼쪽 테이블의 모든 데이터를 반환하며, 오른쪽 테이블에서 조건을 만족하지 않는 값은 NULL로 표시됩니다.
기본 구조
SELECT 열1, 열2, ...
FROM 테이블1
LEFT JOIN 테이블2 ON 테이블1.열 = 테이블2.열;
예시
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
- 이 쿼리는 employees 테이블의 모든 행을 반환하며, 해당 부서가 없는 경우 department_name이 NULL로 표시됩니다.
RIGHT JOIN (또는 RIGHT OUTER JOIN)
RIGHT JOIN은 오른쪽 테이블의 모든 데이터를 반환하며, 왼쪽 테이블에서 조건을 만족하지 않는 값은 NULL로 표시됩니다.
기본 구조
SELECT 열1, 열2, ...
FROM 테이블1
RIGHT JOIN 테이블2 ON 테이블1.열 = 테이블2.열;
예시
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
- 이 쿼리는 departments 테이블의 모든 데이터를 반환하며, 해당 직원이 없는 경우 name이 NULL로 표시됩니다.
FULL JOIN (또는 FULL OUTER JOIN)
FULL JOIN은 두 테이블의 모든 데이터를 반환하며, 한쪽에만 있는 데이터는 NULL로 표시됩니다. MySQL에서는 FULL JOIN을 직접 지원하지 않으므로 UNION을 이용해 구현할 수 있습니다.
예제 (MySQL에서 FULL JOIN 구현)
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
- 이 쿼리는 employees와 departments의 모든 데이터를 결합하며, 어느 한쪽에만 있는 데이터는 NULL로 표시됩니다.
NATURAL JOIN
NATURAL JOIN은 조인의 대상이 되는 두 테이블에서 같은 이름의 칼럼에 대해서는 동일한 칼럼값을 가지는 행만 병합되는 조인입니다.
SELECT 열1, 열2, ...
FROM 테이블1
NATURAL JOIN 테이블2;
CROSS JOIN
CROSS JOIN은 두 테이블의 모든 행의 조합을 반환하며, 조인 조건을 설정하지 않습니다.
기본 구조
SELECT 열1, 열2, ...
FROM 테이블1
CROSS JOIN 테이블2;
예시
SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;
- 이 쿼리는 employees와 departments 테이블의 모든 가능한 조합을 반환합니다.
SELF JOIN
SELF JOIN은 같은 테이블을 스스로 조인하여 필요한 데이터를 조회할 때 사용합니다.
기본 구조
SELECT A.열1, B.열2, ...
FROM 테이블 A
JOIN 테이블 B ON A.열 = B.열;
예시
SELECT A.name AS employee_name, B.name AS manager_name
FROM employees A
JOIN employees B ON A.manager_id = B.id;
- 이 쿼리는 employees 테이블을 자기 자신과 조인하여 각 직원의 이름과 매니저 이름을 조회합니다.
JOIN 요약
- INNER JOIN: 두 테이블 모두에서 조건을 만족하는 데이터만 반환
- LEFT JOIN: 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블에서 조건에 맞지 않는 부분은 NULL
- RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에서 조건에 맞지 않는 부분은 NULL
- FULL JOIN: 두 테이블의 모든 데이터를 반환하고, 맞지 않는 부분은 NULL (MySQL에서는 UNION으로 대체 가능)
- CROSS JOIN: 두 테이블의 모든 조합을 반환
- SELF JOIN: 같은 테이블을 조인하여 특정 관계를 조회
이 글에서는 SQL에서 다양한 JOIN 유형과 그 사용 방법을 알아보았습니다. 각 JOIN은 데이터베이스의 여러 테이블 간의 관계를 이해하고, 필요한 데이터를 정확하게 조회하는 데 중요한 역할을 합니다. INNER JOIN부터 SELF JOIN까지 각 유형의 특성을 잘 이해하고 상황에 맞게 활용한다면, 더 효율적이고 강력한 데이터 쿼리를 작성할 수 있을 것입니다.
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 개념 정리 7] IF/IFNULL 함수와 CASE 함수 (1) | 2024.11.13 |
---|---|
[SQL 개념 정리 6] WINDOW 함수 (0) | 2024.11.13 |
[SQL 개념 정리 4] 변환 쿼리 (0) | 2024.11.13 |
[SQL 개념 정리 3] 집계 쿼리 (0) | 2024.11.13 |
[SQL 개념 정리 2] SQL의 산술 연산자와 합성 연산자 (1) | 2024.11.12 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!