💾 Database

SQL EXISTS, NOT EXISTS / IN, NOT IN

연_우리 2021. 11. 15. 22:07
반응형

EXISTS( ), NOT EXISTS( )

SELECT A칼럼 FROM WHERE EXISTS( 조건 )

조건의 결과가 존재하면 A칼럼을 출력해

조건의 결과가 존재하지 않으면 아무것도 출력하지마. (결과 : NO DATA FOUND)

 

SELECT A칼럼 FROM WHERE NOT EXISTS( 조건 )

조건의 결과가 존재하지 않으면 A칼럼을 출력해

조건의 결과가 존재하면 아무것도 출력하지마. (결과 : NO DATA FOUND)

 

예제

SELECT * FROM EMP; 

 

SELECT JOB FROM EMP
WHERE EXISTS(SELECT * FROM EMP WHERE ENAME='KING');

(ENAME 중 KING이란 데이터 존재하니 JOB칼럼의 모든 데이터가 출력될 것 )

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE EXISTS(SELECT ENAME FROM EMP WHERE ENAME='KING')
AND SAL > 2000;

(ENAME 중 KING이란 데이터가 존재하니 ENAME, JOB, SAL칼럼을 출력하는데, SAL이 2000 초과인 행만 출력할 것 )

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE EXISTS(SELECT ENAME FROM EMP WHERE ENAME='KING')
AND SAL > 2000;

(ENAME 중 FLOWER란 데이터가 존재하지 않으니 모든 칼럼을 출력하지 않는다)

 

칼럼명 IN( ), 칼럼명 NOT IN( )

SELECT A칼럼 FROM WHERE B칼럼 IN( 값, 값, ... )

B칼럼값 중 IN안의 값이 포함된 행에 대해서만 A칼럼을 출력해

B칼럼값 중 IN안의 값이 없으면 아무것도 출력하지마. (결과 : NO DATA FOUND)

 

SELECT A칼럼 FROM WHERE B칼럼 NOT IN( 값, 값, ... )

B칼럼값 중 IN안의 값이 제외된 행에 대해서만 A칼럼을 출력해

 

 

예제

SELECT JOB FROM EMP
WHERE ENAME IN (SELECT * FROM EMP WHERE ENAME='KING');

(ENAME이 KING인 칼럼을 모두 반환해서 ENAME과 비교한다 => 반환값이 너무 많다)

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE JOB IN (SELECT JOB FROM EMP WHERE ENAME='BLAKE');

(ENAME이 BLAKE인 행의 JOB은 'MANAGER'이다.

모든 JOB의 값 중 'MANAGER'인 행의 ENAME, JOB, SAL을 출력하라)

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE JOB IN (SELECT JOB FROM EMP WHERE ENAME='BLAKE' OR ENAME='FORD');

(모든 JOB의 값 중 'MANAGER'와 'ANALYST'에 대해서만 ENAME, JOB, SAL을 출력하라)

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE JOB IN ('COOKIE', 'ANALYST');

(모든 JOB의 값 중 COOKIE에 해당되는 것은 없으니 ANALYST에 대해서만 ENAME, JOB, SAL을 출력하라.)

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE JOB NOT IN ('COOKIE', 'ANALYST');

(모든 JOB의 값 중 COOKIE와 ANALYST를 제외한 나머지에 대해서만 ENAME, JOB, SAL을 출력하라.)

 

SELECT ENAME, JOB, SAL FROM EMP
WHERE JOB IN ('COOKIE');

(모든 JOB의 값 중 COOKIE에 대해서만 ENAME, JOB, SAL을 출력하라.)

 

 

 

반응형
  • 네이버 블러그 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 구글 플러스 공유하기
  • 카카오톡 공유하기