여러 코딩테스트를 치다보니 자잘한 함수가 안 외워져 풀 수가 없었습니다.
그래서 SQL문제 30개를 풀어보며 필요한 문법, 함수, 연사자들을 제대로 정리해봤습니다.
🧨MYSQL 기준이며, ORCLE은 일부 호환이 안 될 수 있습니다.
1️⃣SELECT의 기본 문법
WHERE
SELECT * FROM table WHERE colume = 'value';
ORDER BY
SELECT * FROM table ORDER BY column ASC;
SELECT * FROM table ORDER BY column DESC;
SELECT * FROM table ORDER BY column DESC LIMIT 3;
GROUP BY
SELECT column, COUNT(*) FROM table GROUP BY column;
HAVLING
SELECT column, COUNT(*) FROM Table GROUP BY column HAVING COUNT(*) > 1;
Limit
SELECT * FROM table LIMIT 10;
DITINCT
SELECT DISTINCT column FROM table
JOIN
SELECT * FROM table1 JOIN table2 ON table1.column = table2.column;
UNION
SELECT column FROM table1 UNION SELECT column FROM table2;
AS
SELECT column AS alias_name FROM table;
2️⃣ SQL 조건문
CASE 표현식 (CASE - WHEN - THEN - ELSE - END)
SELECT column1, column2,
CASE
WHEN column3 = '조건1' THEN '값1'
WHEN column3 = '조건2' THEN '값2'
ELSE '기본값'
END AS modified_column3
FROM table
3️⃣SQL 연산자들
NULL 체크
SELECT * FROM table_name WHERE column_name IS NOT NULL;
SELECT * FROM table_name WHERE column_name IS NULL
범위 내의 값 선택 (BETWEEN __ AND __ )
SELECT * FROM table_name WHERE column_name BETWEEN 'value1' AND 'value2'
리스트 내의 값 중 하나와 일치하는 행 선택 ( IN )
SELECT * FROM table_name WHERE column_name IN ('value1', 'value2', 'value3');
패턴에 일치하는 행 선택 ( LIKE)
SELECT * FROM table_name WHERE column_name LIKE '%pattern%';
SELECT * FROM table_name WHERE column_name LIKE '_pattern';
4️⃣SQL 숫자 관련 함수
반올림
SELECT ROUNT(12.345, 1); -- 1
소수점 이하 버리기, 소수점 이하 올리기
SELECT FLOOR(12.345);
SELECT CEIL(12.345);
특정 자리 수 이하 자르기
SELECT TRUNCATE(12.345, 1);
나머지 연산
SELECT MOD(12.345, 1) -- 0.345
데이터 유형을 변환하여 소수점 이하 자릿수를 제어
SELECT CAST(12.345 AS DEMICAL(5, 1)) -- 전체자릿수:5, 소수점 이하 자릿수:1
-- 즉, 전체 자릿수가 5자리이고 소수점 이하 자릿수가 1자리인 12.3
5️⃣SQL 문의 집계 함수들
COUNT()
SELECT column, count(*) FROM table;
SUM()
SELECT SUM(column) FROM table;
AVG()
SELECT AVG(column) FROM table;
MAX()
SELECT MAX(column) FROM table;
MIN()
SELECT MIN(column) FROM table;
6️⃣DDL의 날짜 관련 함수
현재 날짜 및 시간 값 반환하기
SELECT CURRENT_DATE;
SELECT CURRENT_TIME;
SELECT CURRENT_TIMESTAMP;
날짜 부분만 추출하기
SELECT DATE('2023-01-01');
SELECT DATE(CURRENT_TIMESTAMP);
SELECT DATE_FORMAT('2023-01-01 00:00:00', '%y-%m-%d');
날짜에서 일, 월, 연도 추출하기
SELECT DAY('2023-01-01');
SELECT DAYOFMONTH('2023-01-01');
SELECT MONTH('2023-01-01'); // MYSQL에서만 됨
SELECT YEAR('2023-01-01');
주어진 날짜가 주(week)의 몇 번째 일인지 반환하기
SELECT DAYOFWEEK('2023-01-01'); /* 일요일이 1 */
주어진 날짜가 연도의 몇 번째 일인지 반환하기
SELECT DAYOFYEAR('2023-01-01');
날짜가 속한 주의 숫자를 반환하기
SELECT WEEK('2023-01-01');
두 날짜 간의 차이 구하기
SELECT DATEDIFF('2023-01-01-', INTERVAL 1 DAY);
특정 기간을 더하거나 빼기
SELECT DATE_ADD('2023-01-01', INTERVAL 1 DAY);
SELECT DATE_SUB('2023-01-01', INTERVAL 1 MONTH);
날짜에서 특정 부분 추출하기
SELECT EXTRACT(YEAR FROM '2023-01-01');
SELECT EXTRACT(MONTH FROM '2023-01-01');
문자열을 날짜 타입으로 변환하기
SELECT TO_DATE('2023-01-01', 'YYYY-MM-DD');