728x90
반응형
1. 기본 INNER JOIN
SELECT *
FROM CUSTOMER C
JOIN ORDER O
ON C.CUST_ID = O.CUST_ID
WHERE O.STATUS = 'PAID';
- ON 절: C.CUST_ID = O.CUST_ID → 고객과 주문을 연결하는 “조인 조건”
- WHERE 절: O.STATUS = 'PAID' → 주문 중 결제 완료된 것만 필터링
👉 읽는 사람이 “아, 고객과 주문을 ID로 연결한 후, 결제된 주문만 가져오는구나”라고 바로 이해할 수 있음.
2. 조건을 ON 절에 포함한 경우
SELECT *
FROM CUSTOMER C
JOIN ORDER O
ON C.CUST_ID = O.CUST_ID
AND O.STATUS = 'PAID';
- INNER JOIN이라면 결과는 위와 동일함.
- 다만 **“조인 자체가 결제된 주문에 대해서만 일어난다”**는 의미를 암묵적으로 내포.
👉 결과는 같지만, 협업 시 조인 조건과 비즈니스 조건이 섞여 있어 읽는 사람이 헷갈릴 수 있음.
가독성 & 유지보수성
- ON: 테이블 연결 관계만 → PK/FK 기반, 잘 안 바뀜
- WHERE: 비즈니스 필터 → 상태, 기간, 조건 같은 자주 바뀌는 규칙
👉 정리
- INNER JOIN일 때는 결과 차이 없음 (취향/가독성 문제).
- OUTER JOIN일 때는 결과 달라짐 → 위치를 신중하게 결정해야 함.
- INNER JOIN일 때 협업/가독성을 위해 ON=조인 조건 / WHERE=필터 조건 분리 권장.
728x90
반응형
'DB' 카테고리의 다른 글
[DB][Oracle] RAW 타입 (0) | 2025.08.06 |
---|---|
[DB][Oracle] DBMS_LOB.SUBSTR (0) | 2025.08.05 |
[DB][MySQL] 공백과 Null 모두 제외하기 (0) | 2025.07.16 |
[DB][Oracle] LISTAGG(DISTINCT ...) (0) | 2025.07.04 |
[DB][Oracle] 공백과 Null 모두 제외하기 (0) | 2025.06.17 |