DEV/DB & SQL

[MSSQL] IN과 NOT IN 사용하기

무사뎀벨레 2023. 4. 11. 13:59

 

 

 

 

 

IN과 NOT IN


데이터베이스의 데이터를 추출할 때 조건을 붙여 사용하는데, 
하나의 대상에 조건이 여러개일 경우  OR조건을 사용할수도 있지만
아래와 같이 INNOT IN을 사용하여 더욱 간결하게 쿼리를 작성할 수 있습니다.

-- IN
SELECT 
	* 
FROM [테이블명] 
WHERE 
     [컬럼명] IN ( [조건1],[조건2],[조건3] )
     
     
-- NOT IN
SELECT 
	* 
FROM [테이블명] 
WHERE 
     [컬럼명] NOT IN ( [조건1],[조건2],[조건3] )

IN컬럼의 값 = 조건1 혹은 컬럼의 값 = 조건2 혹은 컬럼의 값 = 조건 3 일 경우에 조회가 됩니다.

NOT IN은 그 반대로 조건 1,2,3을 제외한 나머지를 조회할 수 있습니다.

 

 

NOT IN을 사용할 경우 주의해야 할 점이 있는데, 해당 컬럼에 NULL이 존재할 경우 해당 값이 누락되어 조회가 됩니다.

그렇기 때문에, 누락되는 데이터를 방지하기 위해서는 ISNULL함수로 치환해 사용하면 누락되지 않고 조회할 수 있습니다.

-- ISNULL로 치환하지 않은 경우
SELECT 
	* 
FROM [테이블명] 
WHERE 
     [컬럼명] IN ( [조건1],[조건2],[조건3] )
     
     
-- ISNULL로 치환한 경우
SELECT 
	* 
FROM [테이블명] 
WHERE 
     ISNULL([컬럼명], 9999) NOT IN ( [조건1],[조건2],[조건3] )

 

 

 

 

사용 예시


 

 

-- 1. OR 를 사용한 경우
-- 등번호가 7번, 10번, 21번인 선수 조회
SELECT 
	* 
FROM FOOTBALL_TEAM
WHERE 
   BACK_NUM = 7
   OR BACK_NUM = 10
   OR BACK_NUM = 21   
   
   
-- 이름이 'Son', 'Kane', 'Kulusevski'인 선수 조회
SELECT 
	* 
FROM FOOTBALL_TEAM
WHERE
   PLAYER_NAME = 'Son'   
   OR PLAYER_NAME = 'Kane'
   OR PLAYER_NAME = 'Kulusevski'
   
   
   
   

-- 2. IN, NOT IN 을 사용한 경우
-- 등번호가 7번, 10번, 21번인 선수 조회
SELECT 
	* 
FROM FOOTBALL_TEAM
WHERE 
   BACK_NUM IN(7,10,21)
   
   
-- 이름이 'Son', 'Kane', 'Kulusevski' 이 아닌 나머지 선수 조회
SELECT 
	* 
FROM FOOTBALL_TEAM
WHERE 
   ISNULL(PLAYER_NAME, 9999) NOT IN('Son', 'Kane', 'Kulusevski')

 

 

반응형