푸잉이의 기술블로그
[프로그래머스] 없어진 기록 찾기 & JOIN 총 정리 본문
문제: 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
Table 1. ANIMAL_INS 동물 보호소에 들어온 동물의 정보를 담은 테이블
Table 2. ANIMAL_OUTS 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블
문제 풀기에 앞서 JOIN 개념을 알아야 한다.
#JOIN
JOIN은 크게 2가지로 구분 됨 (INNER, OUTER)
JOIN은 두
테이블의 데이터를
일정한 조건에 의해
연결하여 마치
하나의
테이블처럼 만드는 것
1. INNER JOIN

그림 1.과 같이 INNER JOIN은 교집합을 나타내는 것이다.
조인 될 조건이 부합하는 행 만을 가지고 오는 것
예시)

정보테이블과 성적 테이블에 '공통적'으로 들어 있는 학번을 이용하여 SQL문 작성
<JOIN 명령어>
SELECT * FROM 정보_테이블 AS 정보
INNER JOIN 성적_테이블 AS 성적
ON 정보.학번 = 성적.학번;

결과는 그림 3번과 같이 성적 필드가 합쳐서 나온다.
*주의: 겹치는 칼럽이 존재하는 경우에만 사용 가능
2. OUTER JOIN
기준이 되는 테이블의 모든 정보를 가져오고, INNER JOIN 처럼 공통되는 조건이 없더라도 정보를 모두 가지고 온다.

OUTER JOIN 종류는 3개
1. LEFT OUTER JOIN
2. RIGHT OUTER JOIN
3. FULL OUTER JOIN

1. LEFT OUTER JOIN
기준 테이블 (움직이거나 변형 없음)은 왼쪽
SELECT *
FROM A LEFT OUTER JOIN B
ON A.학번 = B.학번;
결과) 그림 6.

JOIN 기준 왼쪽에 있는 것들 모두 SELECT 되고 학번 3, 4, 5에 해당하는 성적은 없었기 때문에 NULL로 표기
1.1 공통된 부분 뺀 LEFT OUTER JOIN (즉 A-B)
SELECT *
FROM A LEFT OUTER JOIN B
ON A.학번 = B.학번;
WHERE B.성적 IS NULL

2. RIGHT OUTER JOIN
기준 테이블 (움직이거나 변형 없음)은 오른쪽
SELECT B.학번, B.성적, A.이름
FROM A RIGHT OUTER JOIN B
ON A.학번 = B.학번;
결과) 그림 8.

B 테이블에 있는 1, 2, 7, 8, 9번 정보들은 다 SELECT, A에 있는 정보들 비교하여 없으면 NULL
3. FULL OUTER JOIN
기준 테이블 (움직이거나 변형 없음)은 오른쪽
SELECT *
FROM A FULL OUTER JOIN B
ON A.학번 = B.학번;
결과) 그림 9.

공부한 JOIN을 이용하여 코드를 작성

나간 기록은 있지만, 들어온 기록은 없음
-> SELECT 문에서 나간 동물의 ID와 NAME을 출력해야함 (그래야지 있는 기록을 확인)
왼쪽에 나간 기록이 있는 ANIMAL_OUTS 테이블을 사용하여, ANIMAL_INS 의 키가 NULL인 데이터를 찾으면
ANIMAL_OUTS에만 존재하는 데이터를 찾을 수 있다.
'IT > SQL' 카테고리의 다른 글
| [프로그래머스] 입양 시각 구하기 (2) & 변수 선언 (0) | 2022.11.17 |
|---|---|
| [프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2022.11.16 |
| [프로그래머스] 즐겨찾기가 가장 많은 식당 정보 출력하기 (0) | 2022.11.14 |
| 4주차) 엑셀보다 쉬운 SQL #Subquery #Substring #Case (0) | 2022.08.08 |
| 3주차) 엑셀보다 쉬운 SQL #Join #Union (0) | 2022.07.12 |