SELECT CONCAT(<컬럼1>, <컬럼2>) SELECT CONCAT('안녕', '하세요') -- 안녕하세요 -- 함수에 인자값으로 NULL이 들어가면 NULL 반환 SELECT CONCAT(<컬럼1>, NULL, ...<컬럼n>) -- NULL 반환
미리 구분자를 정의하여 문자 합치기
SELECT CONCAT_WS('!', '안녕', '하세요','반갑습니다.') -- 안녕!하세요!반갑습니다. -- 함수 인자값으로 NULL이 들어오면 NULL을 무시하고 문자를 합친다. SELECT CONCAT_WS('!', '안녕', NULL,'반갑습니다.') -- 안녕!반갑습니다.
모든 문자(영어)를 대문자로 변환
SELECT UPPER('Hello') -- HELLO
모든 문자(영어)를 소문자로 변환
SELECT LOWER('Hello') -- hello
SELECT TRIM(' 안녕 하세요 반갑습니다. ') -- 안녕 하세요 반갑습니다.
SELECT TRIM(' 안녕 하세요 반갑습니다.') -- 안녕 하세요 반갑습니다.
SELECT TRIM('안녕 하세요 반갑습니다. ') -- 안녕 하세요 반갑습니다.
문자 길이X
문자 크기O (바이트 단위로 반환)
SELECT LENGTH('안녕 하세요 반갑습니다.') -- 33
문자 길이O (공백까지 길이 계산)
문자 크기X
SELECT CHAR_LENGTH('안녕 하세요 반갑습니다.') -- 13
문자 길이O (공백까지 길이 계산)
특정 문자가 처음 시작하는 위치(길이) 반환
만약 특정 문자가 없을 경우 0 반환
SELECT POSITION('!' IN '안녕! 하세요! 반갑습니다.') -- 3 SELECT POSITION('@' IN '안녕! 하세요! 반갑습니다.') -- 0
SELECT LEFT('안녕! 하세요! 반갑습니다.', 6) -- 안녕! 하세
SELECT RIGHT('안녕! 하세요! 반갑습니다.', 6) -- 반갑습니다.
SELECT SUBSTRING('안녕! 하세요! 반갑습니다.', 3) -- ! 하세요! 반갑습니다. SELECT SUBSTRING('안녕! 하세요! 반갑습니다.', 3, 7) -- ! 하세요! 반
SELECT REPLACE('안녕 하세요.','안녕','감사') -- 감사 하세요.
SELECT REPEAT('안녕!', 4) -- 안녕!안녕!안녕!안녕!
SPACE(5) : 공백 5칸
SELECT CONCAT('안녕',SPACE(5),'하세요') -- 안녕 하세요
SELECT REVERSE('안녕하세요') -- 요세하녕안
두 문자가 동일하면 0, 틀리면 -1
SELECT STRCMP('안녕', '안녕') -- 0 SELECT STRCMP('안녕', '하세요') -- -1
SELECT IFNULL(<컬럼>, <컬럼/대체값>)
컬럼값이 계속해서 NULL인 경우 다음 대체값으로 이동.
SELECT COALESCE(<컬럼>, <컬럼/대체값1>, <컬럼/대체값2>, <컬럼/대체값3>...)
SELECT NOW() -- 2025-06-14 16:06:37 -- 함수에 인자(1~6)를 추가하여 정밀한 시간을 조회할 수 있다. SELECT NOW(6) -- 2025-06-14 16:08:35.985296
SELECT DATE_ADD(<날짜값>, INTERVAL <계산값> <계산 대상>) SELECT NOW() -- 2025-06-14 16:13:21 SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH) -- 2025-07-14 16:13:21 SELECT DATE_ADD(NOW(), INTERVAL -1 MONTH) -- 2025-05-14 16:13:21
SELECT DATE_ADD(<날짜값>, INTERVAL <계산값> <계산 대상>) SELECT NOW(); -- 2025-06-14 16:13:21 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); -- 2025-05-14 16:13:21 SELECT DATE_SUB(NOW(), INTERVAL -1 MONTH); -- 2025-07-14 16:13:21
SELECT DATEDIFF('20250625', '20250316'); -- 101 SELECT DATEDIFF('2025-06-25', '2025-03-16'); -- 101
SELECT TIMESTAMPDIFF(YEAR, '20250316', '20250625'); -- 년 차이 : 0 SELECT TIMESTAMPDIFF(MONTH, '20250316', '20250625'); -- 월 차이 : 3 SELECT TIMESTAMPDIFF(DAY, '20250316', '20250625'); -- 일 차이 : 101 SELECT TIMESTAMPDIFF(HOUR, '20250316', '20250625'); -- 시 차이 : 2424
SELECT DAYNAME('20250614') -- Saturday
SELECT YEAR(20250614) -- 2025 SELECT MONTH(20250614) -- 6 SELECT DAY(20250614) -- 14
SELECT DATE_FORMAT('20240614', '%Y/%m/%d') -- 2024/06/14
SELECT GET_FORMAT() -- 2024/06/14
상품별 합계값 구하기
SELECT product_id , SUM(price) FROM Products GROUP BY product_id WITH ROLLUP ;product_id에 대한 총합을 마지막 행에 출력
| product_id | SUM(price) | | ---------- | -------------- | | 1 | 85 | | 2 | 115 | | 3 | 20 | | null | 220 |
sum, avg 등 집계 합수에 대한 값을 각 row별로 집계하여 값을 출력한다.
-- 단순 합계값 출력 (row 1개) SELECT SUM(<컬럼1>) -- 각 row별 누적 합계값 출력 (row 여러개, 마지막 row에 총합값) SELECT SUM(<컬럼1>) OVER(ORDER BY <컬럼2>)
공동 순위를 인정하지 않는 방식으로 동작한다.
ORDER BY에 따라 값이 같아도 순위는 다를 수 있다.
ex) 점수가 100인 사람이 3명이어도 1등은 1명 뿐이다.
1위 (100점)
2위 (100점)
3위 (100점)
4위 (98점)
5위 (95점) ...
-- 모든 row에 대한 순위 구하기 SELECT ROW_NUMBER() OVER(ORDER BY <컬럼명>) -- 그룹별 row에 대한 순위 구하기 SELECT ROW_NUMBER() OVER(PARTITION BY <컬럼명> ORDER BY <컬럼명>)
[순위 개수를 인지하여 다음 순위에 적용]
1위
1위 (공동)
1위 (공동)
4위
5위 ...
-- 모든 row에 대한 순위 구하기 SELECT RANK() OVER(ORDER BY <컬럼명>) -- 그룹별 row에 대한 순위 구하기 SELECT RANK() OVER(PARTITION BY <컬럼명> ORDER BY <컬럼명>)
[순위 개수를 무시]
1위
1위 (공동)
1위 (공동)
2위
3위 ...
-- 모든 row에 대한 순위 구하기 SELECT DENSE_RANK() OVER(ORDER BY <컬럼명>) -- 그룹별 row에 대한 순위 구하기 SELECT DENSE_RANK() OVER(PARTITION BY <컬럼명> ORDER BY <컬럼명>)