[MySQL] JOIN

MySQL, 조인 함수, 프로그래머스

MySQL을 기준으로 SQL 기본 문법을 정리하고,
프로그래머스의 문제를 바탕으로 활용해보는 연재.

기본 문법

SQL JOINS

1. INNER JOIN 함수

  • 테이블 A와 테이블 B의 교집합
    SELECT 필드
    FROM A
    INNER JOIN B
    ON A.key = B.Key
    

2. LEFT OUTER JOIN 함수

  • 테이블 A와 테이블 B가 있을 때, 두 테이블의 교집합을 포함하여 왼쪽 테이블(A)의 다른 데이터를 포함하는 조인
SELECT 필드명
FROM A
LEFT JOIN B
ON A.Key = B.Key

3. RIGHT OUTER JOIN 함수

  • 테이블 A와 테이블 B가 있을 때, 두 테이블의 교집합을 포함하여 오른쪽 테이블(B))의 다른 데이터를 포함하는 조인
    SELECT 필드명
    FROM A
    RIGHT JOIN B
    ON A.Key = B.Key
    

4. FULL OUTER JOIN 함수

  • 테이블 A와 B의 합집합
SELECT 필드명
FROM A
FULL OUTER JOIN B
ON A.Key = B.Key

문제 예시


1. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

SELECT ANIMAL_OUTS.ANIMAL_ID, ANIMAL_OUTS.NAME
FROM ANIMAL_INS
RIGHT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.ANIMAL_ID IS NULL

2. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야 합니다.

SELECT ANIMAL_INS.ANIMAL_ID,ANIMAL_INS.NAME
FROM ANIMAL_INS
INNER JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME
ORDER BY ANIMAL_INS.DATETIME

3. 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

SELECT ANIMAL_INS.NAME, ANIMAL_INS.DATETIME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_OUTS.ANIMAL_ID IS NULL
ORDER BY ANIMAL_INS.DATETIME ASC
LIMIT 3

4. 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 아이디 순으로 조회하는 SQL 문을 작성해주세요.

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.ANIMAL_TYPE, ANIMAL_INS.NAME
FROM ANIMAL_INS
INNER JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.SEX_UPON_INTAKE LIKE 'Intact%' AND (ANIMAL_OUTS.SEX_UPON_OUTCOME LIKE 'Neutered%' OR ANIMAL_OUTS.SEX_UPON_OUTCOME LIKE 'Spayed%')
ORDER BY ANIMAL_INS.ANIMAL_ID

© 2021 by iyerl. All rights reserved.

Powered by Hydejack v9.1.2