IN vs EXISTS 쿼리 질문입니다. 0 4 1,933

by 맑이 [Oracle 기초] IN EXISTS ERD [2020.01.05 19:06:59]


Q1 ) 쿼리 1, 2의 SQL은 동일한 PLAN으로 수행할 수 있다. 

 

쿼리1

SELECT EMP_NAME
FROM EMPLOYEE
WHERE EMP_ID IN (
           SELECT F_EMP_ID
           FROM FAMLIY
           WHERE F_NAME = 'KIM' )

쿼리2

SELECT EMP_NAME
FROM EMPLOYEE A
WHERE EMP_ID EXISTS (
           SELECT F_EMP_ID
           FROM FAMLIY B
           WHERE F_NAME = 'KIM'
           AND A.EMP_ID != B.F_EMP_ID )
by 우리집아찌 [2020.01.06 07:57:18]

일단 exists 문법이 틀렸습니다

 


by 마농 [2020.01.06 08:06:26]

1. 질문이 억지스럽네요.
 - "EMP_ID가 PK가 아니어도" 라는 가정은 억지스러운 면이 있네요.
 - pk 가 아니게 되면 테이블 자체가 이상해 집니다.
2. 쿼리2 는 문법도 틀렸지만
 - 쿼리1과 의미도 다릅니다. 결과도 다르고.
 - 다른 쿼리를 서로 비교하는 것도 무의미합니다.


by 마농 [2020.01.06 13:37:55]

질문이 그새 바뀌어 간결해 졌네요.
억지스런 가정은 사라졌지만? 쿼리2 의 오류는 여전하네요.
문법오류 + 의미오류
- 문법오류 : Exists 앞에 컬럼명 제거해야 함
- 의미오류 : 부정비교(!=)를 했는데? 긍정비교(=) 해야 함
두가지 오류를 수정한다면? 두개 쿼리는 같은 플랜을 탈 수 있는 가능성이 있습니다.


by 맑이 [2020.01.06 15:15:06]

앗 네,, 문법오류를 찾으면서 수정중에 있었습니다.ㅎㅎ

컬럼명이 오류였군요. 잘못된 쿼리라니 공부를 더 해야겠습니다.

답변 감사합니다~~!!

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