Programming/MySQL

[MySQL] 코딩테스트 대비 자주 쓰이는 문법 정리

728x90

 

프로그래머스 고득점 키트를 풀다가

오랜만에 SQL 문제를 풀었더니 자꾸 검색을 하게 되더라구요 😂😂

자주 쓰이지만 오랜만에 하면 헷갈리는 문법들 몇개 기록합니다 🔥

 

 

 

 

상위 N개의 레코드만 조회하기 : LIMIT 구문

LIMIT 구문을 붙여서 조회할 행의 수를 제한할 수 있습니다

SELECT NAME
FROM ANIMAL_INS
ORDER BY DATETIME
LIMIT 1;

 

 

 

 

 

 

날짜 데이터에서 연, 월, 일, 시, 분, 초만 추출하기

다음 함수들로 날짜 데이터의 일부를 추출할 수 있습니다

함수 추출
YEAR() 연도
MONTH()
DAY()
HOUR()
MINUTE()
SECOND()

사용 예시)

SELECT MONTH(DATETIME)
FROM ANIMAL_INS;

 

 

 

 

 

 

NULL인지 검사하기

SELECT NAME, ANIMAL_TYPE
FROM ANIMAL_INS
WHERE NAME IS NULL;
SELECT NAME, ANIMAL_TYPE
FROM ANIMAL_INS
WHERE NAME IS NOT NULL;

 

 

 

 

 

NULL값 대체하기 : IFNULL

IFNULL(컬럼명, 대체할 값)

SELECT IFNULL(NAME, "No name"), ANIMAL_TYPE
FROM ANIMAL_INS;

 

 

 

 

 

특정 문자가 포함되어 있는지 검색 : LIKE 연산자

> 특정 문자로 시작하는 데이터 검색

SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '특정문자열%';

> 특정 문자로 끝나는 데이터 검색

SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '%특정문자열';

> 특정 문자가 포함되어 있는 데이터 검색

SELECT 컬럼명 FROM 테이블명 WHERE 컬럼명 LIKE '%특정문자열%';

 

 

 

 

 

조건에 따라 값 변경하기 : CASE 문

프로그래밍 언어에서의 스위치(switch) 문과 비슷합니다

칼럼을 CASE 다음에 지정해서 사용할 수도, 그냥 조건을 명시해서도 사용할 수 있습니다

CASE 컬럼명
	WHEN 컬럼값1
	THEN 반환값1
	WHEN 컬럼값2
	THEN 반환값2
	ELSE 위 값들에 해당 안될 경우의 반환값
END
CASE
	WHEN 조건1
	THEN 반환값1
	WHEN 조건2
	THEN 반환값2
	ELSE 조건에 해당 안될 경우의 반환값
END

 

사용 예시)

SELECT NAME, ID
	CASE ANIMAL_TYPE
		WHEN 'Dog'
		THEN '개'
		WHEN 'Cat'
		THEN '고양이'
		ELSE '알수없음'
	END AS 종
FROM ANIMAL_INS;

 

 

 

 

 

 

DATETIME 원하는 형식으로 출력하기 : DATE_FORMATE()

DATETIME이나 DATE 타입의 형식을 지정하고 싶을 때 사용한다

DATE_FORMAT의 FORMAT은 다음과 같다

FORMAT 설명
%M Month 월(Janeary, February ...)
%m Month 월(01, 02, 03 ...)
%W Day of Week 요일(Sunday, Monday ...)
%D Month 월(1st, 2dn, 3rd ...)
%Y Year 연도(1999, 2000, 2020)
%y Year 연도(99, 00, 20)
%X Year 연도(1999, 2000, 2020) %V와 같이쓰임
%x Year 연도(1999, 2000, 2020) %v와 같이쓰임
%a Day of Week요일(Sun, Mon, Tue ...)
%d Day 일(00, 01, 02 ...)
%e Day 일(0, 1, 2 ..)
%c Month(1, 2, 3 ..)
%b Month(Jen Feb ...)
%j n번째 일(100, 365)
%H Hour 시(00, 01, 24) 24시간 형태 
%h Hour 시(01, 02, 12) 12시간 형태
%I(대문자 아이) Hour 시(01, 02 12) 12시간 형태
%l(소문자 엘) Hour 시(1, 2, 12) 12 시간 형태
%i Minute 분(00, 01 59)
%r hh:mm:ss AP | PM
%T hh:mm:ss
%S, %s Second 초
%p AP, PM
%w Day Of Week (0, 1, 2) 0부터 일요일
%U Week 주(시작: 일요일)
%u Week 주(시작 월요일)
%V Week 주(시작: 일요일)
%v Week 주(시작:월요일)

 

사용 예시)

SELECT DATE_FORMAT(DATETIME, '%Y년 %m월 %d일') as Day
FROM ANIMAL_INS;

 

 

 

 

 

 

 

0부터 10까지 출력하는 테이블 만들기

WITH RECURSIVE cte AS (
    SELECT 0 AS n
    UNION ALL
    SELECT n + 1 FROM cte WHERE n < 10
) 
SELECT n FROM cte;

 

 

시작~끝 범위를 다음과 같이 정할 수 있습니다!

WITH RECURSIVE cte AS (
    SELECT 시작 AS n
    UNION ALL
    SELECT n + 1 FROM cte WHERE n < 끝
) 
SELECT n FROM cte;

 

Recursive는 SQLD 취득할 때 이론으로만 접해봤는데 이렇게 사용해 볼 일이 또 있네요 👶

 

 

 

 

 

 

 

 

📚 참고 사이트

- ChanBLOG

- https://extbrain.tistory.com/60

- https://happyguy81.tistory.com/112

- https://lollolzkk.tistory.com/44

- https://extbrain.tistory.com/46

- https://kig6022.tistory.com/7

- PHPSCHOOL-Q&A

 

 

 

728x90