가져온 데이터를 정렬해주는 키워드
ORDER BY
ORDER BY[컬럼 이름]
- [컬럼 이름]의 값을 기준으로 모든 row 정렬
- 기본 정렬 규칙은 오름차순
ORDER BY[컬럼 이름] = ORDER BY[컬럼 이름]ASC
ORDER BY [컬럼 이름] [컬럼 이름]DESC
> 내림차순- 여러 컬럼으로 정렬 가능, 키워드 뒤에 [컬럼 이름]을 복수 개 입력하면 된다
EX) ORDER BY[컬럼1],[컬럼2][컬럼1]값이 동일한 로우 간에 [컬럼2]기준으로 정렬SLECT[컬럼 이름] FROM[테이블 이름] WHERE조건식 ORDER BY[컬럼 이름]ASC; ---오림차순
ORDER BY[컬럼 이름]DESC; --내림차순
쿼리 문법
SELECT number,name FROM mypokemon ORDER BY number DESC;
사용 예제
SELECT number, name, attack, defense FROM mypokemon ORDER BY attack DESC, defense;
- attack 내림차순 적용 후 'pikachu', 'eevee' 의 값이 동일
- 'pikachu','eevee' 의 defense 값 비교 후 오름차순으로 정렬 한 것을 알 수 있다.
사용예제
응용
SELECT number, name, attack, defense FROM mypokemon ORDER BY 3 DESC, 4;
- 위 와 동일한 값을 가져온다
number = 1
name = 2
attack = 3
defense = 4
데이터를 정렬해 순위를 만들어주는 함수
RANK
RANK()OVER(ORDER BY[컬럼 이름])
- 항상 ORDER BY와 함께 사용
- SELECT 절에 사용되며, 정렬된 순서에 순위를 붙인 새로운 컬럼을 보여준다
- 테이블의 실제 데이터에는 영향을 미치지 않음
SELECT [컬럼 이름],...,RANK()OVER(ORDER BY[컬럼 이름]) FROM [테이블 이름] WHERE 조건식; 'ORDER BY[컬럼 이름] DESC'
예제 쿼리 문법
SELECT name, attack, RANK()OVER(ORDER BY attack DESC)AS attack_rank FROM mypokemon;
SELECT name, attack, RANK()OVER(ORDER BY attack DESC)AS attack_rank FROM mypokemon;
SELECT name, attack, DENSE_RANK()OVER(ORDER BY attack DESC)AS attack_rank FROM mypokemon;
SELECT name, attack, ROW_NUMBER()OVER(ORDER BY attack DESC)AS attack_rank FROM mypokemon;
SELECT name, attack, RANK()OVER(ORDER BY attack DESC)AS rank_rank, DENSE_RANK()OVER(ORDER BY attack DESC)AS rank_dense_rank, ROW_NUMBER()OVER(ORDER BY attack DESC)AS rank_row_number FROM mypokemon;
- 'pikachu', 'eevee', 'chikoirita'
name rank_rank rank_dense_rank rank_row_number pikachu 2 2 2 eevee 2 2 3 chikoirita 4 3 4 RANK = 공동 순위가 있으면 다음 순서로 건너 뜀
DENSE_RANK = 공동 순위가 있어도 다음 순위를 뛰어 넘지 않음
RANK_NUMBER = 공동 순위를 무시함
CREATE DATABASE bts_music; USE bts_music; CREATE TABLE butter ( part INT, lyric VARCHAR(20) ); INSERT INTO butter (part, lyric) VALUES (1, 'Smooth like butter'), (2, 'Like a criminal undercover'), (3, 'Gon pop like trouble'), (4, 'Breakin into your herart like that'), (5, 'Cool shade stunner'); ALTER TABLE butter MODIFY COLUMN lyric VARCHAR(40); SELECT * FROM butter;
LOCATE("A","ABC")
= "ABC"에서 "A"는 몇 번째에 위치해 있는지 검색해 위치 반환
- 문자가 여러 개라면 가장 먼저 찾은 문자의 위치를 가져온다
- 만약 찾는 문자가 없다면 0을 가져온다.
쿼리 문법SELECT part, LOCATE('i', lyric) FROM butter;
SUBSTRING 함수
SUBSTRING("ABC",2)
= "ABC"에서 2번째 문자부터 반환SELECT part, SUBSTRING(lyric,3) FROM butter;
- 만약 입력한 숫자가 문자열의 길이보다 크다면 아무것도 가져오지 않습니다.
SELECT part, SUBSTRING(lyric,100) FROM butter;
RIGHT, LEFT 함수
RIGHT("ABC",1)
= "ABC"에서 오른쪽에서 1번째 문자까지 반환
LEFT("ABC",1)
= "ABC"에서 왼쪽에서 1번째 문자까지 반환SELECT part, RIGHT(lyric,3),LEFT(lyric,3) FROM butter;
UPPER, LOWER 함수
UPPER("abc")
= "abc"를 대문자로 바꿔 변환
LOWER("ABC")
= "ABC"를 소문자로 바꿔 변환SELECT part, UPPER(lyric), LOWER(lyric) FROM butter;
LENGTH 함수
LENGTH("ABC")
= "ABC"의 글자 수를 반환SELECT part, LENGTH(lyric) FROM butter;
CONCAT 함수
CONCAT("ABC","DEF")
= "ABC"문자열과 "DEF"문자열을 합쳐 반환SELECT part, CONCAT(LEFT(lyric,1),RIGHT(lyric,1))AS first_last FROM butter;
REPLACE 함수
REPLACE("ABC","A","Z")
= "ABC"의 "A"를 "Z"로 바꿔 변환SELECT part, REPLACE(lyric,' ','_') FROM butter;
ABS 함수
ABS(숫자)
= 숫자의 절댓값 반환SELECT name, friendship, ABS(friendship) FROM pokemon.mypokemon;
CEILING, FLOOR 함수
CEILING(숫자)
= 숫자를 정수로 올림해서 반환
FLOOR(숫자)
= 숫자를 정수로 내림해서 반환SELECT name, friendship, CEILING(friendship), FLOOR(friendship) FROM pokemon.mypokemon;
ROUND, TRUNCATE 함수
ROUND(숫자,자릿수)
= 숫자를 소수점 자리수 까지 반올림해서 반환
TRUNCATE (숫자, 자리수)
= 숫자를 소수점 자릿수까지 버림해서 반환SELECT name, friendship, ROUND(friendship,1), TRUNCATE(friendship,2) FROM pokemon.mypokemon;
POWER 함수
POWER(숫자A,숫자B)
= 숫자 A의 숫자 B 제곱 반환SELECT name, number, POWER(number,2) FROM pokemon.mypokemon;
MOD함수
MOD(숫자A,숫자B)
= 숫자A를 숫자B로 나눈 나머지 반환SELECT name, number, MOD(number,2) FROM pokemon.mypokemon;
NOW, CURRENT_DATE, CURRENT_TIME 함수
NOW()
= 현재 날짜와 시간 반환
CURRENT_DATE
= 현재 날짜 반환
CURRENT_TIME
= 현재 시간 반환SELECT NOW(),CURRENT_DATE(),CURRENT_TIME();
YEAR, MONTH, MONTHNAME 함수
YEAR(날짜)
= 날짜의 연도 반환
MONTH(날짜)
= 날짜의 월 반환
MONTHNAME(날짜)
= 날짜의 월을 영어로 반환SELECT NOW(),YEAR(NOW()), MONTH(NOW()), MONTHNAME(NOW());
DAYNAME, DAYOFMONTH, DAYOFWEEK, WEEK 함수
DAYNAME(날짜)
= 날짜의 요일을 영어로 반환
DAYOFMONTH(날짜)
= 날짜의 일 반환
DAYOFWEEK(날짜)
= 날짜의 요일을 숫자로 반환
WEEK(날짜)
= 날짜가 해당 연도에 몇 번째 주인지 반환
일요일 : 1 ~ 토요일 : 7SELECT NOW(),DAYNAME(NOW()), DAYOFMONTH(NOW()), DAYOFWEEK(NOW()), WEEK(NOW());
HOUR, MINUTE, SECOND 함수
HOUR(시간)
= 시간의 시 반환
MINUTE(시간)
= 시간의 분 반환
SECOND(시간)
= 시간의 초 반환SELECT NOW(),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
DATE_FORMAT 함수
DATE_FORMAT(날짜/시간, 형식)
= 날짜/시간의 형식을 형식으로 바꿔 변환SELECT DATE_FORMAT('1996-11-06 17:34:58', '%Y년%m월%d일%H시%i분%s초')AS formatted_date;
DAYDIFF, TIMEDIFF 함수
DATE(날짜1,날짜2)
= 날짜1과 날짜2의 차이 반환 (날짜1-날짜2)
TIMEDIFF(시간1,시간2)
= 시간1과 시간2의 차이 반환 (시간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;