C.W.K.
Stream
Lesson 01 of 16 · published

SELECT: DB 한테 질문하기

~12 min · queries, select

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

SELECT 가 질문

SELECT 가 변경 안 하고 질문 만 하는 유일한 SQL. 행을 반환; DB 절대 수정 안 함. "유저 다 보여줘", "지난달 매출 얼마", "오늘 배송된 주문 뭐야" — 모든 read 쿼리가 SELECT 로 시작.

모든 SELECT 의 모양

이 절 순서 외워 — 모든 쿼리에 이 순서로 등장, 은퇴할 때까지:

SELECT <컬럼/표현식>
FROM   <테이블/JOIN>
WHERE  <행 필터>
GROUP  BY <그룹핑>
HAVING <그룹 필터>
ORDER  BY <정렬>
LIMIT  <상한> OFFSET <스킵>

실행 순서는 다른 리스트 (FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT). 다시 돌아옴 — HAVING 은 aggregate 참조 가능한데 WHERE 는 안 되는 이유 설명함.

SELECT * 보다 명시 컬럼

프로덕션 코드에선 원하는 컬럼 나열. SELECT * 는 wire 에 추가 byte, 컬럼 추가/재배치 시 미묘하게 깨짐, 쿼리 의도 흐림. 탐색은 psql 터미널에서 SELECT *; 커밋 코드엔 거의 안 씀.

Code

기본 모양·sql
-- 모든 컬럼, 모든 행 (탐색만)
SELECT * FROM users LIMIT 10;

-- 명시 컬럼 (production-ready)
SELECT id, name, email FROM users;

-- 계산 컬럼 + alias
SELECT id,
       UPPER(name)                AS shouting_name,
       price * quantity           AS line_total,
       AGE(now(), created_at)     AS account_age
FROM   order_items;
DISTINCT + 기본 함수·sql
SELECT DISTINCT category FROM products ORDER BY category;

SELECT COUNT(*) AS total,
       COUNT(DISTINCT customer_id) AS unique_customers
FROM   orders;

External links

Exercise

샘플 DB (pagila 또는 본인 거) 에서 복잡도 증가 SELECT 다섯 개: (1) 전체 행, (2) 명시 컬럼, (3) alias 있는 계산 컬럼, (4) DISTINCT 한 컬럼, (5) 필터 있는 COUNT.

Progress

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

댓글 0

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

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