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

Row set 정제

WHERE 절은 row 마다 평가되는 boolean 표현식. true 인 row 유지, 나머지 drop.

95% 쓸 연산자:

  • 비교: =, != / <>, <, <=, >, >=.
  • Boolean 결합: AND, OR, NOT, 그룹핑용 괄호.
  • Set 멤버십: IN (a, b, c), NOT IN (...).
  • Range: BETWEEN a AND b (양 끝 포함).
  • NULL: IS NULL / IS NOT NULL절대 = NULL 안 됨 (항상 false).
  • 패턴: LIKE 'a%', GLOB, REGEXP (extension).
Warning: NULL = NULL 은 NULL 이지 TRUE 아님. 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

100+ row 테이블에서 WHERE predicate 5 개 작성, 각각 (1) AND/OR/NOT, (2) literal list 로 IN, (3) subquery 로 IN, (4) BETWEEN, (5) NULL 처리 운동. 각각의 = NULL 또는 OR 괄호 빠진 잘못된 버전도 작성 — SQLite 가 뭘 반환하고 왜 그런지 관찰.

Progress

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

댓글 0

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

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