본 글은 Fastcampus의 MySQL Database 강의를 수강하며 정리한 내용입니다.
강의 링크
ORDER BY
ORDER BY [컬럼 이름]
ORDER BY [컬럼 이름]
= ORDER BY [컬럼 이름] ASC
ORDER BY [컬럼 이름] DESC
ORDER BY [컬럼 1], [컬럼 2]
는 [컬럼 1] 기준으로 정렬 후 동일한 row 간에 [컬럼 2] 기준으로 정렬SELECT
절의 컬럼 이름의 순서를 의미오름차순 정렬
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE [조건식]
ORDER BY [컬럼 이름] ASC(생략 가능);
내림차순 정렬
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE [조건식]
ORDER BY [컬럼 이름] DESC;
컬럼 번호를 이용한 정렬 예시
SELECT [컬럼 1], [컬럼 2], [컬럼 3], [컬럼 4]
FROM [테이블 이름]
WHERE [조건식]
ORDER BY 3 DESC, 4;
RANK
RANK() OVER (ORDER BY [컬럼 이름])
ORDER BY
와 함께 사용SELECT
절에 사용하며, 정렬된 순서에 순위를 붙인 새로운 컬럼을 보여준다.SELECT [컬럼 이름], ..., RANK() OVER (ORDER BY [컬럼 이름])
FROM [테이블 이름]
WHERE [조건식];
RANK와 비슷한 기능의 함수들
함수 | 기능 |
---|---|
RANK | 공동 순위가 있으면 다음 순서로 건너 뜀 |
DENSE_RANK | 공동 순위가 있어도 다음 순서를 뛰어 넘지 않음 |
ROW_NUMBER | 공동 순위를 무시함 |
MySQL 내의 다양한 타입의 데이터는 '함수'를 사용하여 변형할 수 있다.
함수란?
f(x) = y
f
: function, 함수 이름x
: input, 함수를 적용할 값 또는 컬럼 이름y
: output, 함수를 적용한 결과 값LENGTH("abc") = 3
아래 예시들에서 "ABC"에는 보통 컬럼 이름 또는 다른 함수가 들어감
LOCATE
LOCATE("A", "ABC")
SUBSTRING
SUBSTRING("ABC", 2)
RIGHT
RIGHT("ABC", 1)
LEFT
LEFT("ABC", 1)
UPPER
UPPER("abc")
LOWER
LOWER("ABC")
LENGTH
LENGTH("ABC")
CONCAT
CONCAT("ABC", "DEF")
REPLACE
REPLACE("ABC", "A", "Z")
ABS
ABS(숫자)
FLOAT
데이터 타입은 입력 값의 근사치를 저장CEILING
CEILING(숫자)
FLOOR
FLOOR(숫자)
ROUND
ROUND(숫자, 자릿수)
TRUNCATE
TRUNCATE(숫자, 자릿수)
POWER
POWER(숫자A, 숫자B)
MOD
MOD(숫자A, 숫자B)
NOW
NOW()
CURRENT_DATE
CURRENT_DATE()
CURRENT_TIME
CURRENT_TIME()
YEAR
YEAR(날짜)
MONTH
MONTH(날짜)
MONTHNAME
MONTHNAME(날짜)
SELECT NOW(), YEAR(NOW()), MONTH(NOW()), MONTHNAME(NOW());
DAYNAME
DAYNAME(날짜)
DAYOFMONTH
DAYOFMONTH(날짜)
DAYOFWEEK
DAYOFWEEK(날짜)
WEEK
WEEK(날짜)
SELECT NOW(), DAYNAME(NOW()), DAYOFMONTH(NOW()), DAYOFWEEK(NOW()), WEEK(NOW());
HOUR
HOUR(시간)
MINUTE
MINUTE(시간)
SECOND
SECOND(시간)
SELECT NOW(), HOUR(NOW()), MINUTE(NOW()), SECOND(NOW());
DATE_FORMAT
DATE_FORMAT(날짜/시간, 형식)
SELECT DATE_FORMAT('1998-07-19 21:30:58', '%Y년 %m월 %d일 %H시 %i분 %s초') AS formatted_date;
DATEDIFF
DATEDIFF(날짜1, 날짜2)
TIMEDIFF
TIMEDIFF(시간1, 시간2)
SELECT DATEDIFF(‘2022-01-01 00:00:00’, ‘2021-12-25 12:00:00’) AS DATE_DIFF,
TIMEDIFF(‘2022-01-01 00:00:00’, ‘2021-12-25 12:00:00’) AS TIME_DIFF;
형식 지정자
DROP DATABASE IF EXISTS pokemon;
CREATE DATABASE pokemon;
USE pokemon;
CREATE TABLE mypokemon (
number INT,
name VARCHAR(20),
type VARCHAR(10),
attack INT,
defense INT,
capture_date DATE
);
INSERT INTO mypokemon (number, name, type, attack, defense, capture_date)
VALUES (10, 'caterpie', 'bug', 30, 35, '2019-10-14'),
(25, 'pikachu', 'electric', 55, 40, '2018-11-04'),
(26, 'raichu', 'electric', 90, 55, '2019-05-28'),
(125, 'electabuzz', 'electric', 83, 57, '2020-12-29'),
(133, 'eevee', 'normal', 55, 50, '2021-10-03'),
(137, 'porygon', 'normal', 60, 70, '2021-01-16'),
(152, 'chikoirita', 'grass', 49, 65, '2020-03-05'),
(153, 'bayleef', 'grass', 62, 80, '2022-01-01');
SELECT name, LENGTH(name)
FROM mypokemon
ORDER BY 2;
SELECT name, RANK() OVER (ORDER BY defense DESC) AS defense_rank
FROM mypokemon;
SELECT name, DATEDIFF('2022-02-14', capture_date) AS days
FROM mypokemon;