일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 주니어개발자
- collection python
- 개발자 취준
- 리트허브 커밋
- 프로그래머스 배열 회전시키기
- Programmers 배열의 유사도
- 알고리즘
- 프로그래머스 특정 문자 제거하기
- 2-layered architecture
- 프로그래머스 배열의 유사도 파이썬
- 특정문자 제거하기
- 스프링 시스템 구조
- 춥고더운우리집
- BigO notation
- 슈츠 자막
- 배열의 유사도 파이썬
- 프레젠테이션 레이어
- 가위바위보 풀이
- 파이썬 특정 문자 제거하기
- 공선옥
- 리트허브 사용법
- 프로그래머스
- 춥고 더운 우리 집
- 비지니스 레이어
- programmers 배열 회전
- 파이썬 컬렉션
- 프로그래머스 가위바위보
- leftJoin
- 프로그래머스 가위바위보 풀이
- 리트허브 오류
- Today
- Total
기억보다 기록을
[Programmers] 없어진 기록 찾기 LEFT OUTER JOIN 본문
안녕하세요. 프로그래머스의 "없어진 기록찾기" 문제입니다. 이 문제를 풀기 위해서 left outer join(left join)에 대한 이해가 필요합니다.
left outer join은 위 벤다이어그램의 A부분에 해당하는 데이터를 추출하는 sql 입니다.
두 개의 테이블을 예시로 들겠습니다.
book
id | book_name | publish_date | authour_id |
1 | happy lunar new year | 20220201 | 1 |
2 | I ate ddeok-guk | 20220205 | 2 |
3 | this morning | 20210212 | 1 |
4 | how about you | 20110523 | null |
author
aid | name | nation | city | sex |
1 | jerry | uk | London | female |
2 | danny | uk | Bristol | male |
3 | herby | denmark | Aalborg | male |
4 | rouise | france | Paris | female |
SELECT * FROM book LEFT OUTER JOIN author
ON book.authour_id=author.aid
left outer join을 기준으로 왼쪽테이블이 A, 오른쪽테이블이 B가 됩니다.
"A 테이블 옆에 B를 붙일건데 on 조건에 맞는 데이터로 가져오자"라고 해석하시면 됩니다.
추출 결과는 다음과 같습니다.
id | book_name | publish_date | authour_id | aid | name | nation | city | sex |
1 | happy lunar new year | 20220201 | 1 | 1 | jerry | uk | London | female |
2 | I ate ddeok-guk | 20220205 | 2 | 2 | danny | uk | Bristol | male |
3 | this morning | 20210212 | 1 | 1 | jerry | uk | London | female |
4 | how about you | 20110523 | null | null | null | null | null | null |
이 때 id값이 null인 행이 없으므로 빈칸은 null로 채워집니다.
"왼쪽 테이블엔 값이 있는데 오른쪽 테이블의 해당 행에는 값이 없음"라고 해석하시면 됩니다.
left outer join에 대한 이해가 생겼으면 문제를 풀이하기 쉽습니다.
입양을 간 기록(ANIMAL_OUTS)이 있고 보호소에 들어온 기록은 없습니다.
1) SQL을 실행하여 데이터가 나와야하므로 ANIMAL_OUTS테이블이 왼쪽에 위치해야 합니다.
2) 두 테이블을 연결했을 때, OUTS엔 있지만 INS엔 없는 데이터값은 NULL값으로 채워질 것입니다.
3) NULL로 연결된 행을 통해 OUTS엔 있지만 INS엔 없는 데이터의 값을 불러올 수 있습니다.
제가 제출한 정답은 다음과 같습니다.보통 as로 별명을 적어주는데 저는 그냥 쭉 쓰는게 편하더라고요.
그래도 다음부턴 별명을 써줘야겠습니다.🧐
SELECT ANIMAL_OUTS.ANIMAL_ID,ANIMAL_OUTS.NAME
FROM ANIMAL_OUTS LEFT OUTER JOIN ANIMAL_INS
ON ANIMAL_OUTS.ANIMAL_ID=ANIMAL_INS.ANIMAL_ID
WHERE ANIMAL_INS.ANIMAL_ID IS NULL
ORDER BY ANIMAL_OUTS.ANIMAL_ID;
실행결과
덧붙여, LEFT OUTER JOIN과 LEFT JOIN은 같은 기능을 합니다.
RIGHT OUTER JOIN은 위의 내용과 같으나 좌우의 위치를 바꿔주면 됩니다.
문제링크: https://programmers.co.kr/learn/courses/30/lessons/59042
'Language > SQL' 카테고리의 다른 글
[Programmers] 그룹별 조건에 맞는 식당 목록 출력하기 (mysql, with 사용) (0) | 2023.02.16 |
---|---|
[Programmers] 조건에 맞는 도서와 저자 리스트 출력하기(mysql) (0) | 2023.02.05 |
[mongoDB] 간단한 사용 방법과 예제(cmd, postman) (0) | 2022.02.28 |
[Programmers] 아픈 동물 찾기 SELECT,LIKE (0) | 2022.02.02 |
[Programmers] select : 모든 레코드 조회하기,역순 정렬하기 (0) | 2021.07.26 |