# WHERE
# WHERE
테이블에서 특정 조건으로 필터링하고 싶은 경우 WHERE
을 사용합니다.
WHERE 문은 일반적으로 FROM 절 아래에 위치합니다.
- 문법 : WHERE 조건문
SELECT
col1,
name
FROM Dataset.Table
WHERE name = 'kyle'
TIP
SQL에는 조건(비교)을 사용할 수 있습니다
조건은 대표적으로 같음(=), 같지 않음(!=), 초과(>), 이상(>=), 사이(BETWEEN), 유사함(LIKE), 포함함(IN) 등 다양한 내용을 사용할 수 있습니다.
조건문의 결과는 TRUE와 FALSE로 반환되며, WHERE 절에 조건을 사용할 경우 TRUE 조건인 값만 필터링되서 출력됩니다
# 여러 조건
여러 조건을 설정하고 싶은 경우 AND
조건을 사용하면 됩니다. 여러 조건에 모두 속하는 것을 원할 경우엔 AND
를, 여러 조건 중 하나라도 설정되는 것을 원하는 경우엔 OR
를 사용하면 됩니다.
- 문법 : WHERE 조건문1 AND 조건문2
- 문법 : WHERE 조건문1 OR 조건문2
TIP
OR 조건을 사용할 경우 조건의 우선 순위를 설정하고 싶다면 괄호를 사용해주세요.
A AND B OR C => 이 표현은 암묵적으로 (A AND B) OR C를 의미합니다.
B OR C를 원했다면 A AND (B OR C)를 사용해야 합니다
# IN
만약 name = 'kyle' OR name = 'Seongyun' 처럼 하나의 컬럼에 여러 조건을 OR로 설정하고 싶은 경우엔 IN
을 사용하면 됩니다
- 문법 : WHERE 컬럼 IN ('컬럼값1, '컬럼값2')
SELECT
name
FROM Dataset.Table
WHERE
name IN ('kyle', 'Seongyun')
TIP
IN 조건에 서브쿼리도 사용할 수 있습니다.
SELECT
col
FROM
WHERE name IN (SELECT ~ FROM ~)
# LIKE
문자열 데이터 중 부분적으로 일치하는 데이터를 찾을 때 활용합니다
%
: 임의의 문자(그 이후는 모두 상관없음). 예 : 서울%
: 서울시, 서울특별시, 서울집 등 서울이란 단어로 시작하는 모든 단어가 추출됩니다
_
: 하나의 문자(한 글자라면 상관없음), _를 2개 쓰면 2개의 문자를 의미합니다. 예 : 서울_
: 서울시, 서울구, 서울짱 등 서울이란 단어가 들어가고 하나의 단어가 있는 데이터가 추출됩니다
- 문법 : WHERE region LIKE '서울시%'
- 서울시로 시작하는 region을 모두 추출
SELECT
date_kr,
region
FROM Dataset.Table
WHERE
region LIKE '서울시%'
# BETWEEN
숫자나 날짜 데이터에서 특정 시작 ~ 종료 시점의 데이터를 필터링할 때 BETWEEN
을 사용합니다
- 문법 : WHERE 컬럼 BETWEEN 시작 AND 종료
SELECT
date_kr, col
FROM Dataset.Table
WHERE
date_kr BETWEEN '2020-01-01' AND '2020-01-30'
# NULL
NULL 값을 필터링하는 경우엔 IS를 사용해야 합니다.
NULL 값이 아닌 것만 필터링하고 싶은 경우엔 IS NOT NULL을 사용할 수 있습니다
SELECT
col5, col6
FROM Dataset.Table
WHERE
col5 IS NOT NULL
TIP
Q) IS는 무엇인가요? 왜 =를 사용하면 안되나요?
IS를 설명하기 전에 NULL이란 개념을 이해해야 합니다.
NULL은 값이 존재하지 않는, 알 수 없는 아무것도 없는 값입니다. Unknown, N/A(Not Applicable)로 쓰이기도 합니다.
처음에 익숙하지 않으면 헷갈릴 수 있어서, 짤로 대체합니다
NULL은 어떤 값이랑 연산하면 모두 NULL이 반환됩니다.
NULL + 2 = NULL
NULL - 2 = NULL
NULL은 값이 아니기 때문에 연산이 먹히지 않습니다.
특정 DBMS에선 NULL에도 =
연산자가 작동되는 경우가 있습니다. 이런 경우 IS
로 변경하거나 값이 사실 STRING일 수 있습니다.
아직 BigQuery에선 IS를 사용해야 합니다.
SUM(), AVG() 함수는 NULL 값이 있으면 NULL을 무시하고 수행합니다
더 궁금하시면 Stack Overflow의 Difference between "=" and "is" in sql server (opens new window)을 추천합니다.