CodeGym /행동 /SQL SELF /SELECT, WHERE, ORDER BY로 간단한 쿼리 만들기

SELECT, WHERE, ORDER BY로 간단한 쿼리 만들기

SQL SELF
레벨 3 , 레슨 2
사용 가능

이제까지 배운 걸 다 합쳐서 SELECT, WHERE, ORDER BY를 조합해서 간단하지만 쓸모 있는 쿼리를 만들어보자. 이 스킬은 유저 리스트 뽑기부터 간단한 리포트 만들기까지 여러 상황에서 진짜 유용하게 써먹을 수 있어.

시작하기 전에, 기본 SQL 쿼리 구조가 어떻게 생겼는지 다시 한 번 짚고 가자:

SELECT 컬럼1, 컬럼2, 컬럼3
FROM 테이블
WHERE 조건
ORDER BY 컬럼 ASC
LIMIT 행_개수
OFFSET 행_개수;

만약 SQL이 문학작품이라면 SELECT는 챕터 제목, FROM은 그 내용, WHERE는 스토리 설명 같은 거야. 그리고 ORDER BY는 읽기 쉽게 순서를 정리해주는 역할이지!

연산자 순서는 꼭 지켜야 해. 몇 개는 생략할 수 있지만, 순서를 바꾸면 안 돼.

예제 1: 성적이 좋은 학생 이름 뽑기

students라는 테이블이 있다고 가정해보자. 구조랑 데이터는 이래:

id name age grade
1 Otto 21 A
2 Maria 22 B
3 Alex 20 A
4 Nat 23 C
5 Dan 25 B

성적이 A인 학생들만 이름순으로 뽑고 싶어. 이렇게 하면 돼:

SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;

결과:

name
Alex
Otto

설명:

  1. SELECT name — 이름만 뽑아. 필요 없는 데이터까지 굳이 가져올 필요 없어.
  2. WHERE grade = 'A' — 성적이 A인 애들만 필터링.
  3. ORDER BY name ASC — 이름을 알파벳순으로 정렬.

예제 2: 가격으로 상품 찾기

이번엔 products라는 테이블이 있다고 해보자. 상품 정보가 들어있어:

id product_name category price
1 스마트폰 Electronics 30000
2 텔레비전 Electronics 45000
3 냉장고 Appliances 50000
4 청소기 Appliances 15000
5 전구 Lighting 500

우리 목표는 "Electronics" 카테고리 상품만 가격 내림차순으로 뽑는 거야. 쿼리는 이렇게:

SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;

결과:

product_name price
텔레비전 45000
스마트폰 30000

설명:

  1. SELECT product_name, price — 상품 이름이랑 가격만 뽑아.
  2. WHERE category = 'Electronics' — "Electronics" 카테고리만 필터링.
  3. ORDER BY price DESC — 가격 높은 순서대로 정렬 (가장 비싼 게 먼저 나와).

예제 3: 논리 연산자 조합해서 복잡한 필터 만들기

students 테이블을 다시 써보자. 21살 넘고, 성적이 B 또는 C인 학생을 나이순으로 뽑고 싶어. 조건이 여러 개라 이렇게 조합해야 해:

SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;

결과:

name age grade
Maria 22 B
Nat 23 C
Dan 25 B

설명:

  1. WHERE age > 21 — 21살 넘는 학생만 뽑아.
  2. AND (grade = 'B' OR grade = 'C') — 성적이 B 또는 C인 애들만 필터링. 괄호로 조건을 묶어줘야 해.
  3. ORDER BY age ASC — 나이순(어린 순)으로 정렬.

예제 4: 정렬과 필터링 조합하기

products 테이블로 돌아가자. 50,000보다 싼 상품만 뽑고, 카테고리별로 정렬, 그리고 같은 카테고리 안에서는 가격순(오름차순)으로 정렬하고 싶어.

SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;

결과:

product_name category price
청소기 Appliances 15000
스마트폰 Electronics 30000
텔레비전 Electronics 45000
전구 Lighting 500

설명:

  1. WHERE price < 50000 — 먼저 50,000보다 싼 상품만 남겨.
  2. ORDER BY category ASC, price ASC — 카테고리별로(알파벳순), 같은 카테고리 안에서는 가격 오름차순으로 정렬.

예제 5: 자주 하는 실수 — 조건 괄호 빼먹기

이제 뭔가 잘못될 수도 있는 상황을 보자. 논리 연산자 쓸 때 괄호를 빼먹으면 어떻게 될까?

잘못된 쿼리:

SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;

여기서 OR grade = 'C'AND age > 21이랑 상관없이 실행돼서, 성적이 C인 학생은 나이 상관없이 다 나와버려.

그래서 항상 괄호를 써서 조건을 명확하게 해줘야 해:

WHERE age > 21 AND (grade = 'B' OR grade = 'C')
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION