데이터를 조회하고 거르고 정렬하는 핵심 3종 세트.
SELECT · WHERE · ORDER BY
조회의 99%는 이 세 가지로 이루어집니다. 원하는 열을 고르고(SELECT), 조건으로 거르고(WHERE), 보기 좋게 정렬하는(ORDER BY) 흐름을 익혀 두면 나머지 SQL은 여기에 살을 붙이는 일입니다. 이 강의에서는 users 테이블을 예제로 사용합니다.
학습 목표
SELECT로 열을 선택하고 별칭(AS)을 붙입니다.WHERE의 주요 연산자(BETWEEN·IN·LIKE·IS NULL)를 활용합니다.ORDER BY로 한 개 이상의 기준으로 정렬합니다.LIMIT과DISTINCT로 결과를 제어합니다.
SELECT — 무엇을 가져올지
-- 모든 열
SELECT * FROM users;
-- 특정 열만
SELECT name, age FROM users;
-- 별칭(alias)
SELECT name AS 이름, age AS 나이 FROM users;
-- 계산식과 별칭
SELECT name, point * 2 AS 보너스포인트 FROM users;
MySQL에서는 예약어와 겹치는 열 이름을 백틱(`)으로 감쌀 수 있습니다.
SELECT `name`, `order` FROM users;
💡 TIP — 실무에서는
SELECT *대신 필요한 열만 명시하는 것이 좋습니다. 네트워크 전송량이 줄고, 테이블 구조가 바뀌어도 쿼리가 덜 깨집니다.
WHERE — 조건으로 거르기
SELECT *
FROM users
WHERE city = 'Seoul'
AND age >= 20;
자주 쓰는 연산자:
| 연산자 | 의미 |
|---|---|
=, <>, >, <, >=, <= | 비교 |
BETWEEN a AND b | a 이상 b 이하 범위 |
IN (...) | 목록 중 하나와 일치 |
LIKE 'Kim%' | 패턴 매칭 |
IS NULL / IS NOT NULL | NULL 여부 |
AND, OR, NOT | 논리 결합 |
LIKE 의 와일드카드:
%— 0글자 이상의 임의 문자열_— 정확히 한 글자
SELECT name
FROM users
WHERE name LIKE '김%'
AND city IN ('Seoul', 'Busan')
AND age BETWEEN 20 AND 39;
⚠️ 주의 —
NULL은=로 비교할 수 없습니다.column = NULL은 항상 거짓이므로 반드시IS NULL을 사용하세요.
ORDER BY — 정렬
SELECT name, age
FROM users
ORDER BY age DESC, name ASC;
ASC오름차순(기본),DESC내림차순- 여러 열로 정렬하면 앞 열이 우선이고, 동점일 때 다음 열로 정렬합니다.
- 별칭이나 열 순번(
ORDER BY 2)으로도 정렬할 수 있습니다.
상위 N개만 — LIMIT
MySQL은 결과 행 수를 LIMIT 으로 제한합니다.
-- 나이가 많은 상위 10명
SELECT name, age
FROM users
ORDER BY age DESC
LIMIT 10;
-- 11번째부터 10건 (페이징)
SELECT name, age
FROM users
ORDER BY age DESC
LIMIT 10 OFFSET 10;
LIMIT 개수 OFFSET 건너뛸수 형태로 페이지네이션을 구현합니다. LIMIT 10, 20 처럼 쉼표 형식(LIMIT offset, count)도 가능하지만 헷갈리기 쉬워 OFFSET 키워드를 권장합니다.
💡 TIP —
LIMIT은ORDER BY와 함께 써야 "상위 N개"가 명확합니다. 정렬이 없으면 어떤 행이 나올지 보장되지 않습니다.
중복 제거 — DISTINCT
-- 도시 목록(중복 제거)
SELECT DISTINCT city
FROM users;
DISTINCT 는 선택한 열들의 조합이 동일한 행을 하나로 합칩니다.
요약
SELECT는 가져올 열을, 별칭(AS)으로 결과 이름을 정합니다.WHERE는BETWEEN,IN,LIKE,IS NULL등으로 행을 거릅니다.NULL비교는IS NULL/IS NOT NULL로만 가능합니다.ORDER BY는 여러 기준으로 정렬하고,LIMIT으로 상위 N개나 페이징을 제어합니다.DISTINCT로 중복을 제거합니다.
연습문제
users에서 이름이 '이'로 시작하고 나이가 30세 이상인 사용자를 조회하세요.- 도시별 중복 없는 목록을 알파벳 순으로 정렬해 출력하세요.
- 나이가 가장 많은 상위 3명을 가져오세요.
phone값이 비어 있는(NULL) 사용자만 골라 보세요.
힌트 — 1번은
LIKE '이%', 3번은ORDER BY ... LIMIT 3, 4번은IS NULL을 사용합니다.
💡 연습문제 풀이
불러오는 중…
댓글 0
“MySQL” 강좌에 대한 댓글입니다.