[프로그래머스 SQL 고득점 Kit] JOIN

Kim Yuhyeon·2022년 5월 7일
0

SQL 

목록 보기
5/21

문제


https://programmers.co.kr/learn/courses/30/parts/17046

JOIN


하나의 테이블에 원하는 데이터가 모두 있다면 참 좋겠지만,
두 개의 테이블을 엮어야 원하는 결과가 나오는 경우도 많습니다.
조인을 쓰면 두 개의 테이블을 엮어서 원하는 데이터를 추출할 수 있습니다.

📌JOIN 5줄 요약

  • 조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.
  • INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.
  • OUTER JOIN(외부 조인)은 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.
  • CROSS JOIN(상호 조인)은 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.
  • SELF JOIN(자체 조인) 은 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.

LEFT JOIN

기존에 ANIMAL_INS 테이블에서 없었던 내용들은
ID가 NULL 처리되어 들어오므로
WHERE 절에 IS NULL을 추가하면

ANIMAL_OUTS에는 있지만 ANIMAL_INS에는 없는 값들만 출력할 수 있다

-- 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요. 
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.ANIMAL_ID
-- 아직 입양을 못 간 동물 중, 
-- 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 
-- 이때 결과는 보호 시작일 순으로 조회해야 합니다.
SELECT A.NAME, A.DATETIME
FROM ANIMAL_INS AS A LEFT JOIN ANIMAL_OUTS AS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE B.ANIMAL_ID IS NULL
ORDER BY A.DATETIME 
LIMIT 3
-- 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 
-- 보호소에 들어올 당시에는 중성화 되지 않았지만,
-- 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS AS A JOIN ANIMAL_OUTS  AS B ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.SEX_UPON_INTAKE != B.SEX_UPON_OUTCOME
ORDER BY A.ANIMAL_ID

💡 참고 포스팅


0개의 댓글