[SQL] join: ์ธ๋ถ ์กฐ์ธ
๋ด๋ถ ์กฐ์ธ์ด ๋ฌด์กฐ๊ฑด ์ผ์นํ๋ ํ๋ง ํฉ์ณ์ ๋นํ์ด ์๊ฒ ํ๋ค๋ฉด, ์ธ๋ถ์กฐ์ธ์ ์กฐ๊ฑด์ด ์ผ์นํ์ง ์์๋ ํฉ์ณ์ ๋นํ์ด ์ข ์๊ธฐ๋ ๊ธฐ๋ฅ์ด๋ค.
๊ทผ๋ฐ ์ธ๋ถ ์กฐ์ธ์๋ ์ข
๋ฅ๊ฐ 3๊ฐ์ง๋ ์๋ค.
์กฐ์ธ ๊ตฌ๋ฌธ์์ from ์ค๋ฅธ์ชฝ์ ํ
์ด๋ธ์ A, join ์ค๋ฅธ์ชฝ์ ํ
์ด๋ธ์ B๋ผ๊ณ ํ๋ฉด.
A๋ฅผ ์ฐ์ ์ผ๋ก ์ฑ์ฐ๊ณ B๋ง ๋น์นธ์ด ๋ ์ ์๋ ๊ฒ์ด ์ผ์ชฝ(left) ์ธ๋ถ์กฐ์ธ,
B๋ฅผ ์ฐ์ ์ผ๋ก ์ฑ์ฐ๋ ๊ฒ์ด ์ค๋ฅธ์ชฝ(right) ์ธ๋ถ์กฐ์ธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌด์ํ๊ฒ ๊ฐ๋ค๋ฐ๋ ์์ (full) ์ธ๋ถ์กฐ์ธ์ด ์๋ค.
์์๋ฅผ ๋ณด๋ ๊ฒ ์ดํด๊ฐ ๋น ๋ฅด๊ฒ ๋ค.
ํ
์คํธ ํ๊ฒฝ์ postgreSQL์ด๋ค.
๊ทธ๋ฆฌ๊ณ ํ
์ด๋ธ A, B์ ๊ตฌ์กฐ๋ ์๋์ ๊ฐ๋ค.
A๋ ์ด๋ฆ, ์ง์ ์ปฌ๋ผ์ ๊ฐ์ง๋ Worker๋ผ๋ ํ ์ด๋ธ์ด๋ค.


B๋ ์ด๋ฆ, ์ข ๊ต์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ์ข ๊ต์ธ ํ ์ด๋ธ์ด๋ค.


์ผ์ชฝ ์กฐ์ธ
select ... from A left outer join B on ์กฐ๊ฑด์
outer ํค์๋๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
from์ ๋ถ๋ ์ผ์ชฝ ํ
์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๋ณํฉํ๋ ๊ฒ์ด๋ค.
์ผ์ชฝ ํ
์ด๋ธ์ ์ ๋ถ ๊ทธ๋๋ก ์ ์ง๊ฐ ๋๊ณ , ์กฐ๊ฑด์์ด ์ผ์นํ๋ ๋ถ๋ถ์ ํํด์๋ง ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ์ปฌ๋ผ์ ๊ฐ๋ค๋ถํ๋ค.
์ผ์นํ๋ ๊ฒ์ด ์๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ฅ null์ด ๋ค์ด๊ฐ๋ค.
์๋์ ๊ฐ์ด.

์ค๋ฅธ์ชฝ ์กฐ์ธ
select ... from A right outer join B on ์กฐ๊ฑด์
outer ํค์๋๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฅ ์ผ์ชฝ ์กฐ์ธ๊ณผ ๋ฐ๋๋ก, ์ค๋ฅธ์ชฝ ํ
์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ ํ
์ด๋ธ์ ๋ณํฉํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฅ ์์น๋ง ๋ฐ๋๋ ํํ์ ์ฐจ์ด์ง, ๊ธฐ๋ฅ์ ๊ฑฐ์ ๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋ ๋ค.
์์ ์ธ๋ถ์กฐ์ธ
select ... from A full outer join B on ์กฐ๊ฑด์
์ด๊ฑด ์ผ์นํ๋๊ฑด ์ผ๋จ ํ๋์ Row๋ก ์ฐ๊ฒฐํ๊ณ , ๋๋จธ์ง๋ ๋ฌด์ํ๊ฒ ๊ฐ๋ค๋ฐ๋๋ค.
์ด๋ ๊ฒ ๋ง์ด๋ค.
