본문 바로가기
공부/SQL

MYSQL 코테 보기 전, 알아두어야 할 지식

by thegreatjy 2024. 9. 23.
728x90

- 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

728x90