IN과 NOT IN
데이터베이스의 데이터를 추출할 때 조건을 붙여 사용하는데,
하나의 대상에 조건이 여러개일 경우 OR조건을 사용할수도 있지만
아래와 같이 IN과 NOT 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 |
댓글