[SQL] String, Date
프로그래머스 링크: programmers.co.kr/learn/courses/30/parts/17047
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코딩 테스트의 SQL 문제를 대비하기 위해 공부하며 정리한 글입니다.
1. 루시와 엘라 찾기
programmers.co.kr/learn/courses/30/lessons/59046
코딩테스트 연습 - 루시와 엘라 찾기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
ANIMAL_INS 테이블 중, 동물 이름이 Lucy, Ella, Pickle, Rogan, Sabrina, Mitty인 동물의 아이디와 이름, 성별 및 중성화 여부를 조회하여 아이디 순으로 정렬하여 출력하는 문제.
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME in ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID
WHERE NAME = 'Lucy' or NAME = 'Ella' or ... 와 같은 식으로 써도 되지만 위와 같이 작성하는 것이 더 편합니다.
2. 이름에 el이 들어가는 동물 찾기
programmers.co.kr/learn/courses/30/lessons/59047
코딩테스트 연습 - 이름에 el이 들어가는 동물 찾기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
ANIMAL_INS 테이블 중, 동물 이름에 el이 들어가는 개의 아이디와 이름을 조회하여, 이름 순으로 정렬하여 출력하는 문제. 이 때 이름의 대소문자는 구분하지 않습니다.
SELECT ANIMAL_ID, NAME
FROM ANIMAL_INS
WHERE NAME LIKE '%EL%' and ANIMAL_TYPE = 'Dog'
ORDER BY NAME
LIKE '%문자열%' 을 이용하여 푸는 문제였습니다.
3. 중성화 여부 파악하기
programmers.co.kr/learn/courses/30/lessons/59409
코딩테스트 연습 - 중성화 여부 파악하기
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
ANIMAL_INS 테이블 중, 중성화가 되었는지 여부를 파악하여, 동물의 아이디와 이름, 중성화 여부를 O 또는 X로 나타내고, 아이디 순으로 정렬하여 출력하는 문제.
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE '%Neutered%' or SEX_UPON_INTAKE LIKE '%Spayed%'
THEN 'O' ELSE 'X' END
as '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
이 문제는 문자열 쪽에서 헷갈렸다기보다는, CASE를 활용하는 경우에 대한 예시라고 봐도 좋을 것 같습니다.
CASE 문을 열고 END로 닫습니다. 이 사이에서 WHEN을 통해 조건을 명시하고, 맞을 경우 THEN, 아닐 경우 ELSE를 통해 원하는 내용을 출력합니다.
1번 문제처럼 in ('문자열1', '문자열2',...)는 LIKE에서는 사용ㅇ할 수 없는 것 같습니다.
4. 오랜 기간 보호한 동물(2)
programmers.co.kr/learn/courses/30/lessons/59411
코딩테스트 연습 - 오랜 기간 보호한 동물(2)
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
ANIMAL_INS와 ANIMAL_OUTS 테이블에서, 보호 기간이 가장 긴 두 마리의 동물의 아이디와 이름을, 보호 기간이 긴 순으로 정렬하여 출력하는 문제.
SELECT a.ANIMAL_ID, a.NAME
FROM ANIMAL_INS a LEFT JOIN ANIMAL_OUTS b on a.ANIMAL_ID = b.ANIMAL_ID
ORDER BY b.DATETIME - a.DATETIME DESC
LIMIT 2
JOIN을 함께 이용하는 문제입니다.
두 테이블 ANIMAL_INS와 ANIMAL_OUTS를 JOIN하고, 나간 시간 - 들어온 시간 을 내림차순으로 정렬하여 2개만 출력하도록 했습니다.
5. DATETIME에서 DATE로 변환
programmers.co.kr/learn/courses/30/lessons/59414
코딩테스트 연습 - DATETIME에서 DATE로 형 변환
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
ANIMAL_INS 테이블로부터, 각 동물의 아이디와 이름, 들어온 날짜를 조회하여 아이디 순으로 정렬한 후 출력하는 문제. 들어온 날짜는 년-월-일 형식을 따릅니다.
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') as '날짜'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
DATE_FORMAT을 이용합니다. 이 때 사용되는 형식에는 '%Y' (4자리 연도), '%y' (2자리 연도), '%m' (월), '%d' (일), '%H' (24시간), '%h' (12시간) 등이 있습니다.