본문 바로가기

CSあるある

JOIN 테이블이 만들어 지는 순서

이 SQL 문에서 조인과 WHERE 절의 필터링 순서는 데이터베이스의 쿼리 최적화 엔진에 의해 결정되지만, 일반적인 SQL 실행 순서를 기준으로 예제 SQL문을 가지고 설명할게.


select e.id,e.name,e.position 
from company.employee as e,company.project as p
where p.id=2002 and p.leader_id=e.id;

 

🔍 SQL 실행 순서

SQL의 논리적 실행 순서는 다음과 같아:

  1. FROM 절: 테이블을 결정 (company.employee, company.project)
  2. WHERE 절: 필터링 수행
  3. SELECT 절: 필요한 컬럼 선택

✨ 이 쿼리에서 실행 순서 분석

1. FROM 절 (명시적 조인이 아닌 암시적 조인)

FROM company.employee AS e, company.project AS p
 
  • 이 구문은 기본적으로 CROSS JOIN(데카르트 곱) 을 의미함.
  • 즉, employee와 project의 모든 조합이 생성됨.

2. WHERE 절에서 필터링

WHERE p.id = 2002 AND p.leader_id = e.id;
  • p.id = 2002 → project 테이블에서 id = 2002인 행만 남김.
  • p.leader_id = e.id → 이제 필터링된 project 테이블과 employee를 INNER JOIN 형태로 결합.

🚀 최적화된 실행 방식 (DBMS가 내부적으로 하는 일)

일반적으로 데이터베이스 최적화 엔진불필요한 연산을 줄이기 위해:

  1. 먼저 p.id = 2002 조건을 적용하여 project 테이블을 필터링(조인에 필요한 Project 튜플만을 선별)
  2. 필터링된 결과와 employee 테이블을 조인
    이렇게 진행할 가능성이 높아.

🎯 결론

👉 WHERE 절의 조건이 먼저 적용된 후, 조인이 수행된다.
즉, p.id = 2002로 먼저 필터링한 후 p.leader_id = e.id를 만족하는 튜플끼리 조인하는 방식이 효율적이기 때문이야.

하지만 DBMS의 최적화 엔진이 내부적으로 쿼리를 재구성할 수도 있으니, EXPLAIN을 사용해서 실제 실행 계획을 확인하는 게 정확해! 😊