1. ๊ฐ๋ ๐ช
๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋์ ํ ์ด๋ธ์ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์ง ์๊ณ ๋ช ๊ฐ์ ํ ์ด๋ธ๋ก ๋๋์ด ์ ์ฅํ๋ค. ์ด์ฒ๋ผ ์ฌ๋ฌ ๊ฐ๋ก ๋๋์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ด๊ธฐ ์ํ์ฌ JOIN์ ์ฌ์ฉํ๋ค.
JOIN์ ํฌ๊ฒ
- INNER JOIN
- OUTER JOIN
- SELF JOIN
์ผ๋ก ๋๋์ด์ง๋ค. ํ๋์ฉ ์ดํด๋ณด๋๋ก ํ์.
2. INNER JOIN ๐ซ
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ JOIN์ ์ข ๋ฅ์ด๋ฉฐ ๊ต์งํฉ์ ํํํ๋ค.
INNER JOIN์ ์ด๋ ํ ์ด๋ธ์ ๋จผ์ ์ฝ๋ ์กฐ์ธ ๊ด๊ณ์ ๋ถํฉ๋๋ ๋ ์ฝ๋๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ฒ ๋๋ค. ์กฐ์ธ์ ์์๊ฐ ์ค์ํ์ง ์๋ค. INNER JOIN์ ์๋์ 4๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ํํํ ์ ์๋ค.
1. ON ์ฌ์ฉ
SELECT a.a1, b.b1
FROM a_table a
INNER JOIN b_table b ON a.a3 = b.b3
2. USING ์ฌ์ฉ
SELECT a.a1, b.b1
FROM a_table a
INNER JOIN b_table b USING (๊ณตํตcolumn)
๊ผญ ๊ดํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ USING์์ ๊ณตํตcolumn์ ๋ช ์ํ ๋ a.๊ณตํตcolumn๊ณผ ๊ฐ์ด alias๋ฅผ ๋ช ์ํ๋ฉด ์ ๋๋ค.
3. NATURAL JOIN ์ฌ์ฉ
SELECT a.a1, b.b1
FROM a_table a
NATURAL JOIN b_table b
์ด๋, ๊ณตํตcolumn์ด ํ๋์ฌ์ผ๋ง ํ๋ค. ๋ ๊ฐ ์ด์์ด๋ฉด ์๋๋ค.
4. ์ฝค๋ง(,) ์ฌ์ฉ
SELECT a.a1, b.b1
FROM a_table a, b_table b
WHERE a.a3 = b.b3
3. OUTER JOIN ๐ฆฅ
OUTER JOIN์ ๋ ํ ์ด๋ธ์ด ํฉ์ณ์ง ๋ ๊ธฐ์ค(์ผ์ชฝ ํ ์ด๋ธ ๋๋ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ)์ ๋ฐ๋ผ์ ๊ธฐ์ค ํ ์ด๋ธ์ด ๋ชจ๋ ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค. INNER JOIN๊ณผ ๋ฌ๋ฆฌ OUTER JOIN์ ์์๊ฐ ์ค์ํ๋ค. ์ด๋ค ์์๋ก ํ ์ด๋ธ์ ์กฐ์ธํ ์ง์ ๋ฐ๋ผ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ์กฐํ๋๋ ํ์ ๊ฐ์์ ๊ตฌ์ฑ์ด ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ํ์ชฝ ํ ์ด๋ธ์ ํด๋นํ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋๋ฐ ๋ค๋ฅธ ์ชฝ ํ ์ด๋ธ์๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ ๊ทธ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋์ง ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. OUTER JOIN์ ์๋์ ๊ฐ์ด 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค. (ON๊ณผ USING์ด ๋ ๋ค ์ฌ์ฉ๊ฐ๋ฅํ๋ฏ๋ก ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์ฌ์ฉํ๊ฒ ๋ค.)
1. LEFT OUTER JOIN
SELECT a.a1, b.b1
FROM a_table a
LEFT OUTER JOIN b_table b ON a.a3 = b.b3
2. RIGHT OUTER JOIN
SELECT a.a1, b.b1
FROM a_table a
RIGHT OUTER JOIN b_table b USING (๊ณตํตcolumn)
3. FULL OUTER JOIN
SELECT a.a1, b.b1
FROM a_table a
FULL OUTER JOIN b_table b ON a.a3 = b.b3
ํ์์ ์์ ๊ฐ์ง๋ง ๋๋ถ๋ถ์ DB๋ FULL OUTER JOIN์ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก UNION์ ์ฌ์ฉํ์ฌ ์๋์ ๊ฐ์ด ๊ตฌํํด์ผ ํ๋ค.
(SELECT a.a1, b.b1
FROM a_table a
LEFT OUTER JOIN b_table b ON a.a3 = b.b3)
UNION
(SELECT a.a1, b.b1
FROM a_table a
RIGHT OUTER JOIN b_table b ON a.a3 = b.b3)
UNION์ DISTINCT๋ฅผ ์๋์ผ๋ก ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํด ์ค๋ค.
4. SELF JOIN ๐ฆ
SELF JOIN์ ์๊ธฐ ์์ ๊ณผ JOIN์ ํ๋ ๊ฒ์ด๋ค. ์ฌ์ ํ ์ด๋ธ์์ ์ฌ์์ ์ด๋ฆ๊ณผ ์ง์ ์์ฌ์ ์ด๋ฆ์ ์ป๋ ๊ฒฝ์ฐ์์ ์ฌ์ฉ๋๋ค.
SELECT e.name AS ์ฌ์, m.name AS ์ง์ ์์ฌ
FROM employees e
INNER JOIN employees m ON e.manager_id = m.employee_id
ON ์กฐ๊ฑด์์ ํ์ธํ ์ ์๋ฏ์ด ๋น๋ก ์ปฌ๋ผ ์ด๋ฆ์ด ๊ฐ๋๋ผ๋ ๋ค๋ฅธ ์ปฌ๋ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ USING์ ์ฌ์ฉํ์ง ์๋๋ก ์ฃผ์ํ์.
ํด๋น ๊ธ์
Inpa ๋์ '[MYSQL] ํ ์ด๋ธ ์กฐ์ธ(JOIN) - ๊ทธ๋ฆผ์ผ๋ก ์๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ',
์์ฌ์ด ์์ธ ์ ๋์ 'SQL ์ฒซ๊ฑธ์'
์ ์ฐธ๊ณ ํ์์ต๋๋ค.
'๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค > ๊ฐ๋ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ ์ ๊ฒฉ๋ฆฌ ์์ค (Transaction Isolation Level) (1) | 2023.06.18 |
---|---|
ํธ๋์ญ์ (Transaction) (0) | 2023.06.17 |
[DB] ๋ฐ์ดํฐ๋ฒ ์ด์ค ํค(Key) ๊ฐ๋ & ํค(Key) ์ข ๋ฅ (0) | 2023.06.13 |
์๋ธ์ฟผ๋ฆฌ(Subquery) (0) | 2023.04.18 |
๋ทฐ(VIEW) (0) | 2023.04.17 |