문제풀이/SQL

[MYSQL]코딩테스트용 문법 정리

빈둥벤둥 2021. 9. 14. 15:35

📝 코딩테스트에서 자주 나오는 SQL 문법 정리

 


 

📌 요즘 코딩테스트에 SQL문제가 포함된 경우를 자주 만나고 있다.

📌 그럴 때마다 프로그래머스의 SQL문제를 다시한번 쭉 풀어보고 있으며 프로그래머스에 있는 'SQL 고득점 KIT'를 전부 풀 수 있는 수준이되면 코딩테스트에 나오는 SQL문제는 어렵지 않게 풀 수 있다.

📌그래서 이번에는 프로그래머스의 고득점 'SQL 고득점 KIT'를 중심으로 코딩테스트 직전에 SQL문법들을 훑어보기 좋게 정리해 보려고 한다.

📌기본적인 문법들 말고 문제를 푸는데 필요한 문법 위주로 정리했다.

 

 

 

✔ 다중정렬: 순서대로 정렬의 우선순위를 의미하며 2가지 이상의 필드를 조합하여 정렬할 수 있다.

ORDER BY NAME, DATE DESC
  • NAME 순으로 오름차순 정렬, NAME 같을시 DATE 내림차순 정렬

 

 

✔ LIMIT: 결과 개수 제한

ORDER BY NAME LIMIT 2
  • NAME 순으로 오름차순 정렬된 테이블에서 가장 위에서 부터 2개의 레코드 결과만을 가져옴

 

 

✔ DISTINCT: 중복 제거

SELECT COUNT(DISTINCT NAME) ...
  • NAME을 COUNT하되, 중복을 제거하여 COUNT한다.

 

 

✔ YEAR, HOUR, MONTH, DAY... : 날짜와 관련된 필드에서 원하는 데이터의 일부를 추출

SELECT HOUR(DATETIME) ...
  • DATETIME과 날짜와 시간을 모두 포함하는 필드에서 원하는 데이터(년도, 시간, 달, 일, 분, 초 등)을 추출
  • 위 예시에서는 시간 정보만을 추출하고 있다.

 

 

✔ SET: 변수 생성, 사용

SET @TIME := 1;
  • TIME이라는 변수를 사용하며 초기값을 1로 설정
SELECT @TIME := @TIME + 1 ...
  • TIME 변수에 누적하여 1씩 더하여 결과를 출력
... WHERE HOUR(DATETIME) = @TIME ...
  • DATETIME의 HOUR값이 TIME변수와 같은 값인지 조건 확인

 

 

✔ IFNULL: 결과 값 중 컬럼값이 NULL인 경우를 처리

SELECT IFNULL(NAME, 'NO NAME') ...
  • NAME 값이 NULL이면 'NO NAME'으로 변경

 

 

✔ IN/NOT IN: 특정 값이 들어있는 경우/들어있지 않은 경우에만 조회

SELECT ... WHERE NAME IN (SELECT NAME ...)
  • 두번째 서브쿼리의 조건에 해당하는 NAME값이 들어있는 경우에 대해서만 조회

 

 

✔ LIKE: 부분 일치를 찾음

WHERE NAME LIKE '%A%'
  • NAME 컬럼 값이 A가 포함된 경우를 조회
WHERE NAME LIKE 'A%'
  • NAME 컬럼 값이 A로 시작하는 경우를 조회
WHERE NAME LIKE '%A'
  • NAME 컬럼 값이 A로 끝나는 경우를 조회

 

 

✔ CASE: 조건문

SELECT 
	(CASE
		WHEN NAME LIKE '%DOG%' THEN 'O'
        	WHEN NAME LIKE '%CAT%' THEN 'O'
        	ELSE 'X'
	END) AS 'DOGORCAT' 
...
  • NAME에 DOG나 CAT이 포함되었다면 'O'를, 아니라면 'X'를 'DOGORCAT'라는 이름의 컬럼으로 출력

 

 

✔ DATE_FORMAT: 날짜, 시간을 지정한 형식으로 출력

SELECT DATE_FORMAT(DATETIME, '%Y-%m-%d') ...
  • DATETIME을 '2021-SEPTEMBER-1th' 형식으로 출력
  • %Y %y(년도), %D %d(날짜), %M %m(월), %S(초), %T(hh:mm:ss형태). 대문자,소문자 별로 출력 형식 다름 주의

 

 

✔ ABS(): 절대값

SELECT ABS(-100) ...
  • 숫자의 절대값을 구함

 

 

✔ CEIL(), FLOOR(), ROUND(): 올림/버림/반올림

SELECT CEIL(10, 1) ... #소수점 첫째자리에서 올림
SELECT FLOOR(10, 1) ... #소수점 첫째자리에서 버림
SELECT ROUND(10, 1) ... #소수점 첫째자리에서 반올림
  • 첫 번째 숫자를 두 번째 숫자가 가리키는 자릿수를 기준으로 올림/버림/반올림

 

 

✔ POW(): 제곱

SELECT POW(10, 2) ...
  • 첫 번째 숫자를 두 번째 숫자만큼 제곱