JOIN
์ 2๊ฐ ์ด์์ ํ
์ด๋ธ๋ค์ mergeํ๋๋ฐ ์ฌ์ฉ๋๋ค. ๋จ, ๊ณตํต๋ ํ๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๊ณ ์ด ๊ณตํต๋ ํ๋๋ฅผ ์ฐ๊ฒฐํจ์ผ๋ก์จ JOIN
์ด ์ด๋ฃจ์ด์ง๋ค.
Star schema
๋ก ๊ตฌ์ฑ๋ ํ
์ด๋ธ๋ค๋ก ๋ถ์ฐ๋์ด ์๋ ์ ๋ณด๋ฅผ ํตํฉํ๋๋ฐ ์ฌ์ฉ๋๋ค.
์ผ์ชฝ ํ ์ด๋ธ์ LEFT๋ผ๊ณ ํ๊ณ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ RIGHT์ด๋ผ๊ณ ํ ๋, JOIN์ ๊ฒฐ๊ณผ๋ ๋ฐฉ์์ ์๊ด์์ด ์์ชฝ์ ํ๋๋ฅผ ๋ชจ๋ ๊ฐ์ง ์๋ก์ด ํ ์ด๋ธ์ ๋ง๋ค์ด๋ด๊ฒ ๋๋ค.
์กฐ์ธ์ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค์ ๋ ๊ฐ์ง๊ฐ ๋ฌ๋ผ์ง๋ค:
1. ์ด๋ค ๋ ์ฝ๋๋ค์ด ์ ํ๋๋์ง?
2. ์ด๋ค ํ๋๋ค์ด ์ฑ์์ง๋์ง?
____
์ JOIN ์ข
๋ฅ์ธ INNER
, FULL
, LEFT
, RIGHT
, CROSS
๊ฐ ๋ค์ด๊ฐ ์ ์๋ค.
SELECT A.*, B.*
FROM raw_data.table1 A
____ JOIN raw_data.table2 B ON A.key1 = B.key1 and A.key2 = B.key2
WHERE A.ts >= '2019-01-01';
์์ชฝ ํ ์ด๋ธ์์ ๋งค์น๊ฐ ๋๋ ๋ ์ฝ๋๋ค๋ง ๋ฆฌํดํ๋ค. ์ฆ, A์ key๊ฐ B์๋ ์๋ ํญ๋ชฉ๋ค๋ง ๋ฆฌํด๋๋ค.
SELECT <select_list>
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key
์ผ์ชฝ ํ
์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ค์ ๋ฆฌํดํ๋ค.
๋งค์นญ์ด ๋๋ ๊ฒฝ์ฐ์๋ง ์์ชฝ ํ
์ด๋ธ๋ค์ ๋ชจ๋ ํ๋๋ค์ด ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋๊ณ ์๋๋ผ๋ฉด NULL
๊ฐ์ผ๋ก ๋์ฒด๋์ด ๋ฆฌํด๋๋ค.
SELECT <select_list>
FROM Table_A A
FULL JOIN Table_B B
ON A.Key = B.Key
์์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ๋ฆฌํดํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ON
์ผ๋ก ๋งค์นญํ ํ๋๋ฅผ ์ค์ ํด ์ค ํ์๊ฐ ์๋ค.
SELECT <select_list>
FROM Table_A A
CROSS JOIN Table_B B
์ผ์ชฝ ํ
์ด๋ธ(Base๊ฐ ๋๋ ํ
์ด๋ธ)์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ฆฌํดํ๋ค. ์กฐ์ธํ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ํ๋๋ ์ผ์ชฝ ๋ ์ฝ๋์ ๋งค์นญ๋๋ ๊ฒฝ์ฐ์๋ง ์ฑ์์ง ์ํ๋ก ๋ฆฌํด๋๋ค. (์๋๋ผ๋ฉด NULL
๋ก ์ฑ์์ง)
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
LEFT JOIN
๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ฐ Base ํ
์ด๋ธ๋ง ์ค๋ฅธ์ชฝ ํ
์ด๋ธ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค.
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
๋์ผํ ํ ์ด๋ธ์ 2๊ฐ๋ฅผ alias๋ฅผ ๋ฌ๋ฆฌํ์ฌ ์กฐ์ธํ๋ค.
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;
True
ํน์ False
๊ฐ์ ๊ฐ์ง๋ ๋ฐ์ดํฐํ์ด๋ค. ํ์ง๋ง NULL ๊ฐ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ ๊ฑธ ๋ ์ฃผ์ํด์ผํ๋ค.
flag = True
flag IS True
flag IS True
flag IS NOT False
์ด์ ๋ flag๊ฐ NULL ๊ฐ์ผ ๊ฒฝ์ฐ IS NOT False
์กฐ๊ฑด์ ๋ค์ด๊ฐ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅด๊ฒ ๋๋ค.
NULL
๋น๊ต๋ ํญ์ IS
ํน์ IS NOT
์ผ๋ก ์ํํด์ผ ํ๋ค.
!=
์ด๋ <>
์ผ๋ก ์ํํ๋ฉด ์๋ชป๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.
COALESCE(exp1, exp2, exp3,...)
exp1
๋ถํฐ ์ธ์๋ฅผ ํ๋์ฉ ์ดํด์ NULL์ด ์๋ ๊ฐ์ด ๋์ค๋ฉด ๊ทธ๊ฑธ ๋ฆฌํดํ๋ค.
์ธ์๋ฅผ ๋ชจ๋ ์ดํ๋๋ฐ๋ ๋ชจ๋ NULL์ด๋ผ๋ฉด ์ต์ข
์ ์ผ๋ก NULL์ ๋ฆฌํดํ๋ค.
SELECT
value,
COALESCE(value, 0) -- value๊ฐ NULL์ด๋ฉด 0์ ๋ฆฌํดํ๋ค.
FROM raw_data.count_test
""
๋ก ๋๋ฌ์ธ์ ์ฌ์ฉํ๋ค.
CREATE TABLE test (
group int primary key,
'mailing address' varchar(32)
)
Colab ๋งํฌ : https://colab.research.google.com/drive/1w9xDcgagtxKAD1n5cmtO8-LKL_ujc1B8
์ฐธ๊ณ :
https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
https://www.w3schools.com/mysql/