안녕하세요 오라클 쿼리에 대한 간단한 질문입니다. (EXISTS , IN) 0 2 4,639

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의 직관성(다른사람이 보았을때 이해) 역시도 떨어진다고 보여집니다. 이에 관해서 조금 더 자세히 알려 주실수 있을까요?

by 마농 [2020.02.17 17:13:08]

그때 그때 다릅니다.
Exists 가 항상 유리한게 아니고 유리한 상황이 있는 것입니다.
어떤 상황에서 유리한지를 생각해야 합니다.
공부하실 때 앞쪽에 있는 상황에 대한 설명은 쏙 빼고 뒤쪽에 있는 결론만 보시면 안됩니다.
위와 같은 상황이라면? Exists 의 유리한 점을 느끼지 못하는 것이 당연합니다.
t2 에 갤럭시가 100만개쯤 된다고 생각해 보세요. 이 때는 Exists 가 유리합니다.


by 욱현 [2020.02.18 15:33:40]

감사합니다!! IN의 경우 OR 연산이기에 모든 행을 검사하는 것이고, EXISTS의 경우에는 100개의 행중에 하나의 행만 중간에 TRUE가 나오면 바로 연산을 종료하고 다음 행으로 간다는 말씀이시죠!!? 이해됐습니다 감사합니다 ㅎㅎ

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