dev.syw

데이터를 조회하고 거르고 정렬하는 핵심 3종 세트.

SELECT · WHERE · ORDER BY

조회의 99%는 이 세 가지로 이루어집니다. 원하는 열을 고르고(SELECT), 조건으로 거르고(WHERE), 보기 좋게 정렬하는(ORDER BY) 흐름을 익혀 두면 나머지 SQL은 여기에 살을 붙이는 일입니다. 이 강의에서는 users 테이블을 예제로 사용합니다.

학습 목표

  • SELECT 로 열을 선택하고 별칭(AS)을 붙입니다.
  • WHERE 의 주요 연산자(BETWEEN·IN·LIKE·IS NULL)를 활용합니다.
  • ORDER BY 로 한 개 이상의 기준으로 정렬합니다.
  • LIMITDISTINCT 로 결과를 제어합니다.

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 ba 이상 b 이하 범위
IN (...)목록 중 하나와 일치
LIKE 'Kim%'패턴 매칭
IS NULL / IS NOT NULLNULL 여부
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 키워드를 권장합니다.

💡 TIPLIMITORDER BY 와 함께 써야 "상위 N개"가 명확합니다. 정렬이 없으면 어떤 행이 나올지 보장되지 않습니다.

중복 제거 — DISTINCT

-- 도시 목록(중복 제거)
SELECT DISTINCT city
FROM users;

DISTINCT 는 선택한 열들의 조합이 동일한 행을 하나로 합칩니다.

요약

  • SELECT 는 가져올 열을, 별칭(AS)으로 결과 이름을 정합니다.
  • WHEREBETWEEN, IN, LIKE, IS NULL 등으로 행을 거릅니다.
  • NULL 비교는 IS NULL / IS NOT NULL 로만 가능합니다.
  • ORDER BY 는 여러 기준으로 정렬하고, LIMIT 으로 상위 N개나 페이징을 제어합니다.
  • DISTINCT 로 중복을 제거합니다.

연습문제

  1. users 에서 이름이 '이'로 시작하고 나이가 30세 이상인 사용자를 조회하세요.
  2. 도시별 중복 없는 목록을 알파벳 순으로 정렬해 출력하세요.
  3. 나이가 가장 많은 상위 3명을 가져오세요.
  4. phone 값이 비어 있는(NULL) 사용자만 골라 보세요.

힌트 — 1번은 LIKE '이%', 3번은 ORDER BY ... LIMIT 3, 4번은 IS NULL 을 사용합니다.

💡 연습문제 풀이

불러오는 중…

함께 보면 좋은 자료

댓글 0

MySQL” 강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.