본문 바로가기
C.W.K.
Stream
Lesson 02 of 10 · published

WHERE — 결과 필터링

~12 min · sql, where, predicates

Level 0Scout
0 XP0/80 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

걸러서 남기기

WHERE 절은 row마다 한 번씩 평가되는 boolean 표현식이야. true인 row만 남고 나머지는 떨어져 나가.

95%는 이 여섯 묶음으로 해결돼.

  • 비교=, !=<>, <, <=, >, >=.
  • Boolean 결합AND, OR, NOT, 그리고 묶을 때 쓰는 괄호.
  • Set 멤버십IN (a, b, c), NOT IN (...).
  • RangeBETWEEN a AND b. 양 끝을 포함해.
  • NULLIS NULLIS NOT NULL. = NULL절대 안 돼. 결과가 true가 아니라 NULL이라, 아무 row도 안 걸리거든.
  • 패턴LIKE 'a%', GLOB, 그리고 extension이 있어야 쓰는 REGEXP.
Warning: NULL = NULL의 결과는 TRUE가 아니라 NULL이야. NULL != anything도 마찬가지로 NULL이고. 항상 IS NULL이나 IS NOT NULL을 써. 이걸 까먹어서 생기는 버그가 어마어마하게 많아.

Code

WHERE 여러 모양·sql
-- 동등 + AND
SELECT * FROM users WHERE role = 'admin' AND archived = 0;

-- Range + OR
SELECT * FROM messages WHERE
  created_at >= datetime('now', '-7 days')
  OR pinned = 1;

-- Literal set 으로 IN
SELECT * FROM users WHERE role IN ('admin', 'moderator');

-- Subquery 로 IN
SELECT * FROM messages WHERE conversation_id IN (
  SELECT id FROM conversations WHERE archived = 0
);

-- NULL 처리 — IS / IS NOT, = 아님
SELECT * FROM users WHERE deleted_at IS NULL;

External links

Exercise

row가 100개 넘는 테이블에서 WHERE 조건을 다섯 개 써봐. 각각 AND와 OR과 NOT, literal 목록을 쓴 IN, subquery를 쓴 IN, BETWEEN, 그리고 NULL 처리를 연습하는 거야. 그다음 각각의 틀린 버전도 써봐. = NULL을 쓰거나 OR에 괄호를 빼먹은 형태로. SQLite가 뭘 돌려주고 왜 그런지 관찰해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.