MySQL 8.4 ๊ธฐ์ค
ํ ์ด๋ธ ์ฐธ์กฐ, ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์์ ๊ด๋ จ ์ด์ ๊ธฐ์ค์ผ๋ก ํ์ ๊ฒฐํฉ
SELECT *
FROM table1 JOIN table2
ON table1.id = table2.id

INNER JOIN (๋ด๋ถ ์กฐ์ธ, ์กฐ์ธ, ๊ต์งํฉ)
์กฐ์ธํ๋ ํ ์ด๋ธ์ ON์ ์ ์กฐ๊ฑด์ด ์ผ์นํ๋ ๊ฒฐ๊ณผ๋ง ์ถ๋ ฅ
SELECT *
FROM T_1 A INNER JOIN T_2 B
ON A.KEY = B.KEY
SELECT *
FROM T_1 A JOIN T_2 B
ON A.KEY = B.KEY
SELECT *
FROM T_1 A CROSS JOIN T_2 B
ON A.KEY = B.KEY
-- FROM์ ์ ์ฝค๋ง๋ก ํ
์ด๋ธ ์ฌ๋ฌ๊ฐ ์์ฑ → INNER JOIN
SELECT *
FROM T_1 A, T_2 B
WHERE A.KEY = B.KEY
MySQL์์๋ JOIN, CROSS JOIN, INNER JOIN์ด ๋ฌธ๋ฒ์ ์ผ๋ก ๋์ผ, ๋ชจ๋ ๊ฐ์ ์๋ฏธ
ํ์ค SQL์์๋ INNER JOIN์ ๋ฐ๋์ ON์ ๊ณผ ์ฌ์ฉํด์ผ ํ๊ณ , CROSS JOIN์ ON์ ์์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ฏ๋ก ์๋ก ๋ค๋ฅธ ์๋ฏธ
OUTER JOIN
LEFT [OUTER] JOIN
๋ ํ ์ด๋ธ์ด ํฉ์ณ์ง ๋ LEFT(์ฒซ ๋ฒ์งธ ํ ์ด๋ธ)์ ๊ธฐ์ค์ผ๋ก ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ์กฐํฉ
-- T_1์ ๊ธฐ์ค์ผ๋ก LEFT JOIN
SELECT *
FROM T_1 A LEFT [OUTER] JOIN T_2 B
ON A.KEY = B.KEY
ํ ์ด๋ธ ์์ ๋งค์ฐ ์ค์ !! ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ๋ก SELECT๋ฌธ์ ๊ฐ์ฅ ๋ง์ ์ด์ ๊ฐ์ ธ์์ผ ํ ํ ์ด๋ธ์ ์ฐ์ ์ผ๋ก ์์ฑ
์กฐ์ธ ์์์ LET JOIN์ผ๋ก ํ๋ค๋ฉด ๋๋จธ์ง ์กฐ์ธ๋ LEFT JOIN์ ์ด์ด๊ฐ์ผ ํจ (INNER JOIN์ด๋ ๋ค๋ฅธ ์กฐ์ธ ์ฌ์ฉํ์ง ์์)
RIGHT [OUTER] JOIN
๋ ํ ์ด๋ธ์ด ํฉ์ณ์ง ๋ RIGHT(๋ ๋ฒ์งธ ํ ์ด๋ธ)์ ๊ธฐ์ค์ผ๋ก ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ์กฐํฉ
-- T_2์ ๊ธฐ์ค์ผ๋ก RIGHT JOIN
SELECT *
FROM T_1 A RIGHT [OUTER] JOIN T_2 B
ON A.KEY = B.KEY
N์ค ์กฐ์ธ
-- T_1์ ๊ธฐ์ค์ผ๋ก LEFT JOIN SELECT * FROM T_1 A LEFT JOIN T_2 B ON A.KEY = B.KEY LEFT JOIN T_3 C ON B.KEY = C.KEY
FULL [OUTER] JOIN
SELECT *
FROM T_1 A FULL [OUTER] JOIN T_2 B
ON A.KEY = B.KEY
๋๋ถ๋ถ์ DB๋ FULL OUTER JOIN ์ง์ X
(SELECT * FROM T_1 A LEFT JOIN T_2 B ON A.KEY = B.KEY)
UNION
(SELECT * FROM T_1 A RIGHT JOIN T_2 B ON A.KEY = B.KEY)
LEFT JOIN ํ ์ด๋ธ๊ณผ RIGHT JOIN ํ ์ด๋ธ์ UNION ํฉ์งํฉ
UNION
์ฌ๋ฌ ๊ฐ์ SELECT๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ํ๋์ ํ ์ด๋ธ์ด๋ ๊ฒฐ๊ณผ ์งํฉ์ผ๋ก ํํํ ๋ ์ฌ์ฉ
• ๊ฐ๊ฐ์ SELECT๋ฌธ์ผ๋ก ์ ํ๋ ํ๋์ ๊ฐ์์ ํ์ , ์์๊ฐ ๊ฐ์์ผ ํจ
• DISTINCT ์ค๋ณต ์ ๊ฑฐ ์๋ ํฌํจ → ์ค๋ณต ํฌํจํ๊ณ ์ถ๋ค๋ฉด UNION ALL ์ฌ์ฉ
EXCLUSIVE LEFT/RIGHT JOIN
์ด๋ ํน์ ํ ์ด๋ธ์ ์๋ ๋ ์ฝ๋๋ง ๊ฐ์ ธ์ด
LEFT/RIGHT JOIN๊ณผ WHERE์ ์ ํจ๊ป ์ฌ์ฉ
SELECT *
FROM T_1 A LEFT/RIGHT JOIN T_2 B
ON A.KEY = B.KEY
WHERE B.KEY IS NULL / WHERE A.KEY IS NULL
SELECT * FROM T_1 A LEFT JOIN T_2 B
UNION
SELECT * FROM T_1 A RIGHT JOIN T_2 B
WHERE A.KEY IS NULL OR B.KEY IS NULL
SELF JOIN
ํ ์ด๋ธ ์๊ธฐ์์ ์ ์กฐ์ธ
SELECT *
FROM T_1 A, T_1 B
ON A.COLUMN = B.COLUMN
-- ๊ฐ์ ํ
์ด๋ธ ๋ด์์ ์ด๋ค ๋์ฅ๊ท ์ ID๊ฐ ์ด๋ค ๋์ฅ๊ท ์ PARENT_ID์ ๊ฐ์ผ๋ฉด ์ถ๋ ฅ
SELECT A.ID, COUNT(B.PARENT_ID) AS CHILD_COUNT
FROM ECOLI_DATA A, ECOLI_DATA B
ON A.ID = B.PARENT_ID
GROUP BY A.ID
JOIN ์ค๋ณต ๋ ์ฝ๋ ์ ๊ฑฐ
DISTINCT ์ฌ์ฉ
๊ฐ๋จํ์ง๋ง ๋ ์ฝ๋ ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฑ๋ฅ์ด ๋๋ฆฌ๋ค๋ ๋จ์
SELECT DISTINCT A.ID, B.NAME
FORM T_1 A INNER JOIN T_2 B
ON A.ID = B.ID
JOIN ์ ์ ์ค๋ณต ์ ๊ฑฐ
SELECT A.ID, A.NAME
FROM T_1 A LEFT JOIN (SELECT DISTINCT NAME, ID FROM T_2) AS B
ON A.ID = B.ID
'๐ SQL > ๐' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MAX()์ LIMIT 1 (0) | 2025.02.22 |
|---|---|
| LIKE / REGEXP (0) | 2025.02.20 |
| GROUP BY (0) | 2025.02.19 |
| ์ซ์ ํจ์ (0) | 2025.02.18 |
| ๋ ์ง, ์๊ฐ ํจ์ (0) | 2025.02.17 |