코딩 스쿨 SQL

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

SQL Joins

SQL JOINS: 여러 테이블을 결합하여 데이터 조회

SQL JOIN 연산자는 여러 테이블의 데이터를 결합하여 관련 정보를 함께 조회할 때 사용됩니다. 데이터베이스에서 정보는 종종 여러 테이블에 나누어 저장되며, JOIN을 통해 이 데이터를 한 쿼리에서 조회할 수 있습니다. JOIN은 특정 조건을 기준으로 두 개 이상의 테이블을 연결하여 데이터를 결합하는 매우 중요한 SQL 기능입니다.

1. 주요 JOIN 유형

SQL에는 여러 가지 JOIN 유형이 있으며, 각각의 JOIN은 다른 방식으로 테이블을 결합합니다.

  • INNER JOIN: 두 테이블에서 일치하는 데이터만 반환.
  • LEFT JOIN (또는 LEFT OUTER JOIN): 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 데이터를 반환 (일치하지 않는 경우 NULL).
  • RIGHT JOIN (또는 RIGHT OUTER JOIN): 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 데이터를 반환 (일치하지 않는 경우 NULL).
  • FULL JOIN (또는 FULL OUTER JOIN): 두 테이블의 모든 행을 반환하고, 일치하지 않는 경우에는 NULL을 반환.
  • CROSS JOIN: 두 테이블의 모든 행을 곱셈하여 조합.

2. SQL JOIN 문법

JOIN을 사용하여 데이터를 결합하는 기본 문법은 다음과 같습니다:

SELECT 열이름
FROM 테이블1
[JOIN 유형] 테이블2 ON 테이블1.열 = 테이블2.열;

  • JOIN 유형: JOIN의 종류를 선택합니다 (INNER, LEFT, RIGHT, FULL, CROSS).
  • ON: 어떤 조건으로 두 테이블을 연결할지를 지정합니다. 일반적으로 외래 키와 기본 키를 기반으로 테이블을 연결합니다.

3. INNER JOIN

INNER JOIN은 두 테이블에서 일치하는 데이터만 반환합니다. 일치하지 않는 데이터는 무시됩니다.

예제: 직원과 부서 정보를 결합

SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

이 쿼리는 employees 테이블과 departments 테이블을 department_id를 기준으로 결합하여 일치하는 행만 반환합니다.

결과 예시:

name department_name
John Sales
Jane HR
Bob Engineering

4. LEFT JOIN (LEFT OUTER JOIN)

LEFT JOIN은 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블에서 일치하는 데이터가 없는 경우에는 NULL을 반환합니다.

예제: 직원과 부서 정보를 결합 (일치하지 않는 부서 포함)

SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

이 쿼리는 employees 테이블의 모든 행을 반환하며, 부서가 없는 직원도 포함됩니다. 만약 일치하는 부서가 없다면 NULL이 반환됩니다.

결과 예시:

name department_name
John Sales
Jane HR
Bob NULL

5. RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOIN은 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에서 일치하는 데이터가 없는 경우에는 NULL을 반환합니다.

예제: 모든 부서를 포함하여 직원과 부서 정보를 결합

SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

이 쿼리는 departments 테이블의 모든 행을 반환하며, 직원이 없는 부서도 포함됩니다. 만약 일치하는 직원이 없다면 NULL이 반환됩니다.

결과 예시:

name department_name
John Sales
Jane HR
NULL Marketing

6. FULL JOIN (FULL OUTER JOIN)

FULL JOIN은 두 테이블의 모든 행을 반환하며, 한쪽 테이블에 일치하는 데이터가 없으면 NULL이 반환됩니다. 왼쪽과 오른쪽 테이블의 모든 데이터가 출력되므로, 양쪽에서 일치하지 않는 데이터도 포함됩니다.

예제: 모든 직원과 모든 부서 정보를 결합

SELECT employees.name, departments.department_name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;

이 쿼리는 모든 직원과 모든 부서 정보를 반환하며, 일치하지 않는 경우에는 NULL을 반환합니다.

결과 예시:

name department_name
John Sales
Jane HR
NULL Marketing
Bob NULL

7. CROSS JOIN

CROSS JOIN은 두 테이블의 모든 행을 곱셈하여 조합합니다. 이 JOIN은 일치 조건이 없으며, 모든 가능한 조합을 반환합니다.

예제: 모든 직원과 모든 부서의 조합

SELECT employees.name, departments.department_name
FROM employees
CROSS JOIN departments;

이 쿼리는 employees 테이블의 모든 직원과 departments 테이블의 모든 부서를 조합한 결과를 반환합니다.

결과 예시:

name department_name
John Sales
John HR
John Engineering
Jane Sales
Jane HR
Jane Engineering

8. SELF JOIN

SELF JOIN은 같은 테이블을 자기 자신과 조인할 때 사용됩니다. 이를 통해 테이블 내에서 연관된 데이터를 비교할 수 있습니다.

예제: 직원 간의 상사-부하 관계 조회

SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.id;

이 쿼리는 employees 테이블에서 **상사(manager)**와 부하(employee) 관계를 조회합니다.

결과 예시:

employee manager
John Jane
Bob John
Jane NULL

9. JOIN을 사용할 때의 주의 사항

  • JOIN 조건 설정: 각 JOIN에서 ON 절을 통해 적절한 조건을 설정해야 합니다. 일반적으로 외래 키와 기본 키를 기준으로 연결합니다.
  • 데이터 양 주의: JOIN을 사용할 때 테이블이 크면 성능에 영향을 줄 수 있으므로, 필요한 데이터만 조회하도록 WHERE 조건을 추가하는 것이 좋습니다.
  • NULL 값 처리: LEFT JOIN, RIGHT JOIN, FULL JOIN은 일치하지 않는 값에 대해 NULL을 반환하므로, NULL 값을 적절히 처리해야 합니다.

10. 실전 예제

예제 1: 직원과 부서 정보 결합 (INNER JOIN)

SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

예제 2: 모든 직원과 부서 정보 결합 (LEFT JOIN)

SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;

예제 3: 모든 부서와 그 부서에 속한 직원 수 (RIGHT JOIN)

SELECT d.department_name, COUNT(e.id) AS employee_count
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id
GROUP BY d.department_name;


11. 요약

  • INNER JOIN: 일치하는 데이터만 반환.
  • LEFT JOIN: 왼쪽 테이블의 모든 데이터를 반환하고, 일치하지 않는 경우 오른쪽 테이블에서 NULL을 반환.
  • RIGHT JOIN: 오른쪽 테이블의 모든 데이터를 반환하고, 일치하지 않는 경우 왼쪽 테이블에서 NULL을 반환.
  • FULL JOIN: 두 테이블의 모든 데이터를 반환하고, 일치하지 않는 경우 NULL을 반환.
  • CROSS JOIN: 두 테이블의 모든 가능한 조합을 반환.
  • SELF JOIN: 동일한 테이블 내에서 데이터를 비교할 때 사용.

SQL JOIN 연산자는 데이터베이스 내 여러 테이블을 결합하여 데이터 간의 관계를 기반으로 유용한 정보를 추출하는 데 필수적입니다. 각 JOIN 유형을 적절히 사용하여 데이터를 효과적으로 조회하고 분석할 수 있습니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com