본문 바로가기
DB/MySQL

EXISTS 와 IN의 차이

by 가므자 2012. 3. 13.
일반적으로 IN 연산자 특정 TABLE(VIEW) DATA의 ROW값에 따른

다른 TABLE의 데이터를 추출해내고자 할 때 자주 사용되는데,

가끔 IN 연산자를 ROW가 있는지 체크하는 용도로 사용하기도 한다.

그러나, ROW가 존재하는지에 대해서는 EXISTS라는 근사한 연산자를 따로 제공하고 있다.

하지만 EXISTS와 IN은 다른 점이 존재하므로 이에 대해 유의해야 한다.

EXISTS는 단지 ROW가 존재하는지만 체크하고 더 이상 수행 되지 않으나,

IN은 실제 존재하는 데이터들의 모든 값까지 확인한다.

따라서, EXISTS 연산자가 더 좋은 성능을 보이므로 가능하면 EXISTS를 사용하는 것이 바람직해 보인다.

또 다른 한가지는, JOIN되는 COLUMN에 NULL을 갖는 ROW가 존재한다면

NOT EXISTS는 TRUE값을, NOT IN은 FALSE값이 리턴된다.

즉, NOT IN을 사용하면 조건에 맞는 데이터가 있다고 하더라도 NULL이 존재하면

"NO ROWS SELECTED"라고 나오게 된다.

따라서 NVL을 이용한 NULL 처리가 꼭 필요하다.


STEP 1. 테스트를 위하여 LMY_TEST1 , LMY_TEST2 두 개의 테이블을 만들어 아래와 같이

임의의 데이터를 넣어두었다.

 

STEP 2. 다음은 NOT EXISTS OPERATION을 이용한 방법이다.

B.A 컬럼의 데이터 중 일부는 NULL이 들어있다.

SQL> SELECT A
FROM LMY_TEST2 A
WHERE NOT EXISTS (SELECT A
FROM LMY_TEST1 B
WHERE A.A = B.A);

결과>

A
--------------
FF

1 rows selected.

'DB > MySQL' 카테고리의 다른 글

테이블의 변경  (0) 2012.03.19
Join 명령문  (0) 2012.03.15
서브 쿼리  (0) 2012.03.13
SELECT 명령문의 조합  (0) 2012.03.12
ORDER BY 절  (0) 2012.03.12

댓글