[TIL] 2021.07.16 - SQL 복습
프로그래머스 코테 연습
MySQL - SELECT
-모두 출력
SELECT * FROM ANIMAL_INS
-역순 정렬
SELECT NAME, DATETIME from ANIMAL_INS order by ANIMAL_ID DESC
-조건부 검색 (아픈 동물, 어린 동물)
SELECT ANIMAL_ID, NAME from ANIMAL_INS where INTAKE_CONDITION = 'Sick'
SELECT ANIMAL_ID, NAME from ANIMAL_INS where INTAKE_CONDITION != 'Aged'
-정렬
SELECT ANIMAL_ID, NAME from ANIMAL_INS order by ANIMAL_ID
-여러 기준으로 정렬
SELECT ANIMAL_ID, NAME, DATETIME from ANIMAL_INS order by NAME, DATETIME DESC
-상위 N개
-SELECT NAME from ANIMAL_INS order by DATETIME limit 1
-MAX
SELECT max(DATETIME) from ANIMAL_INS
-MIN
SELECT min(DATETIME) from ANIMAL_INS
-COUNT
SELECT count(*) from ANIMAL_INS
-중복제거 COUNT
SELECT count(distinct NAME) from ANIMAL_INS
-GROUP BY
SELECT ANIMAL_TYPE, count(*) from ANIMAL_INS group by ANIMAL_TYPE order by ANIMAL_TYPE
-HAVING (Group by의 조건절)
SELECT NAME, count(*) from ANIMAL_INS group by NAME having count(NAME) > 1 order by NAME
-GROUP BY - 응용 : round, date_format, as 함수
SELECT round(date_format(DATETIME, '%H')) as HOUR, count(*)
from ANIMAL_OUTS
group by HOUR
having HOUR >= 9 and HOUR <= 20
order by HOUR
프로그래머스 SQL 복습(2)
-IS NULL
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NULL
-IS NOT NULL
SELECT ANIMAL_ID FROM ANIMAL_INS WHERE NAME IS NOT NULL ORDER BY ANIMAL_ID ASC
-NULL 처리
SELECT ANIMAL_TYPE, ifnull(NAME, 'No name'), SEX_UPON_INTAKE from ANIMAL_INS
-없어진 기록 찾기(1) - subquery 사용
SELECT ANIMAL_ID, NAME
from ANIMAL_OUTS
where ANIMAL_ID not in (SELECT ANIMAL_ID from ANIMAL_INS);
-없어진 기록 찾기(2) - left join
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
from ANIMAL_OUTS
left join ANIMAL_INS
using(ANIMAL_ID) -- on ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID 대체 가능
where ANIMAL_INS.ANIMAL_ID is NULL
-있었는데요 없었습니다.(모순된 데이터 찾기) - right join
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
from ANIMAL_OUTS
right join ANIMAL_INS
using(ANIMAL_ID)
where ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME
order by ANIMAL_INS.DATETIME ASC
-오랜기간 보호한 동물(1) - join, on
SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
from ANIMAL_INS
left join ANIMAL_OUTS
using(ANIMAL_ID)
where ANIMAL_OUTS.ANIMAL_ID is NULL
order by ANIMAL_INS.DATETIME
limit 3
-보호소에서 중성화한 동물
SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.ANIMAL_TYPE, ANIMAL_OUTS.NAME
from ANIMAL_INS
left join ANIMAL_OUTS
using(ANIMAL_ID)
where ANIMAL_OUTS.ANIMAL_ID is not NULL and SEX_UPON_INTAKE <> SEX_UPON_OUTCOME
SQL 문법 안 써본지가 상당히 되서 그런지 저런 간단한 것들도 상당히 애를 먹고 있다. 다시 감을 잡아야 할듯!
처음으로 TIL을 시도해보는 중... 어떻게 할지도 뭘 할지도 잘 모르겠지만 앞으로 꾸준히 하다보면 가닥을 잡을 수 있겠지?