프로그래머스 4~6 : IS NULL, JOIN, STRING, DATEDatabase2021. 3. 23. 00:48
Table of Contents
IS NULL
이름이 없는 동물의 아이디
SELECT NVL(NAME, ANIMAL_ID) FROM ANIMAL_INS
WHERE NAME IS NULL
ORDER BY ANIMAL_ID;
이름이 있는 동물의 아이디
SELECT ANIMAL_ID FROM ANIMAL_INS
WHERE NAME IS NOT NULL
ORDER BY ANIMAL_ID;
NULL 처리하기
SELECT
ANIMAL_TYPE,
NVL(NAME, 'No name') "NAME",
SEX_UPON_INTAKE
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
JOIN
없어진 기록 찾기
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_INS I
RIGHT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY O.ANIMAL_ID;
있었는데요 없었습니다
-- 보호 시작일보다 입양일이 더 빠른 동물
-- 1.3 > 1.1
-- INS.DATE >OUTS.DATE
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_OUTS O
INNER JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE
I.DATETIME > O.DATETIME
ORDER BY I.DATETIME;
오랜 기간 보호한 동물(1)
WITH T1 AS(
SELECT I.* FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE
O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
)
SELECT NAME, DATETIME FROM T1 WHERE ROWNUM <= 3;
차집합은 잘 안먹는다.. 뚁땅함. ㅠ
보호소에서 중성화한 동물
SELECT
O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME --, SEX_UPON_INTAKE, SEX_UPON_OUTCOME
FROM ANIMAL_INS I
INNER JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE
SEX_UPON_INTAKE NOT LIKE 'Spayed%'
AND SEX_UPON_INTAKE NOT LIKE 'Neutered%'
AND (SEX_UPON_OUTCOME LIKE 'Spayed%'
OR SEX_UPON_OUTCOME LIKE 'Neutered%'
)
ORDER BY ANIMAL_ID;
String, Date
루시와 엘라 찾기
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE
NAME IN ('Lucy', 'Ella', 'Pickle', 'Rogan', 'Sabrina', 'Mitty')
ORDER BY ANIMAL_ID;
이름에 el이 들어가는 동물 찾기
SELECT ANIMAL_ID, NAME FROM ANIMAL_INS
WHERE
UPPER(NAME) LIKE UPPER('%EL%')
AND ANIMAL_TYPE = 'Dog'
ORDER BY NAME;
중성화 여부 파악하기
SELECT ANIMAL_ID, NAME,
CASE
WHEN SEX_UPON_INTAKE LIKE 'Spayed%'
OR SEX_UPON_INTAKE LIKE 'Neutered%'
THEN 'O'
ELSE
'X'
END AS "중성화"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID, NAME, 중성화;
오랜 기간 보호한 동물(2)
SELECT ANIMAL_ID, NAME FROM (
SELECT O.ANIMAL_ID, O.NAME, O.DATETIME - I.DATETIME FROM ANIMAL_INS I
INNER JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY O.DATETIME - I.DATETIME DESC
)
WHERE ROWNUM <= 2;
DATETIME에서 DATE로 형 변환
SELECT
ANIMAL_ID,
NAME,
TO_CHAR(DATETIME, 'YYYY-MM-DD') AS "날짜"
FROM ANIMAL_INS
ORDER BY ANIMAL_ID;
'Database' 카테고리의 다른 글
MySQL Index (0) | 2023.07.19 |
---|---|
프로그래머스 SQL 1~3 - SELECT, SUM, MAX, MIN, GROUP BY (0) | 2021.03.22 |
생코_관계형 데이터 모델링 (0) | 2021.03.19 |
오라클에서 ANSI 조인 3개 (0) | 2021.03.08 |
오라클에서 실수로 데이터나 테이블 삭제했을 경우 (0) | 2021.03.07 |
@philo0407 :: Philo의 다락방
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!