일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스크래핑
- 파이썬클래스
- 미국디리스킹
- 파이썬독학
- 패스트캠퍼스수강후기
- 파이썬온라인수업
- MBTI
- 비트코인
- 스위스기준금리
- 패스트캠퍼스후기
- 노르웨이기준금리
- 파이썬문법
- MBTI성격유형
- 파이썬인강
- 파이썬수업
- 암호화폐
- 비전공자파이썬
- 중국수출통제
- 파이썬배우기
- SQL
- 셀레니움
- 파이썬강의후기
- 순천여행
- 파이썬독학하기
- 파이썬강의
- 광교카페
- MBTI성격검사
- swift문법
- 파이썬 인강
- 파이썬기초
- Today
- Total
이제 데이터 공부 안하는 블로그
조인(LEFT OUTER JOIN, RIGHT OUTER JOIN, INNER JOIN) 본문
LEFT OUTER JOIN
왼쪽 테이블을 기준으로 테이블이 합쳐진다.
아래 그림에는 item 테이블(왼쪽) 과 stock 테이블(오른쪽)이 있다. 이 두개의 테이블을 LEFT OUTER JOIN으로 합쳐보겠다.
SQL문은 이렇게 써주면 된다.
SELECT
item.id,
item.name,
stock.item_id,
stock.inventory_count
FROM item LEFT OUTER JOIN stock
ON item.id = stock.item_id
FROM 테이블 1 LEFT OUTER JOIN 테이블2 -> 이렇게 조인을 원하는 테이블들의 이름을 써주면, 테이블1(왼쪽)을 기준으로 조인 된다
ON item.id = stock.item_id -> item 테이블의 id 컬럼과 stock테이블의 item_id 컬럼을 기준으로 조인하겠다는 말이다.
LEFT OUTER JOIN이 된 모습이다. 그림에서 보는 것과 같이
왼쪽 테이블에 있는 값 중에서 오른쪽 테이블에 없는 값은 NULL로 표현된다.
RIGHT OUTER JOIN
RIGHT OUTER JOIN은 이름에서 알 수 있듯이 오른쪽 테이블을 기준으로 JOIN 한다.
아까의 SQL문에서 LEFT를 RIGHT로 바꿔주기만 하면 된다.
SELECT
item.id,
item.name,
stock.item_id,
stock.inventory_count
FROM item RIGHT OUTER JOIN stock
ON item.id = stock.item_id
그런데 결과를 보니 로우수가 줄어들었고 NULL도 보이지 않는다.
그 이유는 stock 테이블의 item_id컬럼이 item 테이블의 id 컬럼의 foregin key 이기 때문이다.
즉, stock 테이블의 item_id컬럼에 있는 값 중에 item 테이블의 id 컬럼에 없는 값이 없기 때문에 NULL이 생길 수가 없다.
(이것은 Foreign Key를 기준으로 조인해서 그런 것일뿐 꼭 Foreign Key를 기준으로 조인을 해야만 하는 것은 아니다. Foreign Key가 아닌 컬럼을 기준으로 해서 조인할 수 있다.)
INNER JOIN
INNER JOIN은 교집합을 생각하면 된다.
두 테이블을 INNER JOIN하면 기준이 되는 테이블은 따로 없고, item 테이블의 id 컬럼과 stock 테이블의 item_id 컬럼 중 겹치는 것만 조인해서 보여준다.
SELECT
item.id,
item.name,
stock.item_id,
stock.inventory_count
FROM item INNER JOIN stock
ON item.id = stock.item_id
그래서 INNER JOIN을 사용하면 NULL 값은 나오지 않는다.
그리고 하나 더 설명하자면, JOIN 조건을 설정할 때,
ON 대신 USING 도 사용할 수 있다. (만약 조인 조건으로 쓰인 두 컬럼의 이름이 같으면)
SELECT
old.id,
new.inventory_count
FROM item AS old INNER JOIN stock AS new
ON old.id = new.id
이렇게 ON을 사용해도 되지만, 만약 조인 조건으로 쓰인 두 컬럼의 이름이 같으면
SELECT
old.id,
new.inventory_count
FROM item AS old INNER JOIN stock AS new
USING(id)
이렇게 USING을 사용할 수도 있다. ON old.id = new.id 와 USING(id) 은 같은 결과를 보여준다.
'SQL' 카테고리의 다른 글
[SQL 자격검정실전문제-2] 정규화, 반정규화, 대량 데이터, 데이터베이스구조, 분산 데이터 31-52번 (0) | 2021.11.18 |
---|---|
[SQL 자격검정실전문제-1] 데이터모델의 이해, 엔터티, 속성, 관계, 식별자 (0) | 2021.11.18 |
DELETE, TRUNCATE, DROP 의 차이 (0) | 2021.11.08 |
SQL 문장의 종류 (0) | 2021.11.08 |
인덱스 (Clustered 인덱스, Non-clustered 인덱스) (0) | 2021.11.05 |