콘텐츠로 건너뛰기

SQL (4) 필터링(BETWEEN, IN, OR, NOT)

지난 글에서 기본적인 SELECT문과 WHERE문 등의 기초를 배워보았다. 이번 글에서는 BETWEEN, IN, OR, NOT 등 필터링을 하는 다른 구문들을 익혀보자.

■ WHERE문의 기초

다시 한 번 WHERE문을 리마인드를 해보자.

SELECT 컬럼-이름
FROM 테이블-이름
WHERE 컬럼-이름 Operator 값;

Operator의 종류는 다음과 같다.

Operator 타입 종류
= 같다
<> 같지 않다 (어떤 버전에서는 != 라고도 사용)
> 크다
< 작다
>= 크거나 같다
<= 작거나 같다
BETWEEN 어떤 값 사이에 있다
IS NULL NULL 값이다

예를 들어 Products 테이블에서 BrandName 컬럼이 ‘Patagonia’가 아닌 제품만 조회하고 싶다고 하자.

SELECT *
FROM Products
WHERE BrandName <> 'Patagonia';

만약 Price 컬럼이 20~50인 제품을 조회하고 싶다면 다음과 같다.

SELECT *
FROM Products
WHERE Price BETWEEN 20 AND 50;

■ IN, OR, NOT

IN은 어떤 범위 조건을 지정하고 싶을 때 사용한다. () 안에 넣어서 사용하는 것을 주의해서 보자. 만약 Price가 10, 12, 13인 제품만 조회하고 싶다면 다음과 같은 쿼리문을 사용한다.

SELECT *
FROM Products
WHERE Price IN (10, 12, 13);

OR은 특정 조건을 만족하는 행을 반환하고 싶을 때 사용한다. 예를 들어 BrandName이 ‘Patagonia’이거나 ‘Birkenstock’인 제품을 조회하고 싶을 때 쿼리문을 작성해보자. OR 뒤에 조건뿐만 아니라 컬럼 이름부터 다시 써야하는 것을 주의해서 보자.

SELECT *
FROM Products
WHERE BrandName = 'Patagonia' OR BrandName = 'Birkenstock';

IN과 OR은 같은 원리로 동작한다. 그러나 IN의 경우 복수의 리스트를 입력할 수 있고, OR보다 빠르게 실행되며, 순서를 신경쓰지 않아도 된다는 장점이 있다. OR는 다른 Operator와 같이 쓸 경우 좀 더 주의를 기울여야 한다. 다음의 예시를 보자.

왼쪽 쿼리문의 경우, weight가 210보다 적은 사람들도 조회된 것을 확인할 수 있다. 만약 birthCity가 Denver이거나 Trinidad인 사람 중에서 weight가 210보다 큰 사람을 조회하고 싶은 경우 오른쪽 쿼리문처럼 OR 문을 괄호 안에 넣어야 한다.

NOT Operator는 다음처럼 사용할 수 있다.

SELECT * 
FROM People
WHERE NOT birthCity = 'Denver' AND 
NOT birthCity = 'Trinidad';