SQL

[패스트캠퍼스] SQL 강의 1주차 (Day5); ORDER BY, RANK, ROW_NUMBER

maencoli 2023. 3. 7. 16:41

데이터 줄세우기 ORDER BY

가져온 데이터를 정렬

  • ORDER BY [컬럼이름]
  • 입력한 [컬럼이름]의 값을 기준으로 모든 ROW를 정렬
  • 기본 정렬 규칙은 오름차순
    • ORDER BY[컬럼 이름] = ORDER BY [컬럼 이름] ASC
    • 내림차순을 원할 경우, 마지막에 DESC 키워드 추가 (ORDER BY [컬럼 이름] DESC)
  • 여러 컬럼으로 정렬 가능하며, 키워드 뒤에 [컬럼이름]을 복수 개 입력하면 됨
    • 위치한 순서대로 정렬됨 
  • 컬럼 번호로도 정렬 가능함
    • 컬럼 번호는 SELECT절의 컬럼 이름 순서!
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
ORDER BY [컬럼 이름] ASC; # ASC는 생략 가능함

#내림차순 하고 싶은 경우
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
ORDER BY [컬럼 이름] DESC;

데이터 순위 만들기 RANK, ROW_NUMBER

데이터를 정렬해 순위를 만듦

  • RANK() OVER(ORDER BY[컬럼 이름]) 
  • 항상 ORDER BY와 함께 사용
  • SELECT절에 사용, 정렬된 순서에 순위를 붙인 새로운 컬럼 보여줌
    • 실제 데이터에는 영향 X
SELECT [컬럼이름], ..., RANK() OVER(ORDER BY [컬럼이름]) #내림차순 만들고 싶으면 컬럼이름 뒤에 DESC
FROM [테이블 이름]
WHERE 조건식;

RANK, DENSE_RANK, ROW_NUMBER

RANK 공동 순위가 있으면 다음 순서로 건너 뜀
DENSE_RANK 공동 순위가 있어도 다음 순위를 뛰어 넘지 않음
ROW_NUMBER 공동 순위를 무시함

함수

  • 함수이름(함수를 적용할 값 또는 컬럼 이름) 형식으로 사용
  • 결과 값을 새로운 칼럼으로 반환

문자형 데이터

함수 활용 예시 설명
LOCATE LOCATE("A", "ABC") "ABC"에서 "A"는 몇 번째에 위치해 있는지 검색해 위치 반환
SUBSTRING SUBSTRING("ABC", 2) "ABC"에서 2번째 문자부터 반환
RIGHT RIGHT("ABC", 1) "ABC"에서 오른쪽에서 1번째 문자까지 반환
LEFT LEFT("ABC", 1) "ABC"에서 왼쪽에서 1번째 문자까지 반환
UPPER UPPER("abc") "abc"를 대문자로 바꿔 반환
LOWER LOWER("ABC") "ABC"를 소문자로 바꿔 반환
LENGTH LENGTH("ABC") "ABC"의 글자 수를 반환
CONCAT CONCAT("ABC", "DEF") "ABC" 문자열과 "CDF" 문자열을 합쳐 반환
REPLACE REPLACE("ABC", "A", "Z") "ABC"의 "A"를 "Z"로 바꿔 반환

LOCATE

#문자가 여러 개라면 가장 먼저 찾은 문자의 위치를 가져옴
#찾는 문자가 없으면 0을 가져옴

SELECT part, LOCATE('i', lyric)
FROM bts_music.butter;

SUBSTRING

#입력한 숫자가 문자열의 길이보다 크면 아무것도 가져오지 않음

SELECT part, SUBSTRING(lyric, 3)
FROM bts_music.butter;

RIGHT, LEFT 함수

SELECT part, RIGHT(lyric, 3), LEFT(lyric, 3)
FROM bts_music.butter;

UPPER, LOWER 함수

SELECT part, UPPER(lyric), LOWER(lyric)
FROM bts_music.butter;

LENGTH 함수

SELECT part, LENGTH(lyric)
FROM bts_music.butter;

CONCAT 함수

SELECT part, CONCAT(LEFT(lyric, 1), RIGHT(lyric, 1)) AS first_last
FROM bts_music.butter;

REPLACE 함수

SELECT part, REPLACE(lyric, ''.'_')
FROM bts_music.butter;

숫자형 데이터

함수 활용 설명
ABS ABS(숫자) 숫자의 절댓값 반환
CEILING CEILING(숫자) 숫자를 정수로 올림해서 반환
FLOOR FLOOR(숫자) 숫자를 정수로 내림해서 반환
ROUND ROUND(숫자, 자릿수) 숫자를 소숫점 자릿수까지 반올림해서반환
TRUNCATE TRUNCATE(숫자, 자릿수) 숫자를 소숫점 자릿수까지 버림해서 반환
POWER POWER(숫자A, 숫자B) 숫자A의 숫자B제곱 반환
MOD MOD(숫자A, 숫자B) 숫자 A를 숫자B로 나눈 나머지 반환

날짜형 데이터

함수  활용 설명
NOW NOW() 현재 날짜와 시간 반환
CURRENT_DATE CURRENT_DATE() 현재 날짜 반환
CURRENT_TIME CURRENT_TIME() 현재 시간 반환
YEAR YEAR(날짜) 날짜의 연도 반환
MONTH MONTH(날짜) 날짜의 월 반환
MONTHNAME MONTHNAME(날짜) 날짜의 월을 영어로 반환
DAYNAME DAYNAME(날짜) 날짜의 요일을 영어로 반환
DAYOFMONTH DAYOFMONTH(날짜) 날짜의 일 반환
DAYOFWEEK DAYOFWEEK(날짜) 날짜의 요일을 숫자로 반환
WEEK WEEK(날짜) 날짜가 해당 연도에서 몇 번째 주인지 반환
HOUR HOUR(시간) 시간 시 반환
MINUTE MINUTE(시간) 시간 분 반환
SECOND SECOND(시간) 시간 초 반환
DATE_FORMAT DATEFORMAT(날짜/시간, 형식) 날짜/시간의 형식을 형식으로 바꿔 반환
DATEDIFF DATEDIFF(날짜1, 날짜2) 날짜1과 날짜2의 차이 반환 (날짜1 - 날짜2)
TIMEDIFF TIMEDIFF(시간1, 시간2) 시간1과 시간2의 차이 반환 (시간1 - 시간2)