이번 글에서는
ORDER BY, LIMIT, DISTINCT 문법에 대해서 알아보고
관련된 문제를 풀어보겠습니다.
CREATE DATABASE testdb;
USE testdb;
DROP TABLE IF EXISTS member;
DROP TABLE IF EXISTS product;
CREATE TABLE member(
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY,
member_id VARCHAR(30),
name VARCHAR(10),
address VARCHAR(10),
phone_number VARCHAR(20),
create_date datetime,
update_date datetime
);
CREATE TABLE product(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
qty INT,
price INT,
create_date datetime,
update_date datetime
);
INSERT INTO `testdb`.`member`
( `member_id`, `name`, `address`, `phone_number`, `create_date`, `update_date`)
VALUES
('member1', 'A', 'Seoul', '010-1111-1111', NOW(), NOW()),
('member2', 'B', 'Seoul', '010-1111-2222', NOW(), NOW()),
('member3', 'C', 'Daegu', '010-1111-3333', NOW(), NOW()),
('member4', 'D', 'Daegu', '010-1111-4444', NOW(), NOW()),
('member5', 'D', 'Daegeon', '010-1111-5555', NOW(), NOW()),
('member6', 'E', 'Daegeon', '010-2222-1111', NOW(), NOW()),
('member7', 'F', 'Daegeon', '010-2222-1111', NOW(), NOW()),
('member8', 'F', 'Seoul', '010-2222-2222', NOW(), NOW());
INSERT INTO `testdb`.`product`
(`name`, `qty`, `price`, `create_date`, `update_date`)
VALUES
('carrot', 10, 1000, NOW(), NOW()),
('apple', 100, 500, NOW(), NOW()),
('pear', 30, 800, NOW(), NOW()),
('orange', 50, 800, NOW(), NOW()),
('honey', 10, 3000, NOW(), NOW()),
('cabage', 15, 3000, NOW(), NOW()),
('pine', 20, 5000, NOW(), NOW()),
('mellon', 10, 10000, NOW(), NOW());
SQL에서 정렬을 하기 위해서는
FROM 절 뒤에
ORDER BY '정렬 기준 컬럼' [ ASC | DESC ]
를 붙여주면 됩니다.
기본적으로 오름차순 정렬이 되며
내림차순으로 정렬하고 싶다면 DESC를 붙여주면 됩니다.
예)
SELECT * FROM '테이블' ORDER BY '기준 컬럼' DESC;
행 개수를 제한하기 위해서는
LIMIT 구문을 이용할 수 있습니다.
FROM 절 뒤에 LIMIT (숫자) 를 붙여주면 됩니다.
예)
# 위에서 5개만 출력
LIMIT 5
# 위에서 3번째 데이터부터 2개
LIMIT 3, 2
SELECT 문에서
중복을 제거할 컬럼명 앞에
DISTINCT를 붙여주면
해당 컬럼 값 중에서 중복된 데이터를 제거해줍니다.
예)
SELECT DISTINCT (중복제거할 컬럼) FROM (테이블);
member 테이블에서 address의 역순으로 모든 데이터를 조회합니다.
qty가 20이상인 product 중 price의 역순으로 3개만 가져옵니다.
member 테이블에서 중복을 제거한 address를 가져옵니다.
address 가 'Daegeon'인 member를 name 순서대로 정렬합니다.
SELECT
*
FROM
member
ORDER BY address DESC;
SELECT
*
FROM
product
WHERE
qty >= 20
ORDER BY price DESC
LIMIT 3;
SELECT
DISTINCT address
FROM
member;
SELECT
*
FROM
member
WHERE
address = 'Daegeon'
ORDER BY name;