Search

SQL 고득점 Kit Cheat Sheet

Tags
Database
Date
2024/03/05

1. 개요

SQL 고득점 Kit을 푸는데 도움이 되는 정보들을 정리해보았습니다. 단순히 정답을 가르쳐 주는 것이 아닌 어떤 조건을 해결하기 위해 사용해야 하는 SQL 문을 힌트처럼 제공합니다.
예를 들어, DATE_OF_BIRTH 필드가 1999-03-27과 같이 주어질 때 생일이 3월인 회원을 필터링 하기 위해서 어떻게 SQL문을 작성해야 할까요?
다양한 방법이 있지만 MONTH(DATE_OF_BIRTH)를 통해 지정한 날짜의 월을 반환 받을 수 있습니다.

2. 시작하기

연, 월, 일

1999-03-27 이라는 값을 가지고 있는 DATE_OF_BIRTH 필드에서 연, 월, 일을 각각 어떻게 추출할까?
YEAR(DATE_OF_BIRTH) MONTH(DATE_OF_BIRTH) DAY(DATE_OF_BIRTH)
Java
복사
만약 이를 통해 필터링을 하고 싶다면 다음과 같이 작성할 수 있습니다.
SELECT * FROM TABLEWHERE MONTH(DATE_OF_BIRTH) = 3;
Java
복사
참고로 다음의 방식도 가능합니다.
DATE_OF_BIRTH >= 'YYYY-03-01' AND DATE_OF_BIRTH < 'YYYY-04-01' -- YYYY는 해당 연도를 나타냄
Java
복사

날짜 형식

1992-03-16 00:00:00 라는 값이 있을 때 이를 1992-03-16으로 어떻게 나타낼 수 있을까?
DATE_FORMAT(DATE_OF_BIRTH', '%Y-%m-%d')
Java
복사
참고로 DATE_FORMAT의 구분기호는 다음과 같습니다.
%Y
네 자리 년도
%W
긴 영문 요일
%y
두 자리 년도
%a
짧은 영문 요일
%M
긴 영문 월
%d
두자리 숫자 일
%b
짧은 영문 월
%e
한자리 숫자 일
%m
두 자리 숫자 월
%H
24시간 기준 시간
%c
한 자리 숫자 월
%I
12시간 기준 시간
%T
hh:mm:SS
%i
%r
hh:mm:ss AM,PM 
%S

두 개 이상의 정렬 기준

총주문량을 기준으로 내림차순 정렬하고 총주문량이 같다면 출하 번호를 기준으로 오름차순 정렬하여 조회라는 조건이 있을 때 어떻게 짜야할까?
NULL 값이라면 대체
SELECT ID, IFNULL ( ( SELECT COUNT(*) FROM ECOLI_DATA GROUP BY PARENT_ID HAVING PARENT_ID = ID ), 0 ) AS CHILD_COUNT FROM ECOLI_DATA ORDER BY ID ASC;
Java
복사
두 개의 값을 함께 비교하는 법
SELECT fi.ID, fni.FISH_NAME, fi.length FROM FISH_INFO fi JOIN FISH_NAME_INFO fni ON fi.FISH_TYPE = fni.FISH_TYPE WHERE (fi.FISH_TYPE, fi.LENGTH) IN ( SELECT FISH_TYPE, MAX(LENGTH) FROM FISH_INFO GROUP BY FISH_TYPE ) ORDER BY fi.ID;
Java
복사
2진법 비교
AND 연산해서 같은 값이 나오면 됩니다.
SELECT DISTINCT d.ID, d.EMAIL, d.FIRST_NAME, d.LAST_NAME FROM DEVELOPERS d JOIN SKILLCODES s ON s.code = d.SKILL_CODE & s.code WHERE s.CATEGORY LIKE 'Front End' ORDER BY d.ID;
Java
복사