250x250
Notice
Recent Posts
Recent Comments
Link
상봉동개발자
프로그래머스 SQL 고득점 Kit - JOIN, String, Date 본문
728x90
JOIN
JOIN 은 두 테이블을 연결해주는 SQL 명령어이다.

MySQL join 명령어로는 크게 3가지가 있다. (A, B 테이블 기준)
- LEFT JOIN: A, B 테이블 중 A값 전체, A의 key 값, B의 key 값 리턴
- RIGHT JOIN: A, B 테이블 중 B값 전체, A의 key 값, B의 key 값 리턴
- JOIN (INNER JOIN): A, B 둘다 KEY값 있는것만 리턴
SELECT <열 목록>
FROM <기준 테이블>
INNER JOIN<참조할 테이블>
ON <조인 조건>
[WHERE 검색조건]
문제들은 전체적으로 위의 구조를 따라서 하면 쉬웠다.
그 중 아래 문제만 string data 의 특정 문자가 있는지 확인하는 Like 문법만 익숙하지 않았다.
# 보호소에서 중성화한 동물
SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_OUTS O
LEFT JOIN ANIMAL_INS I
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.SEX_UPON_OUTCOME NOT LIKE "%Intact%"
AND I.SEX_UPON_INTAKE LIKE "%Intact%"
String, Date
MySQL 에서 string 과 date 를 어떤식으로 처리하는지 알 수 있었다.
# 루시와 엘라 찾기 - IN 을 써서 name 이 다음 데이터 중 포함되는지 확인
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ("Lucy", "Ella", "Pickle", "Rogan", "Sabrina", "Mitty")
여기서 CASE 문도 알수 있었다.
# 중성화 여부 파악하기
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE "%Intact%"
THEN "X"
ELSE "O"
END AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
# if 로도 풀이 가능하다
SELECT ANIMAL_ID, NAME,
IF(SEX_UPON_INTAKE LIKE '%NEUTERED%' OR SEX_UPON_INTAKE LIKE '%SPAYED%','O','X') AS '중성화'
FROM ANIMAL_INS
ORDER BY ANIMAL_ID
# CASE 기본 구조
CASE
WHEN 조건
THEN 반환 값
ELSE 해당 안되는 경우 반환 값
END
# IF 기본 구조
IF(조건, '참', '거짓')
DATEDIFF 문법도 알수 있었다.
# 오랜 기간 보호한 동물(2)
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O
JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
ORDER BY DATEDIFF(I.DATETIME, O.DATETIME) ASC
LIMIT 2
DATETIME 을 DATE로 바꾸는 방식은 구글링 할떄는 DATE() 로 감싸면 된다고 했는데 그렇게 하니 시간, 분, 초가 00:00:00 형식으로 나왔다. 그래서 DATE_FORMAT을 이용했다. ('%Y-%m-%d' 는 대소문자를 지켜야한다)
SELECT ANIMAL_ID, NAME, DATE_FORMAT(DATETIME, '%Y-%m-%d') AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID728x90
'코테준비' 카테고리의 다른 글
| 이진탐색 (0) | 2022.09.05 |
|---|---|
| 정렬 (0) | 2022.09.02 |
| 프로그래머스 - SQL 고득점 Kit (SELECT, SUM, MAX, MIN, GROUP BY) (0) | 2022.08.02 |
| 이코테 - 최단경로 (다익스트라, 플로이드 워셜) (0) | 2022.07.10 |
| 이코테 - DP 4문제 (0) | 2022.07.09 |
Comments