# union ๋ฐ join์ ์ฌ์ฉํ๋ ์ด์
์ฌ๋ฌ๊ฐ์ง ํ ์ด๋ธ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ์ฌ ์ธ์ฌ์ดํธ๋ฅผ ๋์ถํ๊ธฐ ์ํด์
< union >
# union ํจ์
- ์์ง๊ฒฐํฉ
- ํ์ ๊ฐ์๊ฐ ๋์ด๋๋ค

# ์ธ์ ์ฌ์ฉํ ์ ์๋๊ฐ?
1) ๊ตฌ์ฑ์ด ๊ฐ์๋
2) ๊ตฌ์ฑ์ด ๋ค๋ฅด์ง๋ง ํน์ ์ปฌ๋ผ์ ๊ณตํต ์ปฌ๋ผ์ผ๋ก ๊ฐ์ ธ์ฌ๋
โป ์ฃผ์์
1) ์ด์ ๊ฐฏ์์ ์์๊ฐ ๋ชจ๋ ์ฟผ๋ฆฌ์์ ๋์ผํด์ผ ํ๋ค
2) ๋ฐ์ดํฐ์ ํ์์ด ์ผ์นํด์ผ ํ๋ค
# ๊ธฐ๋ณธ์ ์ธ ์์ฑ๊ตฌ๋ฌธ
select name, goods_nm, pay_date #์ปฌ๋ผ ์์๊ฐ ๊ฐ๊ณ , ๊ทธ ํ์์ด ๊ฐ์์ผ ํจ
from ํ
์ด๋ธ๋ช
1
union (all) #์์ง๊ฒฐํฉ ๋ช
์
select name, goods_nm, pay_date
from ํ
์ด๋ธ๋ช
2
[ ์์ ]


# ์ฐจ์ด์
union -> ์ค๋ณต์ ๊ฑฐ
union all -> ์ค๋ณต์ ์ ๊ฑฐํ์ง ์๊ณ ํ๊ธฐ
< join >
[ ์์ ]

# join
- ์ํ๊ฒฐํฉ
- ์ด์ ๊ฐ์๊ฐ ๋์ด๋๋ค

# ์กฐ์ธ ๋ง๋๋๋ฒ
1) ๊ณตํต์ปฌ๋ผ ์ฐพ๊ธฐ
2) ๊ณตํต์ปฌ๋ผ ๊ด๊ณ์ฐพ๊ธฐ
-> PK์ FK ์ฐพ๊ธฐ
- ๊ฐ ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ ์ข ๋ฅ
1 (๊ธฐ์ค) : 1 (๊ธฐ์ค)
1 (๊ธฐ์ค) : N(๋น๊ต)
N(๋น๊ต) : 1 (๊ธฐ์ค)
PK๋ ๊ธฐ๋ณธํค
FK๋ ์ธ๋ํค์ด๋ค
๋ณดํต์ PK : FK ๊ฐ 1 : N์ธ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค
3) ์ ์ ํ ์กฐ์ธ ๋ฐฉ์ ์ฐพ๊ธฐ


# inner join
[ ํ์ ]
select ์ปฌ๋ผ1, ์ปฌ๋ผ2...
from ํ
์ด๋ธ1 as a
inner join ํ
์ด๋ธ2 as b
on a.๊ณตํต์ปฌ๋ผ=b.๊ณตํต์ปฌ๋ผ
# ์ค๋ช
from ๋ถ๋ถ์ ์๋ ํ ์ด๋ธ a์
inner join ๋ถ๋ถ์ ์๋ ํ ์ด๋ธ b๊ฐ
์กฐ์ธ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง(O/O) ์ถ๋ ฅ๋๋ค
[ ๊ฐ๋จํ ์์ ]
select *
from basic.s1 a
inner join basic.s2 b
on a.name=b.name
[ ๊ฒฐ๊ณผ ]

[ ๋ณต์กํ ์์ ]

select ํ
์ด๋ธ๋ช
1.์ปฌ๋ผa, ....
from( select ์ปฌ๋ผa, ์ปฌ๋ผb ...
from ํ
์ด๋ธ1
)as ํ
์ด๋ธ๋ช
1
inner join #(๋๋ join)
( select ์ปฌ๋ผc, ์ปฌ๋ผd...
from ํ
์ด๋ธ2
)as ํ
์ด๋ธ๋ช
2
on a.๊ณตํต์ปฌ๋ผ=b.๊ณตํต์ปฌ๋ผ
๊ณตํต๋ ์๋ฏธ์ ์ปฌ๋ผ์ผ๋ก, ์ปฌ๋ผ์ด๋ฆ์ด ๊ฐ์ํ์๋ ์์
๊ณตํต์ปฌ๋ผ์ ON ์ ์ ์กฐ๊ฑด์ ์ด ๋๋ฉฐ, ์กฐ๊ฑด์ ์ 1๊ฐ๊ฐ ์๋ ์ ์์ (2๊ฐ์ด์ ๊ฐ๋ฅ)
์ฆ, on a.๊ณตํต์ปฌ๋ผ=b.๊ณตํต์ปฌ๋ผ and a.๊ณตํต์ปฌ๋ผ2=b.๊ณตํต์ปฌ๋ผ2 ๊ฐ ๋ ์ ์์
# left join
[ ํ์ ]
select ์ปฌ๋ผ1, ์ปฌ๋ผ2...
from ํ
์ด๋ธ1 as ํ
์ด๋ธ๋ช
1
left join ํ
์ด๋ธ2 as ํ
์ด๋ธ๋ช
2
on a.๊ณตํต์ปฌ๋ผ=b.๊ณตํต์ปฌ๋ผ
# ์ค๋ช
from์ ์๋ ํ ์ด๋ธ๋ช 1์ ๊ธฐ์ค์ด ๋๋ ํ ์ด๋ธ
์กฐ์ธ์กฐ๊ฑด์ ๋ง์กฑํด๋ / ๋ง์กฑํ์ง ๋ชปํด๋ ๋ชจ๋ ์ถ๋ ฅ๋๋ค
left join์ ์๋ ํ ์ด๋ธ๋ช 2๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ถ๋ ฅ๋๋ ํ ์ด๋ธ
์กฐ์ธ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ง ์ถ๋ ฅ๋๋ค
๋ง์กฑํ์ง ๋ชปํ ์ NULL๊ฐ์ด ์ถ๋ ฅ๋๋ค
ex) ์ ์ ์ค ๊ด๊ณ ๋ก ์ ํ๋ ์ ์ ์ ์ ํ๋์ง ์์ ์ ์ ๋ฅผ ๊ตฌํ๋ ค๊ณ ํ ๋
์ ์ ํ ์ด๋ธ์ ๋ชจ๋ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก left join์์ ์ผ์ชฝ์ ์์นํด์ผ ํ๊ณ
๊ด๊ณ ํ ์ด๋ธ์ ์กฐ๊ฑด๋ง์กฑ์ ์ ์์ถ๋ ฅ๋๊ณ ์กฐ๊ฑด๋ง์กฑํ์ง ์์์ null๊ฐ์ด ์ถ๋ ฅ๋๊ฒ ํ๋ฉด ๋๋ค
[ ์์ ]
select *
from basic.s1 a
left join basic.s2 b
on a.name=b.name
[ ๊ฒฐ๊ณผ ]

[ ๋ณต์กํ ์์ ]

# full outer join
[ ํ์ ]
select ์ปฌ๋ผ1, ์ปฌ๋ผ2,...
from table1 left join table2
on a.๊ณตํต์ปฌ๋ผ=b.๊ณตํต์ปฌ๋ผ
union
select ์ปฌ๋ผ1, ์ปฌ๋ผ2,...
from table1 right join table2
on a.๊ณตํต์ปฌ๋ผ=b.๊ณตํต์ปฌ๋ผ
[ ์์ ]
select *
from basic.s1 as a left join basic.s2 as b
on a.name=b.name
union
select *
from basic.s1 as a right join basic.s2 as b
on a.name=b.name
[ ๊ฒฐ๊ณผ ]

# union๊ณผ join์ ๋น๊ต
SQL ๊ตฌ๋ฌธ ์์ฑ์, ํ์์ ๋ฐ๋ผ ํ๋์ SQL๋ฌธ ์์ UNION ํจ์์ JOIN ํจ์๊ฐ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
ํ
์ด๋ธ๋ค์ ์ด์ ๋ง์ถฐ UNION ์ ํ๊ณ , ๊ฒฐํฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ๊ณตํต์ปฌ๋ผ์ ๊ธฐ๋ฐ์ผ๋ก JOIN ์ ํ ์ ์์ต๋๋ค.
๋ํ ๋ฐ๋๋ก ๊ณตํต์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก JOIN ์ ํ๊ณ , ๊ฒฐํฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ด์ ๋ง์ถ๋ UNION ์ ํ ์ ์์ด์

'Knowledge๐ฆข > SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [SQL] SELF JOIN (ไธ) : ๊ฐ์ ํ ์ด๋ธ์ ์กฐ์ธํ๊ธฐ (1) | 2024.05.07 |
|---|---|
| [SQL] group by๋ฅผ ์ธ๋ ์ฃผ์์ฌํญ (0) | 2024.04.27 |
| [SQL 2ํ์ฐจ] where๊ณผ having์ ์ฐจ์ด์ , ์๋ธ์ฟผ๋ฆฌ, ์ ์์ฌํญ (1) | 2024.04.26 |
| [SQL] WHERE 1=1์ด ๋ญ์ผ? ๋๋์ฒด ์ ์ฐ๋ ๊ฑฐ์ผ? (0) | 2024.04.23 |
| [SQL๊ธฐ์ด] ํ ์ด๋ธ ๊ฐ ์ถ๊ฐ, ์์ , ์ญ์ (0) | 2024.04.21 |