본문 바로가기

Study/SQL

[MySQL] JOIN조건과 WHERE조건의 차이

728x90
반응형
/* 쿼리 1번 */
SELECT A.ORD_NO,A.ORD_DT,A.ORD_HMS,A.SHOP_NO,B.SHOP_NO,B.SHOP_NM
FROM ORD A
LEFT JOIN 
          (
            SELECT SHOP_NO,SHOP_NM
            FROM SHOP B
            WHERE B.SHOP_NO NOT LIKE 'SH019%' /* SH019로 시작하는 SHOP_NO 제외 */
          ) B
ON A.SHOP_NO = B.SHOP_NO         
WHERE B.SHOP_NO IN ('SH0009','SH0191','SH0158','SH0192','SH0193','SH0194')
AND A.ORD_DT = '20120101' AND A.ORD_HMS = '090028'

/* 쿼리 2번 */
SELECT A.ORD_NO,A.ORD_DT,A.ORD_HMS,A.SHOP_NO,B.SHOP_NO,B.SHOP_NM
FROM ORD A
LEFT JOIN 
          (
            SELECT SHOP_NO,SHOP_NM
            FROM SHOP B
            WHERE B.SHOP_NO NOT LIKE 'SH019%' /* SH019로 시작하는 SHOP_NO 제외 */
          ) B
ON A.SHOP_NO = B.SHOP_NO         
AND B.SHOP_NO IN ('SH0009','SH0191','SH0158','SH0192','SH0193','SH0194')
WHERE A.ORD_DT = '20120101' AND A.ORD_HMS = '090028'

1번과 2번 쿼리의 차이점은 LEFT JOIN의 경우 테이블에 존재하는 모든 행을 포함하는 값에 ON 조건에 맞는 행을 연결하기 때문에, null 값이 존재할수 있지만, WHERE 조건은 최종 나온 값에서 조건의 필터링을 하기 때문에 null 값은 제외 된다.

 

 

728x90
반응형

'Study > SQL' 카테고리의 다른 글

[PostgreSQL] Permission denied Error  (0) 2023.07.13
[MySQL] COUNT(1), COUNT(*), COUNT(col)의 차이  (0) 2023.06.22
[MySQL] GROUP BY 와 DISTINCT의 차이  (0) 2023.06.22
[SQL] 2장 인덱스 기본  (0) 2023.06.05
[SQL] 1장 SQL 처리 과정과 I/O  (1) 2023.06.02