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

WHERE로 필요한 행만 고르기

~12 min · queries, filter

Level 0스키마 새싹
0 XP0/86 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

조건은 데이터베이스 가까이에 둬

WHERE는 결과에 들어올 행을 고르는 문이야. 앱으로 전부 가져와 나중에 거르지 말고 데이터가 있는 곳에서 범위를 줄여. 예를 들어 최근 7일에 가입한 사용자, 가격이 50 이상 100 미만인 상품, discount가 NULL이거나 0인 행을 SQL이 직접 찾게 해.

비교와 논리를 조합해

=, <>, <, <=, >, >=로 값을 비교하고 AND, OR, NOT으로 조건을 엮어. ANDOR를 함께 쓰는 복잡한 조건에는 괄호를 넣어 평가 순서를 분명히 해. IN (...)NOT IN (...), BETWEEN x AND y, LIKEILIKE도 자주 써. NULL은 IS NULL·IS NOT NULL·IS DISTINCT FROM으로 다뤄야 해.

표현식과 색인은 같은 모양이어야 해

WHERE LOWER(email) = 'foo@bar.com'처럼 열에 함수를 씌우면 보통의 email 색인을 그대로 쓰지 못할 수 있어. 표현식 색인을 맞추거나 저장 방식을 정리해. @gmail.com으로 끝나는 주소나 discount 조건도 실제 질의 모양을 보고 색인을 설계해야 해.

Code

흔한 WHERE 모양·sql
SELECT * FROM users WHERE role = 'admin' AND active = TRUE;

SELECT * FROM products
WHERE category IN ('electronics', 'books')
  AND price BETWEEN 10 AND 100;

SELECT * FROM articles
WHERE title ILIKE '%postgres%'
  AND published_at >= now() - INTERVAL '30 days';
NULL 여부로 필터링·sql
-- 틀림: 안 매치
SELECT * FROM users WHERE deleted_at = NULL;

-- 맞음
SELECT * FROM users WHERE deleted_at IS NULL;

-- NULL-safe: IS DISTINCT FROM 이 NULL 을 일반 값처럼
SELECT * FROM users WHERE role IS DISTINCT FROM 'admin';

External links

Exercise

다음 조건마다 WHERE 절을 작성해. 지난 7일 동안 생성된 사용자, 범주가 'A'나 'B'이면서 가격이 50달러 이상 100달러 미만인 상품, 이메일이 @gmail.com으로 끝나는 사용자, discount가 NULL이거나 0인 행을 찾아.

Progress

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

댓글 0

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

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