[MySQL] JOIN
MySQL, 조인 함수, 프로그래머스
MySQL
을 기준으로 SQL 기본 문법을 정리하고,
프로그래머스
의 문제를 바탕으로 활용해보는 연재.
기본 문법
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