by 욱현 [Oracle 기초] EXISTS IN ORACLE SQL [2020.02.17 16:02:16]
안녕하세요
현재 구르비를 통해서 sql을 공부하고 있는 한 취준생입니다.
다른것이 아니라 다음과 같이 테이블이 존재한다고하면
T1 | T2 | ||
col1 | col2 | col1 | col2 |
1 | G | 1 | 갤럭시 |
2 | 갤럭시 | 2 | 픽셀 |
SELECT * FROM T1 WHERE EXISTS ( SELECT * FROM T2)
일 경우에는 T1의 모든 테이블이 나오는 것이 맞을겁니다 .
하지만,
SELECT * FROM T1 WHERE EXISTS (SELECT 1 FROM T2 WHERE T1.COL2 = T2.COL2)
일 경우에는 한 행씩 비교 해가며 T1의 행 중에 T2에 존재하는 COL2를 비교해가며 있는 TRUE인 결과만을 출력할 것입니다.
여기서 조금 의문이 생겼습니다. 'EXISTS'의 경우 TRUE FALSE만을 리턴하기에 'IN'보다 빠른 속도를 낼 수 있다고 합니다. 첫번째 경우에서는 'IN'을 사용한 SQL보다 빠른것을 인정하겠으나, 두번째 SQL의 경우 IN과 특별히 다른점을 느끼지도 못할거니와 SQL의 직관성(다른사람이 보았을때 이해) 역시도 떨어진다고 보여집니다. 이에 관해서 조금 더 자세히 알려 주실수 있을까요?