[패스트캠퍼스] SQL 강의 따라하기 (데이터 줄 세우기, 데이터 순위 만들기, 문자형 데이터, 숫자형 데이터, 날짜형 데이터 정복하기)

Jaewoo Back·2023년 7월 14일
0
post-thumbnail

📖데이터 줄 세우기

가져온 데이터를 정렬해주는 키워드
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;

✏️RANK

SELECT name, attack,
	   RANK()OVER(ORDER BY attack DESC)AS attack_rank
FROM mypokemon;

✏️DENSE_RANK

SELECT name, attack,
	DENSE_RANK()OVER(ORDER BY attack DESC)AS attack_rank
FROM mypokemon;

✏️ROW_NUMBER

SELECT name, attack,
	ROW_NUMBER()OVER(ORDER BY attack DESC)AS attack_rank
FROM mypokemon;

✏️RANK , DENSE_RANK , ROW_NUMBER

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'
namerank_rankrank_dense_rankrank_row_number
pikachu222
eevee223
chikoirita434

RANK = 공동 순위가 있으면 다음 순서로 건너 뜀

DENSE_RANK = 공동 순위가 있어도 다음 순위를 뛰어 넘지 않음

RANK_NUMBER = 공동 순위를 무시함

📖문자형데이터 정복하기

butter 테이블 만들기

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

LOCATE("A","ABC") = "ABC"에서 "A"는 몇 번째에 위치해 있는지 검색해 위치 반환

  • 문자가 여러 개라면 가장 먼저 찾은 문자의 위치를 가져온다
  • 만약 찾는 문자가 없다면 0을 가져온다.

    쿼리 문법
SELECT part, LOCATE('i', lyric)
FROM butter;

SUBSTRING

SUBSTRING 함수
SUBSTRING("ABC",2) = "ABC"에서 2번째 문자부터 반환

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

  • 만약 입력한 숫자가 문자열의 길이보다 크다면 아무것도 가져오지 않습니다.
SELECT part, SUBSTRING(lyric,100)
FROM butter;

RIGHT, LEFT

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, LOWER 함수
UPPER("abc") = "abc"를 대문자로 바꿔 변환
LOWER("ABC") = "ABC"를 소문자로 바꿔 변환

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

LENGTH

LENGTH 함수
LENGTH("ABC") = "ABC"의 글자 수를 반환

SELECT part, LENGTH(lyric)
FROM butter;

CONCAT

CONCAT 함수
CONCAT("ABC","DEF") = "ABC"문자열과 "DEF"문자열을 합쳐 반환

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

REPLACE

REPLACE 함수
REPLACE("ABC","A","Z") = "ABC"의 "A"를 "Z"로 바꿔 변환

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

📖숫자형 데이터

ABS

ABS 함수
ABS(숫자) = 숫자의 절댓값 반환

SELECT name, friendship, ABS(friendship)
FROM pokemon.mypokemon;

CEILING, FLOOR

CEILING, FLOOR 함수
CEILING(숫자) = 숫자를 정수로 올림해서 반환
FLOOR(숫자) = 숫자를 정수로 내림해서 반환

SELECT name, friendship, CEILING(friendship), FLOOR(friendship)
FROM pokemon.mypokemon;

ROUND, TRUNCATE

ROUND, TRUNCATE 함수
ROUND(숫자,자릿수) = 숫자를 소수점 자리수 까지 반올림해서 반환
TRUNCATE (숫자, 자리수) = 숫자를 소수점 자릿수까지 버림해서 반환

SELECT name, friendship, ROUND(friendship,1), TRUNCATE(friendship,2)
FROM pokemon.mypokemon;

POWER

POWER 함수
POWER(숫자A,숫자B) = 숫자 A의 숫자 B 제곱 반환

SELECT name, number, POWER(number,2)
FROM pokemon.mypokemon;

MOD

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 함수
NOW() = 현재 날짜와 시간 반환
CURRENT_DATE = 현재 날짜 반환
CURRENT_TIME = 현재 시간 반환

SELECT NOW(),CURRENT_DATE(),CURRENT_TIME();

YEAR, MONTH, MONTHNAME

YEAR, MONTH, MONTHNAME 함수
YEAR(날짜) = 날짜의 연도 반환
MONTH(날짜) = 날짜의 월 반환
MONTHNAME(날짜) = 날짜의 월을 영어로 반환

SELECT NOW(),YEAR(NOW()), MONTH(NOW()), MONTHNAME(NOW());

DAYNAME, DAYOFMONTH, DAYOFWEEK, WEEK

DAYNAME, DAYOFMONTH, DAYOFWEEK, WEEK 함수
DAYNAME(날짜) = 날짜의 요일을 영어로 반환
DAYOFMONTH(날짜) = 날짜의 일 반환
DAYOFWEEK(날짜) = 날짜의 요일을 숫자로 반환
WEEK(날짜) = 날짜가 해당 연도에 몇 번째 주인지 반환
일요일 : 1 ~ 토요일 : 7

SELECT NOW(),DAYNAME(NOW()), DAYOFMONTH(NOW()), DAYOFWEEK(NOW()), WEEK(NOW());

HOUR, MINUTE, SECOND

HOUR, MINUTE, SECOND 함수
HOUR(시간) = 시간의 시 반환
MINUTE(시간) = 시간의 분 반환
SECOND(시간) = 시간의 초 반환

SELECT NOW(),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());

DATE_FORMAT

DATE_FORMAT 함수
DATE_FORMAT(날짜/시간, 형식) = 날짜/시간의 형식을 형식으로 바꿔 변환

SELECT DATE_FORMAT('1996-11-06 17:34:58', '%Y년%m월%d일%H시%i분%s초')AS formatted_date;

DAYDIFF, TIMEDIFF

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;

profile
https://blog.naver.com/jaewoo2_25

0개의 댓글