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 TABLE명 WHERE 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
복사