# 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)을 추천합니다.