Join
โข
2๊ฐ ์ด์์ ํ
์ด๋ธ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ๊ฐ์ ธ์ค๋ ๊ฒ
โข
n๊ฐ์ ํ
์ด๋ธ์ joinํ๋ ๊ฒฝ์ฐ์๋ ์ต์ n-1๊ฐ์ ์กฐ์ธ ์กฐ๊ฑด์ด ํ์ํ๋ค
โข
์กฐ์ธ ์กฐ๊ฑด์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ ํ
์ด๋ธ์ PK(Primary Key) ๋ฐ FK(Foreign Key)๋ก ๊ตฌ์ฑ๋๋ค.
Join์ ์ข ๋ฅ
โข
์ฒ๋ฆฌ ๋ฐฉ์์ ๋ฐ๋ผ
โฆ
inner join : ์กฐ์ธ ์กฐ๊ฑด์ ๋ถํฉํ๋ ๋ ์ฝ๋๋ง ํฌํจ
โฆ
outer join : ์กฐ์ธ ์กฐ๊ฑด์ ๋ถํฉ๋์ง ์๋ ๋ ์ฝ๋๋ ํฌํจ
โข
์กฐ์ธ ์ปฌ๋ผ์ ๋ฐ๋ผ
โฆ
natural join : ์กฐ์ธ์กฐ๊ฑด ์๋ต, ๊ณตํต์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ
โฆ
cross join : ์กฐ์ธ์กฐ๊ฑด ์๋ต, ๊ณตํต์ปฌ๋ผ X, ๊ณฑ์ ํํ๋ก ์กฐ์ธ
โข
Self join : ๊ณ์ธตํ ํ
์ด๋ธ์์๋ง ์ฌ์ฉ
JOIN์ ์ฃผ์ํ ์
โข
์กฐ์ธ์ ์ฒ๋ฆฌ๋ ์ด๋ ํ
์ด๋ธ์ ๋จผ์ ์ฝ์์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์(์ฒ๋ฆฌํ ์์
๋์ด ๋ฌ๋ผ์ง)
โข
INNER JOIN : ์ด๋ ํ
์ด๋ธ์ ๋จผ์ ์ฝ์ด๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์์ MySQL ์ตํฐ๋ง์ด์ ๊ฐ ์กฐ์ธ์ ์์๋ฅผ ์กฐ์ ํด์ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ต์ ํ๋ฅผ ์ํํ ์ ์๋ค.
โข
OUTER JOIN : ๋ฐ๋์ OUTER๊ฐ ๋๋ ํ
์ด๋ธ์ ๋จผ์ ์ฝ์ด์ผ ํ๋ฏ๋ก ์ตํฐ๋ง์ด์ ๊ฐ ์กฐ์ธ ์์๋ฅผ ์ ํํ ์ ์๋ค.
MySQL Optimizer
โข
RBO (Rule based optimizer)
โฆ
๋ฌด์กฐ๊ฑด ์ ํด์ง ๊ท์น์ ์ํด์ ์ํ๋จ.
โฆ
๊ณผ๊ฑฐ์๋ hw ์ฑ๋ฅ์ด ์ข์ง ์์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํ ๋น์ฉ ์ฐ์ ์ผ๋ก ์ธํ ๋ถ๋ด์ด ์์์ง๋ง, ์์ฆ์ hw ์ฑ๋ฅ์ ํฅ์์ผ๋ก CBO๋ฅผ ๋ง์ด ์ฑํํจ
โข
CBO (cost based optimizer)
โฆ
optimizer๊ฐ select ๋ฑ ์ํ ๋ฌธ์ฅ์ด ์ฃผ์ด์ง๋ฉด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํ ๋น์ฉ์ ์ฐ์ ํด๋ณด๊ณ ์ ์ ๋น์ฉ์ด ๋ค์ด๊ฐ๋ ์ฒ๋ฆฌ๋ฐฉ๋ฒ ์ ํ
INNER JOIN
โข
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ JOIN์ ์ข
๋ฅ์ด๋ฉฐ ๊ต์งํฉ์ด๋ค.
โข
๋๋ฑ ์กฐ์ธ(Equi-Join)์ด๋ผ๊ณ ๋ ํ๋ฉฐ, N๊ฐ์ ํ
์ด๋ธ ์กฐ์ธ ์ N-1๊ฐ์ ์กฐ์ธ ์กฐ๊ฑด์ด ํ์ํจ
# ํ์
select col1, col2,,,, colN
from table1 INNER JOIN table2
on table1.column = table2.column;
# using์ ์ด์ฉํ join ์กฐ๊ฑด ์ง์
select col1, col2,,,, colN
from table1 INNER JOIN table2
using (column); # using์ ์์๋ table ์ด๋ฆ์ด๋ alias๋ฅผ ๋ช
์ํ๋ฉด error
SQL
๋ณต์ฌ
OUTER JOIN
โข
LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN(MySql์ ์ง์ X)์ผ๋ก ๊ตฌ๋ถ ๋จ
โข
์ด๋ ํ์ชฝ ํ
์ด๋ธ์๋ ํด๋นํ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋๋ฐ ๋ค๋ฅธ ์ชฝ ํ
์ด๋ธ์๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ ๊ทธ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋์ง ์๋ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ
Left Outer Join
โข
์ผ์ชฝ ํ
์ด๋ธ ๊ธฐ์ค์ผ๋ก Join ์กฐ๊ฑด์ ์ผ์นํ์ง ์๋ ๋ฐ์ดํฐ๊น์ง ์ถ๋ ฅ
Right Outer Join
โข
์ค๋ฅธ์ชฝ ํ
์ด๋ธ ๊ธฐ์ค์ผ๋ก Join ์กฐ๊ฑด์ ์ผ์นํ์ง ์๋ ๋ฐ์ดํฐ๊น์ง ์ถ๋ ฅ
Full Outer Join
โข
์์ชฝ ํ
์ด๋ธ์ ๊ธฐ์ค์ผ๋ก Join ์กฐ๊ฑด์ ์ผ์นํ์ง ์๋ ๋ฐ์ดํฐ๊น์ง ์ถ๋ ฅ
โข
MySQL์ ์ง์ํ์ง ์์
# left outer join
select COl1, COL2, COl3
from table1 left outer join table2
on or using;
#right outer join
select COl1, COL2, COl3
from table1 right outer join table2
on or using;
SQL
๋ณต์ฌ
SELF JOIN
โข
๊ฐ์ ํ
์ด๋ธ๋ผ๋ฆฌ joinํ๋ ๊ฒฝ์ฐ
โข
์์ : ๋ชจ๋ ์ฌ์์ ์ฌ๋ฒ, ์ด๋ฆ, ๋งค๋์ ์ฌ๋ฒ, ๋งค๋์ ์ด๋ฆ
select e.employee_id, e.first_name, m.employee_id, m.first_name
from employees e inner join employees m
on e.manager_id = m.employee_id;
SQL
๋ณต์ฌ
None-Equi JOIN
โข
table์ PK, FK๊ฐ ์๋ ์ผ๋ฐ column์ join ์กฐ๊ฑด์ผ๋ก ์ง์
โข
์์ : ๋ชจ๋ ์ฌ์์ ์ฌ๋ฒ, ์ด๋ฆ, ๊ธ์ฌ, ๊ธ์ฌ๋ฑ๊ธ
select e.employee_id, e.first_name, e.salary, s.grade
from employees e join salgrades s
where e.salary between s.losal and s.hisal;
SQL
๋ณต์ฌ