DB

[DB][SQL] INNER JOIN 시 ON절과 WHERE

오선지♬ 2025. 8. 19. 09:16
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