본문 바로가기
DB & SQL

[MSSQL] IN과 NOT IN 사용하기

by 무사뎀벨레 2023. 4. 11.

 

 

 

 

 

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')

 

 

반응형

'DB & SQL' 카테고리의 다른 글

[MyBatis] MyBatis란?  (2) 2024.03.14
[SQL] JOIN의 정의와 사용법  (1) 2023.07.13
[MSSQL] Table과 Column의 Description 추가, 수정하기  (2) 2022.12.16
SQL에서의 WHERE 1=1  (2) 2022.12.13
[MSSQL] WITH(NOLOCK) - 테이블 잠금 해제  (2) 2022.09.07

댓글