[MySQL] 데이터 정렬 및 필터링

Main·2024년 9월 9일
0

MySQL

목록 보기
6/13
post-thumbnail

MySQL에서 데이터 정렬 및 필터링은 데이터베이스 쿼리에서 매우 중요한 부분입니다. 이를 통해 원하는 데이터를 빠르게 찾고, 특정 기준에 맞게 데이터를 정렬할 수 있습니다.


0. 예시 테이블 생성

예시 코드에 사용될 테이블을 생성하겠습니다.
아래 코드를 복사하여 테이블 및 데이터를 생성해주세요.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    city VARCHAR(50)
);

CREATE TABLE employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    salary DECIMAL(10, 2)
);

INSERT INTO users (name, age, city) VALUES 
('John', 28, 'Seoul'),
('Jane', 34, 'Busan'),
('Alice', 22, 'Seoul'),
('Bob', 31, 'Seoul'),
('Chris', 40, 'Incheon'),
('David', 25, 'Busan');

INSERT INTO employees (name, age, salary) VALUES 
('John', 28, 5500.00),
('Jane', 34, 6500.00),
('Alice', 22, 4000.00),
('Bob', 31, 6200.00),
('Chris', 40, 8000.00);

1. ORDER BY

ORDER BY는 데이터를 특정 컬럼을 기준으로 정렬할 때 사용됩니다. 기본적으로 오름차순(ASC, 작은 값에서 큰 값으로)으로 정렬되며, 내림차순(DESC, 큰 값에서 작은 값으로)도 가능합니다.

SELECT 컬럼1, 컬럼2 
FROM 테이블명
ORDER BY 컬럼1 [ASC|DESC], 컬럼2 [ASC|DESC];

예시 코드

SELECT name, age 
FROM users
ORDER BY age ASC;  -- 나이를 기준으로 오름차순 정렬

nameage
Alice22
David25
John28
Bob31
Jane34
Chris40

복수 컬럼 정렬

SELECT name, age, salary 
FROM employees
ORDER BY age ASC, salary DESC;  -- 나이를 기준으로 오름차순, 같은 나이일 경우 급여를 기준으로 내림차순 정렬

nameagesalary
Alice224000.00
John285500.00
Bob316200.00
Jane346500.00
Chris408000.00

2. WHERE

WHERE 절은 데이터를 특정 조건에 맞게 필터링할 때 사용됩니다. =(같다), <>(같지 않다), >, <, LIKE, IN, BETWEEN, IS NULL 등의 조건문을 활용할 수 있습니다.

SELECT 컬럼1, 컬럼2 
FROM 테이블명
WHERE 조건;

예시 코드

SELECT name, age 
FROM users
WHERE age > 30;  -- 나이가 30보다 큰 사용자만 필터링

nameagesalary
Alice224000.00
John285500.00
Bob316200.00
Jane346500.00
Chris408000.00

AND 및 OR 사용

SELECT name, age, city 
FROM users
WHERE age > 30 AND city = 'Seoul';  -- 나이가 30보다 크고 도시가 서울인 사용자 필터링

nameagecity
Bob31Seoul

LIKE 연산자 사용 (부분 검색)

SELECT name 
FROM users
WHERE name LIKE 'J%';  -- 이름이 'J'로 시작하는 사용자 필터링

name
John
Jane

IN 사용 (여러 값 중 하나)

SELECT name, city 
FROM users
WHERE city IN ('Seoul', 'Busan');  -- 도시가 서울이나 부산인 사용자 필터링

namecity
JohnSeoul
AliceSeoul
BobSeoul
JaneBusan
DavidBusan

BETWEEN 사용 (범위 검색)

SELECT name, age 
FROM users
WHERE age BETWEEN 20 AND 30;  -- 나이가 20에서 30 사이인 사용자 필터링

nameage
John28
Alice22
David25

3. where과 order by을 함께 사용하기

WHERE 절로 데이터를 필터링한 후, ORDER BY로 결과를 정렬할 수 있습니다.

SELECT name, age 
FROM users
WHERE city = 'Seoul'
ORDER BY age DESC;  -- 서울에 거주하는 사용자 중 나이가 많은 순으로 정렬

nameage
Bob31
John28
Alice22

4. LIMIT

LIMIT 절은 쿼리 결과에서 반환되는 행의 수를 제한할 때 사용됩니다. 주로 대량의 데이터 중에서 일부만 조회하고자 할 때 유용합니다.

SELECT 컬럼1, 컬럼2 
FROM 테이블명
LIMIT 숫자;

예시 코드

SELECT name, age 
FROM users
LIMIT 10;  -- 처음 10개의 행만 반환

nameage
John28
Jane34
Alice22
Bob31
Chris40
David25

5. OFFSET

SELECT 컬럼1, 컬럼2 
FROM 테이블명
LIMIT 숫자 OFFSET 숫자;

예시 코드

SELECT name, age 
FROM users
LIMIT 5 OFFSET 2;  -- 3번째 행부터 5개의 행을 반환

nameage
Alice22
Bob31
Chris40
Davi25

6. LIMIT과 OFFSET을 함께 사용하기

ORDER BYLIMIT을 결합하여 정렬된 결과에서 상위 몇 개의 데이터를 조회할 수 있습니다.

SELECT name, salary 
FROM employees
ORDER BY salary DESC
LIMIT 5;  -- 급여가 높은 상위 5명의 직원 조회

namesalary
Chris8000.00
Jane6500.00
Bob6200.00
John5500.00
Alice4000.00

7. DISTINCT

DISTINCT 키워드는 중복된 값을 제거하고 고유한 값만 반환할 때 사용됩니다.

SELECT DISTINCT 컬럼명 
FROM 테이블명;

예시 코드

SELECT DISTINCT city 
FROM users;  -- 중복되지 않은 도시 목록 반환

city
Seoul
Busan
Incheon

정리

MySQL에서는 WHERE, ORDER BY, LIMIT, OFFSET 등 다양한 절을 조합하여 데이터를 효율적으로 정렬하고 필터링할 수 있습니다. 이러한 기능들을 적절히 활용하면 복잡한 데이터 조회도 손쉽게 수행할 수 있습니다.

profile
함께 개선하는 프론트엔드 개발자

0개의 댓글