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