이 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의 논리적 실행 순서는 다음과 같아:
- FROM 절: 테이블을 결정 (company.employee, company.project)
- WHERE 절: 필터링 수행
- 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가 내부적으로 하는 일)
일반적으로 데이터베이스 최적화 엔진은 불필요한 연산을 줄이기 위해:
- 먼저 p.id = 2002 조건을 적용하여 project 테이블을 필터링(조인에 필요한 Project 튜플만을 선별)
- 필터링된 결과와 employee 테이블을 조인
이렇게 진행할 가능성이 높아.
🎯 결론
👉 WHERE 절의 조건이 먼저 적용된 후, 조인이 수행된다.
즉, p.id = 2002로 먼저 필터링한 후 p.leader_id = e.id를 만족하는 튜플끼리 조인하는 방식이 효율적이기 때문이야.
하지만 DBMS의 최적화 엔진이 내부적으로 쿼리를 재구성할 수도 있으니, EXPLAIN을 사용해서 실제 실행 계획을 확인하는 게 정확해! 😊
'CSあるある' 카테고리의 다른 글
JOIN 테이블에 대한 UPDATE문 동작 원리 (0) | 2025.02.09 |
---|---|
SQL은 tuple의 중복을 허락한다! (0) | 2025.02.05 |
constraints(Feat. implicit constraints,explicit constraints) (0) | 2025.02.05 |
DB에서 NULL은 되도록 사용하지 말자 (1) | 2025.02.05 |
도메인(Domain)의 정의 -종결편- (0) | 2025.02.05 |