MySQL에서 데이터 정렬 및 필터링은 데이터베이스 쿼리에서 매우 중요한 부분입니다. 이를 통해 원하는 데이터를 빠르게 찾고, 특정 기준에 맞게 데이터를 정렬할 수 있습니다.
예시 코드에 사용될 테이블을 생성하겠습니다.
아래 코드를 복사하여 테이블 및 데이터를 생성해주세요.
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);
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; -- 나이를 기준으로 오름차순 정렬
name | age | |
---|---|---|
Alice | 22 | |
David | 25 | |
John | 28 | |
Bob | 31 | |
Jane | 34 | |
Chris | 40 |
복수 컬럼 정렬
SELECT name, age, salary
FROM employees
ORDER BY age ASC, salary DESC; -- 나이를 기준으로 오름차순, 같은 나이일 경우 급여를 기준으로 내림차순 정렬
name | age | salary | |
---|---|---|---|
Alice | 22 | 4000.00 | |
John | 28 | 5500.00 | |
Bob | 31 | 6200.00 | |
Jane | 34 | 6500.00 | |
Chris | 40 | 8000.00 |
WHERE
절은 데이터를 특정 조건에 맞게 필터링할 때 사용됩니다. =(같다)
, <>(같지 않다)
, >
, <
, LIKE
, IN
, BETWEEN
, IS NULL
등의 조건문을 활용할 수 있습니다.
SELECT 컬럼1, 컬럼2
FROM 테이블명
WHERE 조건;
예시 코드
SELECT name, age
FROM users
WHERE age > 30; -- 나이가 30보다 큰 사용자만 필터링
name | age | salary | |
---|---|---|---|
Alice | 22 | 4000.00 | |
John | 28 | 5500.00 | |
Bob | 31 | 6200.00 | |
Jane | 34 | 6500.00 | |
Chris | 40 | 8000.00 |
AND 및 OR 사용
SELECT name, age, city
FROM users
WHERE age > 30 AND city = 'Seoul'; -- 나이가 30보다 크고 도시가 서울인 사용자 필터링
name | age | city | |
---|---|---|---|
Bob | 31 | Seoul |
LIKE 연산자 사용 (부분 검색)
SELECT name
FROM users
WHERE name LIKE 'J%'; -- 이름이 'J'로 시작하는 사용자 필터링
name | |
---|---|
John | |
Jane |
IN 사용 (여러 값 중 하나)
SELECT name, city
FROM users
WHERE city IN ('Seoul', 'Busan'); -- 도시가 서울이나 부산인 사용자 필터링
name | city | |
---|---|---|
John | Seoul | |
Alice | Seoul | |
Bob | Seoul | |
Jane | Busan | |
David | Busan |
BETWEEN 사용 (범위 검색)
SELECT name, age
FROM users
WHERE age BETWEEN 20 AND 30; -- 나이가 20에서 30 사이인 사용자 필터링
name | age | |
---|---|---|
John | 28 | |
Alice | 22 | |
David | 25 |
WHERE
절로 데이터를 필터링한 후, ORDER BY
로 결과를 정렬할 수 있습니다.
SELECT name, age
FROM users
WHERE city = 'Seoul'
ORDER BY age DESC; -- 서울에 거주하는 사용자 중 나이가 많은 순으로 정렬
name | age | |
---|---|---|
Bob | 31 | |
John | 28 | |
Alice | 22 |
LIMIT
절은 쿼리 결과에서 반환되는 행의 수를 제한할 때 사용됩니다. 주로 대량의 데이터 중에서 일부만 조회하고자 할 때 유용합니다.
SELECT 컬럼1, 컬럼2
FROM 테이블명
LIMIT 숫자;
예시 코드
SELECT name, age
FROM users
LIMIT 10; -- 처음 10개의 행만 반환
name | age | |
---|---|---|
John | 28 | |
Jane | 34 | |
Alice | 22 | |
Bob | 31 | |
Chris | 40 | |
David | 25 |
SELECT 컬럼1, 컬럼2
FROM 테이블명
LIMIT 숫자 OFFSET 숫자;
예시 코드
SELECT name, age
FROM users
LIMIT 5 OFFSET 2; -- 3번째 행부터 5개의 행을 반환
name | age | |
---|---|---|
Alice | 22 | |
Bob | 31 | |
Chris | 40 | |
Davi | 25 |
ORDER BY
와 LIMIT
을 결합하여 정렬된 결과에서 상위 몇 개의 데이터를 조회할 수 있습니다.
SELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5; -- 급여가 높은 상위 5명의 직원 조회
name | salary | |
---|---|---|
Chris | 8000.00 | |
Jane | 6500.00 | |
Bob | 6200.00 | |
John | 5500.00 | |
Alice | 4000.00 |
DISTINCT
키워드는 중복된 값을 제거하고 고유한 값만 반환할 때 사용됩니다.
SELECT DISTINCT 컬럼명
FROM 테이블명;
예시 코드
SELECT DISTINCT city
FROM users; -- 중복되지 않은 도시 목록 반환
city | |
---|---|
Seoul | |
Busan | |
Incheon |
MySQL에서는 WHERE, ORDER BY, LIMIT, OFFSET 등 다양한 절을 조합하여 데이터를 효율적으로 정렬하고 필터링할 수 있습니다. 이러한 기능들을 적절히 활용하면 복잡한 데이터 조회도 손쉽게 수행할 수 있습니다.