상봉동개발자

프로그래머스 SQL 고득점 Kit - JOIN, String, Date 본문

코테준비

프로그래머스 SQL 고득점 Kit - JOIN, String, Date

상봉동개발자 2022. 8. 3. 23:19
728x90

JOIN

JOIN 은 두 테이블을 연결해주는 SQL 명령어이다.

MySQL join 명령어로는 크게 3가지가 있다. (A, B 테이블 기준)

  1. LEFT JOIN: A, B 테이블 중 A값 전체, A의 key 값, B의 key 값 리턴
  2. RIGHT JOIN: A, B 테이블 중 B값 전체, A의 key 값, B의 key 값 리턴
  3. 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_ID
728x90

'코테준비' 카테고리의 다른 글

이진탐색  (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