진박사의 일상

[TIL] 2021.07.16 - SQL 복습 본문

프로그래밍/코딩테스트 공부

[TIL] 2021.07.16 - SQL 복습

진박사. 2021. 7. 16. 22:17

프로그래머스 코테 연습

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을 시도해보는 중... 어떻게 할지도 뭘 할지도 잘 모르겠지만 앞으로 꾸준히 하다보면 가닥을 잡을 수 있겠지?