Database/MySQL

[MySQL]SQL INNER JOIN의 차이점: ON 절 vs WHERE 절

GAEBAL 2024. 7. 24. 21:27
728x90

SQL에서 데이터베이스의 테이블을 조인하는 방법은 다양합니다. 그 중에서도 INNER JOIN은 매우 흔히 사용됩니다. 하지만 INNER JOIN을 사용할 때 ON 절과 WHERE 절을 혼용할 수 있는데, 이 두 가지 방법이 어떻게 다른지에 대해 자세히 알아보겠습니다.

 

 

 

 

 

INNER JOIN 개요

INNER JOIN은 두 테이블 간의 공통된 열 값을 기준으로 행을 결합하는 데 사용됩니다. 주로 두 테이블의 관련 데이터를 결합하여 하나의 결과 집합을 만드는 데 사용됩니다.

 

 

 

 

 

두 가지 구문 비교

첫번째 구문

SELECT * FROM TABLE_A a INNER JOIN TABLE_B b ON a.temp = b.temp AND a.temp2 = b.temp2

 

이 구문은 두 테이블의 temp와 temp2 열이 모두 일치하는 행들만 결과 집합에 포함합니다. 즉, 두 조건을 모두 만족하는 행들만 결합됩니다.

 

 

두번째 구문

SELECT * FROM TABLE_A a INNER JOIN TABLE_B b ON a.temp = b.temp WHERE a.temp2 = b.temp2

 

이 구문은 먼저 a.temp = b.temp 조건으로 두 테이블을 조인한 후, 그 결과 집합에서 a.temp2 = b.temp2 조건을 만족하는 행들만 필터링합니다.

 

 

 

 

 

두 구문 간의 차이점

두 구문 모두 INNER JOIN을 사용하지만, 조건을 처리하는 방식에서 차이가 있습니다.

  • 첫번째 구문에서는 두 조건 (a.temp = b.temp AND a.temp2 = b.temp2)을 모두 만족하는 행들만 결합됩니다.
  • 두번째 구문에서는 a.temp = b.temp 조건으로 먼저 조인된 후, 그 결과 집합에서 추가적으로 a.temp2 = b.temp2 조건으로 필터링됩니다. 따라서 더 많은 행이 조인될 수 있습니다.

 

 

 

 

 

예제와 시나리오

실제 예제를 통해 두 구문의 차이를 더 명확하게 이해해 보겠습니다.

 

예제 데이터

- Employees 테이블

employee_id first_name last_name department_id project_id
1 John Doe 10 101
2 Jane Smith 20 102
3 Emily Johnson 10 103
4 Michael Brown 30 101
5 Sarah Davis 20 102

 

- Projects 테이블

project_id project_name department_id budget
101 Project Alpha 10 100000
102 Project Beta 20 200000
103 Project Gamma 10 150000
104 Project Delta 30 120000

 

 

 

첫번째 구문

SELECT e.employee_id, e.first_name, e.last_name, e.department_id, p.project_id, p.project_name, p.budget
FROM Employees e
INNER JOIN Projects p
ON e.project_id = p.project_id AND e.department_id = p.department_id;

 

첫번째 구문 실행 결과

employee_id first_name last_name department_id project_id project_name budget
1 John Doe 10 101 Project Alpha 100000
2 Jane Smith 20 102 Project Beta 200000
3 Emily Johnson 10 103 Project Gamma 150000

 

 

두번째 구문

SELECT e.employee_id, e.first_name, e.last_name, e.department_id, p.project_id, p.project_name, p.budget
FROM Employees e
INNER JOIN Projects p
ON e.project_id = p.project_id
WHERE e.department_id = p.department_id;

 

두번째 구문 실행 결과

employee_id first_name last_name department_id project_id project_name budget
1 John Doe 10 101 Project Alpha 100000
2 Jane Smith 20 102 Project Beta 200000
3 Emily Johnson 10 103 Project Gamma 150000
4 Michael Brown 30 101 Project Alpha 100000
5 Sarah Davis 20 102 Project Beta 200000

 

 

 

 

 

결과 비교

 

  • 첫 번째 구문은 e.project_id = p.project_id AND e.department_id = p.department_id 조건을 동시에 만족하는 행들만 반환합니다.
    • 예시: John Doe와 Project Alpha, Jane Smith와 Project Beta, Emily Johnson과 Project Gamma 조합만 반환됩니다.
  • 두 번째 구문은 e.project_id = p.project_id 조건으로 먼저 조인된 후, e.department_id = p.department_id 조건으로 필터링합니다.
    • 예시: John Doe와 Project Alpha, Jane Smith와 Project Beta, Emily Johnson과 Project Gamma 조합 외에도 Michael Brown과 Project Alpha, Sarah Davis와 Project Beta 조합이 추가로 반환됩니다.

 

ON 절은 조인 조건을 정의하고, WHERE 절은 결과 집합을 필터링한다 !!!

 

728x90