- sql 실행 순서
FROM>WHERE>GROUP BY>HAVING>SELECT>ORDER BY
- 날짜 관련
1. 기간 설정
[1] beween - and -
START_DATE BETWEEN '2024-11-01' AND '2024-11-30'
이상, 이하
[2] like '날짜'
START_DATE like '2022-10%'
2. 일부 추출
SELECT YEAR('2024-11-01')
(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)
3. 기간 계산 DATEDIFF
DATEDIFF(END_DATE, START_DATE)
DATEDIFF(END_DATE, START_DATE) + 1 : 일 계산
(예) DATEDIFF('2017-03-28 23:59:59', '2017-03-01 00:00:00') + 1 => (28-1) + 1일 => 28
4. 기간 계산 TIMESTAMPDIFF => datediff와 순서 주의
TIMESTAMPDIFF(구분자, START_DATE, END_DATE)
해당 구분자 기간 계산
(예) TIMESTAMPDIFF(HOUR, '2018-01-01 0:1:1', '2018-01-01 23:59:59') => 23
SECOUND | 초 |
MINUTE | 분 |
HOUR | 시간 |
DAY | 일 |
WEEK | 주 |
MONTH | 월 |
YEAR | 연도 |
5. 날짜 형식 변환 DATE_FORMAT(값, '형식')
DATE_FORMAT(START_DATE, '%Y-%m-%d')
%Y |
%m |
%d |
%H (0-23) |
%i (minutes, 0-59) |
%S, %s (seconds, 0-59) |
- 숫자
1. 반올림, 올림, 내림
ceil(숫자): 올림
round(숫자): 반올림
floor(숫자): 내림
2. 소수점 n자리 반올림
round(숫자, n)
소수점 2의 자리에서 반올림 = 소수점 1의 자리까지 반올림 = 결과는 1의 자리까지의 숫자 = round(num, 1)
(예)
0일 경우, 소수점 모두 반올림 (ROUND(145.444, 0)-> 145)
1일 경우, 소수점 1자리까지 반올림 (ROUND(145.644, 1) -> 145.6)
3. 집계함수 sum(), avg(), min(), max(), count()
count()는 null 행을 세주지 않는다.
4. 나머지 mod()
SELECT MOD(N, M); -- N%M
SELECT MOD(29, 9) -- 2
SELECT MOD(29.5, 9) -- 2.5
SELECT MOD(29.5, 0) -- null 이어서 나오지 않음
- group by
1. 그룹화 + 일반 속성 출력 (집계함수 X)
일반 속성은 그룹별로 pk asc 출력으로 제일 상위 행 하나만 select된다.
FROM>WHERE>GROUP BY 실행되므로
select car_id, start_date
from c
group by car_id
order by car_id desc;
car_id == 29일 때, history_id가 510인 행이 위 쿼리의 결과로 출력된다.
(문제) 프로그래머스 #157340 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기
- 조건문
1. case - (when-then / else) - end
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN "The quantity is greater than 30"
WHEN Quantity = 30 THEN "The quantity is 30"
ELSE "The quantity is under 30"
END
FROM OrderDetails;
- 문자열
1. replace()
replace(바꿀문자열, 기존문자열, 변경문자열)
replace(NAME, 'abc', 'def')
select replace(' a b c ', ' ', ''); -- abc
2. 대소문자 변환 lower(), upper()
upper(문자열)
lower(문자열)
lower('ABc') / lower(NAME)
3. 문자열 붙이기 concat()
concat('A', 'B', 'C', 컬럼명, 컬럼명)
4. 부분 추출 substring()
substring(컬럼명, 시작위치, 길이)
substring(PHONE, 4, 4) -- 01012345678 -> 1234
자바와는 다르게 1 이 처음 인덱스이다.!!!!!! 0이 아니다.
5. 공백 제거 trim, ltrim, rtrim
select trim(' a b c '); -- [a b c]
select replace(' a b c ', ' ', ''); -- abc (전체 공백 제거)
- 형변환
1. cast()
CAST(값 AS 데이터타입)
CAST('30' AS INTEGER)
CHAR[(N)] |
DATE |
DECIMAL[(M[,D])] |
FLOAT, DOUBLE |
SIGNED [INTEGER} |
UNSIGNED [INTEGER] |
- char: unicode X / nchar: unicode O
'공부 > SQL' 카테고리의 다른 글
프로그래머스 SQL 고득점 Kit - GROUP BY; MySQL (0) | 2022.03.03 |
---|---|
SQL Zoo - More JOIN operations 문제 풀이 (0) | 2022.03.02 |
프로그래머스 SQL 고득점 Kit - Join; MySQL (0) | 2022.03.02 |