Notice
Recent Posts
Link
Tags
- @transactional
- 문자열
- PYTHON
- 프로그래머스
- mysql
- Git
- spring mvc
- string
- spring security 6
- DI
- SSL
- java
- Docker
- nginx
- sql
- ORM
- spring boot
- join
- jpa
- spring
- Django
- AWS
- 데이터베이스
- session
- 스프링
- 자바
- select
- springboot
- 스프링부트
- 1차원 배열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Archives
개발하는 자몽
[프로그래머스] JOIN > 없어진 기록 찾기 본문
문제
https://school.programmers.co.kr/learn/courses/30/lessons/59042
천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해 주세요.
풀이
- 입양을 간 기록만 있고, 보호소에 들어온 기록이 없음
- 동물의 ID, 이름 조회
SELECT o.ANIMAL_ID, o.NAME
FROM ANIMAL_INS i RIGHT OUTER JOIN ANIMAL_OUTS o on i.ANIMAL_ID = o.ANIMAL_ID
WHERE i.ANIMAL_ID IS NULL;
- `동물의 ID`, `이름`을 조회하므로 SELECT 절에 작성
- 두 테이블의 데이터를 합쳐서 비교해야 하므로 JOIN 절 작성
- 입양 기록만 있고, 보호소에 들어온 기록이 없는 경우를 찾아야 하므로, 두 테이블을 겹쳐서 입양 테이블의 기록만 출력해야 한다. 따라서 `LEFT/RIGHT OUTER JOIN`을 사용해야 한다.
- `ANIMAL_INS`를 왼쪽 테이블로, `ANIMAL_OUTS`를 오른쪽 테이블로 둔 상태로 `RIGHT OUTER JOIN`을 사용한다. 이때 ID 값으로 비교하므로 `ON`에 작성한다.
- 위와 같은 그림처럼 출력하기 위해서는 한 가지 조건이 더 필요하다. 단순히 OUTER JOIN만 하게 되면, 왼쪽 테이블에 없는 데이터도 `NULL`로 같이 출력된다. 왼쪽 테이블에서 기록이 없을 때를 조회해야 하므로 WHERE 절에 왼쪽 테이블의 조건을 추가한다.
- 입양 기록만 있고, 보호소에 들어온 기록이 없는 경우를 찾아야 하므로, 두 테이블을 겹쳐서 입양 테이블의 기록만 출력해야 한다. 따라서 `LEFT/RIGHT OUTER JOIN`을 사용해야 한다.
Notice `RIGHT OUTER JOIN`시 추가 제약조건 규칙
- ON에 오른쪽 테이블 제약조건 작성
- WHERE에 왼쪽 테이블 제약조건 작성
'SQL' 카테고리의 다른 글
[프로그래머스] JOIN > 오랜 기간 보호한 동물(1) (0) | 2024.02.01 |
---|---|
[프로그래머스] JOIN > 있었는데요 없었습니다 (0) | 2024.01.31 |
[프로그래머스] SELECT > 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.01.24 |
[프로그래머스] SELECT > 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2024.01.24 |
[프로그래머스] SELECT > 12세 이하인 여자 환자 목록 출력하기 (0) | 2024.01.23 |
Comments