SELECT 와 WHERE

mskimdev·2026년 4월 7일

MySQL

목록 보기
9/20
post-thumbnail

SELECT와 WHERE

데이터를 넣었으면 꺼내야 한다. SQL에서 데이터를 조회할 때 쓰는 게 SELECT다. 단순히 전체를 가져오는 것부터 조건을 걸고 정렬하고 개수를 제한하는 것까지 — SELECT 하나에 옵션이 꽤 많다.


기본 조회

-- 모든 컬럼, 모든 행 조회
SELECT * FROM members;

*는 모든 컬럼을 뜻한다. 컬럼이 많을 때는 필요한 것만 명시하는 게 낫다.

SELECT member_name, email FROM members;

WHERE — 조건 걸기

전체가 아니라 특정 조건에 맞는 행만 가져올 때 쓴다.

SELECT * FROM members WHERE member_id = 1;

비교 연산자

연산자의미예시
=같다WHERE member_id = 1
!= / <>다르다WHERE member_id != 1
> / <크다 / 작다WHERE price > 10000
>= / <=크거나 같다 / 작거나 같다WHERE price >= 10000

AND / OR

조건을 여러 개 걸 때 쓴다.

-- 둘 다 만족하는 행
SELECT * FROM products WHERE price > 10000 AND stock > 0;

-- 하나라도 만족하는 행
SELECT * FROM members WHERE member_name = '김민수' OR member_name = '이지현';

BETWEEN

범위 조건을 걸 때 쓴다. AND로 쓰는 것과 결과는 같지만 더 읽기 편하다.

-- 가격이 10000 이상 50000 이하인 상품
SELECT * FROM products WHERE price BETWEEN 10000 AND 50000;

IN

여러 값 중 하나와 일치하는 행을 가져올 때 쓴다. OR를 여러 번 쓰는 것과 같다.

-- member_id가 1, 3, 5인 회원
SELECT * FROM members WHERE member_id IN (1, 3, 5);

LIKE

문자열 패턴 매칭에 쓴다. %는 아무 문자 0개 이상, _는 아무 문자 정확히 1개를 뜻한다.

-- '김'으로 시작하는 이름
SELECT * FROM members WHERE member_name LIKE '김%';

-- 이메일이 '@gmail.com'으로 끝나는 회원
SELECT * FROM members WHERE email LIKE '%@gmail.com';

-- 이름이 정확히 3글자인 회원 ('_' 하나가 한 글자)
SELECT * FROM members WHERE member_name LIKE '___';

IS NULL / IS NOT NULL

NULL=로 비교할 수 없다. NULL인지 확인할 때는 반드시 IS NULL을 써야 한다.

-- 전화번호가 없는 회원
SELECT * FROM members WHERE phone IS NULL;

-- 전화번호가 있는 회원
SELECT * FROM members WHERE phone IS NOT NULL;


ORDER BY — 정렬

조회 결과를 특정 컬럼 기준으로 정렬한다.

-- 가격 낮은 순 (오름차순, 기본값)
SELECT * FROM products ORDER BY price ASC;

-- 가격 높은 순 (내림차순)
SELECT * FROM products ORDER BY price DESC;

여러 컬럼으로 정렬할 수도 있다. 앞에 쓴 컬럼이 우선순위가 높다.

-- 가격 낮은 순으로 정렬하되, 가격이 같으면 이름 오름차순
SELECT * FROM products ORDER BY price ASC, product_name ASC;

LIMIT — 개수 제한

결과 행의 수를 제한한다.

-- 가격 높은 순으로 상위 5개만
SELECT * FROM products ORDER BY price DESC LIMIT 5;

OFFSET을 함께 쓰면 몇 번째 행부터 가져올지 지정할 수 있다. 페이지 처리할 때 자주 쓰는 패턴이다.

-- 6번째 행부터 5개 (2페이지)
SELECT * FROM products ORDER BY price DESC LIMIT 5 OFFSET 5;

SELECT 실행 순서

SELECT 쿼리를 쓸 때 절의 순서가 헷갈릴 수 있다. 작성 순서와 실제 실행 순서가 다르기 때문이다.

작성 순서

SELECT 컬럼
FROM 테이블
WHERE 조건
ORDER BY 컬럼
LIMIT 개수

실행 순서
1. FROM — 어느 테이블에서 가져올지
2. WHERE — 조건으로 행 필터링
3. SELECT — 가져올 컬럼 선택
4. ORDER BY — 정렬
5. LIMIT — 개수 제한

WHERE가 SELECT보다 먼저 실행되기 때문에, WHERE 절에서는 SELECT에서 붙인 별칭(alias)을 쓸 수 없다. 이 부분에서 처음에 한 번씩 막히는 경우가 있다.


정리

역할
WHERE조건으로 행 필터링
BETWEEN범위 조건
IN여러 값 중 일치
LIKE문자열 패턴 매칭
IS NULLNULL 여부 확인
ORDER BY정렬
LIMIT결과 개수 제한

SELECT는 옵션이 많아서 처음엔 복잡해 보이지만, 결국 "어디서(FROM), 뭘(SELECT), 어떤 조건으로(WHERE), 어떻게 정렬해서(ORDER BY), 몇 개(LIMIT)" 가져올지를 조합하는 것이다.


profile
<- 개발 공부하는 나

0개의 댓글