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
728x90