join
๐ ์๋ก ๋ค๋ฅธ 2๊ฐ์ ํ ์ด๋ธ ๋ถ์ฌ์ ํ๋์ ํ ์ด๋ธ ์ฒ๋ผ ๋ณด๋๊ฑฐ.
๐ ๋ถ์ด๋ ค๋ ๊ฐ๊ฐ์ ํ ์ด๋ธ์ ๊ณตํต ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐํ๋ค.
๐ Join์ ์ข ๋ฅ๊ฐ ๋ง์.
๐ Inner Join / Left Join / Right Outer Join / Full Outer Join / Cross Join / Self Join
Inner Join
๐ ๋ ํ ์ด๋ธ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ง ๋ณด์ฌ์ค๋ค.
๐ ํ๋ง๋๋ก ๊ต์งํฉ.
select * from users u
inner join point_users p
on u.user_id = p.user_id
on ์ ์ด์ฉํด์ joinํ๋ค.
๐ ๊ณตํต๋ ์ ๋ณด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ์ฌ์ผ ํ๋๊น ๋ ํ ์ด๋ธ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ ์ ๋ณด์ธ user_id๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถ์ธ๊ฑฐ.
๐ ๋์ u, p ์ด๋ฐ๊ฑฐ๋ alias ์ด๋ค. ์ฆ ๋ณ์นญ.
Left Join
๐ ์ผ์ชฝ ํ ์ด๋ธ ๊ธฐ์ค์ผ๋ก ๋ค๋ฅธ ํ ์ด๋ธ ๋ถ์ธ๋ค๋ ๋ป
๐ ์ผ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์ถ๋ ฅ๋จ.
๐ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด NULL์ ๋ฃ์ด์ ๋ณด์ฌ์ค๋ค.
๐ ์ ๋ณด๊ฐ ์๋ ๊ฒ๊น์ง ํฌํจํด์ ํต๊ณ๋ฅผ ๋ด๊ณ ์ถ์๋ ์ฌ์ฉ.
select * from users u
left join point_users p
on u.user_id = p.user_id
Full Outer Join
๐ ๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ชจ๋ ์ถ๋ ฅ๋๋ค
๐ Right Join ๊ณผ Left Join ์ ๊ฒฐ๊ณผ๋ฅผ ํฉ์งํฉ ํ ๊ฒ๊ณผ ๊ฐ๋ค.
๐ Outer ํค์๋ ์๋ต ๊ฐ๋ฅํ๋ค.
๐ ์ค๋ณต๋๋ ํค์๋๋ ์ญ์ ํจ.
FULL OUTER JOIN ์ ๋ํ ๋ด์ฉ ์๋์์ ๊ฐ์ ธ์ด
https://limkydev.tistory.com/144
join ์ ๋๋ฒ ํด์ผํ ๋
select * for courses co
inner join checkins ch on co.course_id = ch.course_id
inner join orders o on ch.user_id = o.user_id
NULL ์ ๊ฐ๋ง ์ทจํ๊ธฐ
๐ where ํ๋๋ช is NULL
select * from users u
left join point_users pu
on pu.user_id = u.user_id
where pu.point_user_id is null
NULL ์ด ์๋ ๊ฐ๋ง ์ทจํ๊ธฐ.
๐ where ํ๋๋ช is not NULL
โโโโโ
where ํ๋๋ช = NULL ๐ ๋ฐ์ดํฐ๊ฐ ๋์ค์ง ์๋๋ค.
select * from users u
left join point_users pu
on pu.user_id = u.user_id
where pu.point_user_id is not null
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL DATEDIFF( ) / TIMESTAMPDIFF( ) / case when then else end (1) | 2023.09.24 |
---|---|
SQL Subquery / with table1 as / distinct (0) | 2023.09.24 |
sql ๊ธฐ์ด + group by / order by / where ์ค๋ณต (0) | 2023.09.23 |
SQL limit / distinct / count (0) | 2023.09.20 |
SQL where/ between and / like '%' / in() / != ์ด๊ฑฐ ์ ์ธํ๊ณ ๋ณด์ฌ์ค (0) | 2023.09.20 |