프그스 SQL - 고득점 kit - JOIN 모음 (중요)

RostoryT·2022년 7월 16일
0

sql

목록 보기
4/5
post-thumbnail

  • join 사용법 (중요)
    • FROM 절에서
    • A as a JOIN B as b
    • ON a.id = b.id

1. 없어진 기록 찾기 - level 3


  • 본 문제에서, 한 테이블에는 있는데 다른 테이블에 없는 데이터 조회
    = outer join은 둘을 합치는 거기 때문에,
    -> 조건을 추가 안하면 나간 기록도 있고, 들어온 기록도 있는 모든 합집합을 출력함
    • 따라서 Where ins가 null인 것(=A)만 출력(=B)해야 함
  • 그림 출처 : https://chanhuiseok.github.io/posts/db-7/
SELECT o.animal_id, o.name
FROM animal_outs o left outer join animal_ins i
ON o.animal_id = i.animal_id
WHERE i.datetime IS NULL
ORDER BY o.animal_id


2. 있었는데요 없었습니다 - level 3


  • 조건을 잘 보자... 정렬 datetime으로 하는거였음.... ㅠㅠ
  • 1번문제랑 같은 결의 문제
SELECT i.animal_id, i.name
FROM animal_ins i INNER JOIN animal_outs o
ON i.animal_id = o.animal_id
WHERE o.datetime <= i.datetime
ORDER BY i.datetime;


3. 오랜 기간 보호한 동물(1) - level 3

  • 아직 입양을 못 간 = ins에 left join걸어서 outs가 null인 것을 추출해야 한다
    • 이때, outs.key 가 NULL인 것을 추출하는 것!! (name이나 date가 아니라!!!)
  • Top k 사용 => MySQL에선 "LIMIT"을 사용한다 (중요)
    • LIMIT은 가장 맨 뒤에 사용해야한다!! 정렬까지 다 끝난 후에 최종 Top K개
SELECT i.name, i.datetime
FROM animal_ins i LEFT OUTER JOIN animal_outs o
ON i.animal_id = o.animal_id
WHERE o.animal_id IS NULL
ORDER BY i.datetime
LIMIT 3


4. 보호소에서 중성화한 동물 - level 4


  • 들어올 땐 중성화 X => 나갈 땐 중성화 O

  1. 인라인 뷰 둘 다 적용해서 'Intact'인 애들, 아닌애들만 가져오는 방법
  2. 그냥 조인해서 i.sex = 중성거치지않은 이고, o.sex != 중성거치지않은 이면 되지않나?
    • LIKE 연산자 등장..!
      • Where 컬럼 LIKE '~~~'
      • Where 컬럼 NOT LIKE '~~~'
    • 와일드카드 등장..!
      • ' _ '는 문자 하나
      • ' % '는 여러 개

  • 마지막으로 id순으로 정렬

  • 정답 쿼리 - 내가 푼

SELECT i.animal_id, i.animal_type, i.name
FROM animal_ins i JOIN animal_outs o
ON i.animal_id = o.animal_id
WHERE i.sex_upon_intake like 'Intact%'
AND o.sex_upon_outcome not like 'Intact%'
ORDER BY i.animal_id
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME 
FROM ANIMAL_INS as I JOIN ANIMAL_OUTS as O 
WHERE I.ANIMAL_ID = O.ANIMAL_ID 
AND I.SEX_UPON_INTAKE != O.SEX_UPON_OUTCOME
ORDER BY I.ANIMAL_ID;

profile
Do My Best

0개의 댓글