서브쿼리와 조인의 차이가 있을까요? 0 2 3,263

by 동동동 [SQL Query] oracle sql [2022.04.06 13:59:14]


안녕하세요...문득 궁금한 점이 생겨서요..

 

WITH 
TMP1 AS (
SELECT 'AAAA' ID, '1111' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '2222' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '3333' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '4444' CD FROM DUAL UNION ALL
SELECT 'AAAA' ID, '5555' CD FROM DUAL
),
TMP2 AS (
SELECT '1111' CD, '20220401' DY FROM DUAL UNION ALL
SELECT '2222' CD, '20220402' DY FROM DUAL UNION ALL
SELECT '3333' CD, '20220403' DY FROM DUAL UNION ALL
SELECT '9999' CD, '20220403' DY FROM DUAL
)
/* 1번 */
SELECT * FROM TMP2
WHERE CD IN (SELECT CD FROM TMP1
              WHERE ID = (SELECT ID FROM TMP1
                           WHERE CD = '2222'
                         )
            )
;

/* 2번 */
SELECT * FROM TMP2
WHERE CD IN (SELECT B.CD 
               FROM TMP1 A, TMP1 B
              WHERE A.CD = '2222'
                AND B.ID = A.ID
            )
;

 

다음과 같이 1번 서브쿼리(?)와 2번 조인으로 했을시 차이가 있을까요?

아니면 둘다 동일한 건데 방식의 차이인가요??...제가 무식해서..ㅠㅠ

TMP1에는 ID와 CD 의 인덱스가 각각 존재 합니다..

 

by 마농 [2022.04.06 15:11:03]

네. 동일한 결과를 다른 방식으로 구현한 것입니다.
다만. 테이블의 PK 정보나, 데이터 분포 등에 따라 오류 가능성이 보입니다.
1번의 경우 2222 에 해당하는 ID 가 여러개일 가능성을 생각해야 합니다.
이퀄(=) 조건이 아닌 IN 조건을 써야 할 듯 하네요.


by 동동동 [2022.04.06 16:40:33]

마농님 답글 감사드립니다...^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입