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

DISTINCT, IN, BETWEEN, LIKE

~10 min · queries, operators

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

중복을 없애고 집합을 묻는다

SELECT DISTINCT category FROM products는 같은 범주를 한 번만 남겨. SELECT DISTINCT a, b FROM t처럼 여러 열을 고르면 그 조합 전체가 같을 때 중복이야. 개수만 필요하면 COUNT(DISTINCT col)을 써.

값의 목록과 범위를 표현해

IN (a, b, c)= a OR = b OR = c를 간결하게 적은 꼴이야. BETWEEN x AND y는 양끝을 모두 포함하므로 날짜·시각 범위에서는 다음 구간의 시작보다 작은지 쓰는 편이 안전할 수 있어. 값이 0인지 1인지처럼 작은 집합에도 잘 맞아.

문자열 모양을 찾는다

LIKE에서 %는 길이 제한 없는 문자열, _는 글자 하나를 뜻해. 대소문자를 무시하려면 ILIKE를 써. 앞에 와일드카드가 붙으면 보통 B-tree 색인을 쓰기 어려워. PostgreSQL의 DISTINCT ON (col)은 그룹마다 정렬상 첫 행을 고를 때 유용해.

Code

DISTINCT의 여러 형태·sql
SELECT DISTINCT category FROM products;

SELECT DISTINCT city, country FROM customers ORDER BY country, city;

SELECT COUNT(DISTINCT category) AS unique_categories FROM products;

-- DISTINCT ON (PostgreSQL extension): ORDER BY 로 정의된 그룹당 한 행
SELECT DISTINCT ON (customer_id) customer_id, placed_at, total
FROM   orders
ORDER  BY customer_id, placed_at DESC;
-- 고객당 가장 최근 주문 반환.
IN, BETWEEN, LIKE/ILIKE·sql
SELECT * FROM orders
WHERE  status IN ('pending', 'processing', 'shipped');

SELECT * FROM events
WHERE  event_date BETWEEN '2025-01-01' AND '2025-12-31';

SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM articles WHERE title ILIKE '%postgres%';

-- subquery 와 IN
SELECT * FROM products
WHERE  category_id IN (SELECT id FROM categories WHERE department = 'Electronics');

External links

Exercise

DISTINCT ON으로 고객마다 가장 최근 주문을 가져와. 이 트랙의 16번 수업에서 다룰 패턴처럼 같은 결과를 하위 질의와 ROW_NUMBER()로 다시 작성한 뒤 가독성과 실행 계획을 비교해.

Progress

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

댓글 0

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

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