https://school.programmers.co.kr/learn/courses/30/lessons/59042
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블
NAME | TYPE | NULLABLE | |
ANIMAL_ID | 동물의 아이디 | VARCHAR(N) | FALSE |
ANIMAL_TYPE | 생물 종 | VARCHAR(N) | FALSE |
DATETIME | 보호 시작일 | DATETIME | FALSE |
INTAKE_CONDITION | 보호 시작 시 상태 | VARCHAR(N) | FALSE |
NAME | 이름 | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | 성별 및 중성화 여부 | VARCHAR(N) | FALSE |
ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블
NAME | TYPE | NULLABLE | |
ANIMAL_ID | 동물의 아이디 (ANIMAL_INS의 ANIMAL_ID의 외래 키) |
VARCHAR(N) | FALSE |
ANIMAL_TYPE | 생물 종 | VARCHAR(N) | FALSE |
DATETIME | 입양일 | DATETIME | FALSE |
NAME | 이름 | VARCHAR(N) | TRUE |
SEX_UPON_INTAKE | 성별 및 중성화 여부 | VARCHAR(N) | FALSE |
입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문 작성
조회 예시
ANIMAL_ID | NAME |
A349733 | Allie |
A349990 | Spice |
접근법
# 구할 값 = ANIMAL_OUTS에 있는 정보 - (ANIMAL_OUTS와 ANIMAL_INS에 모두 있는 정보) = ANIMAL_OUTS에만 있는 정보
1. LEFT JOIN으로 입양 보낸 동물의 정보 (ANIMAL_OUTS) 출력
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
ORDER BY ANIMAL_ID;
2. 동물 보호소에 들어온 동물 정보 (ANIMAL_INS)가 없는 정보 찾기
# LEFT JOIN 대신 LEFT OUTER JOIN 사용해도 결괏값은 같음
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;
LEFT JOIN 실행 시 왼쪽 테이블 (위의 코드에서는 ANIMAL_OUTS 테이블) 기준으로 조회된다. 따라서 왼쪽 테이블에 있는 값과 연결되는 (ON) 오른쪽 테이블의 값이 없다면 (아래 예시에서의 Allie와 Spice, ANIMAL_OUTS에는 존재하지만 ANIMAL_INS에는 존재하지 않는 데이터) 그 행의 값은 NULL이 된다.
ANIMAL_ID (OUTS) | NAME | ANIMAL_ID (INS) |
A349733 | Allie | |
A349990 | Spice | |
A349430 | Gia | A349430 |
A349890 | Meo | A349890 |

풀이법
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID;
참고
https://hongong.hanbit.co.kr/sql-기본-문법-joininner-outer-cross-self-join/
SQL 기본 문법: JOIN(INNER, OUTER, CROSS, SELF JOIN)
조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다. INNER JOIN(내부 조인)은 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부
hongong.hanbit.co.kr
'문제 풀이 > SQL' 카테고리의 다른 글
[SQL/MySQL] [programmers] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2023.03.27 |
---|---|
[SQL/MySQL] [Programmers] 루시와 엘라 찾기 (0) | 2023.03.24 |
[programmers] [SQL/MySQL] 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.03.04 |
[SQL/mysql] [programmers] 조건별로 분류하여 주문상태 출력하기 (0) | 2023.02.26 |
[SQL] [programmers] 성분으로 구분한 아이스크림 총 주문량 (0) | 2023.02.14 |