์ค๋ฌด์์ ํ์๋ก ์ฐ์ด๋ JOIN ์ ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ฒ ๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ INNER ์กฐ์ธ OUTER ์กฐ์ธ์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ์์๋ณด์..
INNER JOIN ์ด๋? LEFT OUTER JOIN ์ด๋? .. ๋งค๋ฒ JOIN์ ์ ๊ณต๋ถํ ๋๋ง๋ค ์ดํดํ๋ค๊ณ ์๊ฐํ์ง๋ง ๋ง์ ์ค๋ฌด์์ ์์ฉํ๋ ค๊ณ ํ๋ฉด ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๊ธฐ๊ฐ ์ผ์ค์ด๋ค.........ํํ
[์์ ํ ์ด๋ธ]

์ค๋์ ์์ ๋ก ์ฐ์ผ ๊ฐ์ดํ ์ด๋ธ์ด๋ค. FOOD ํ ์ด๋ธ!
๐ฑ1. INNER ์กฐ์ธ
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ํํ ๋งค์นญ๋ ํ๋ค๋ง ์ถ์ถํ๋ค. (A์ B์ ๊ต์งํฉ์ ์๋ฏธ)
INNER JOIN์ DEFAULT ์ต์ ์ผ๋ก ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ค๋ง ๋ฐํํ๋ฉฐ INNERํค์๋๋ฅผ ์๋ต ๊ฐ๋ฅํ๋ค.
CROSS JOIN, OUTER JOIN ๊ณผ๋ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.

[SQL ์์]
SELECT *
FROM FOOD_A A
INNER JOIN FOOD_B B
ON A.FOODNM = B.FOODNM;
[๊ฒฐ๊ณผ]

SELECT *
FROM FOOD_A A
JOIN FOOD_B B
ON A.FOODNM = B.FOODNM;
๋๋
SELECT A.* B.*
FROM FOOD_A A
JOIN FOOD_B B
ON A.FOODNM = B.FOODNM;
์ด๋ฐ ์์ผ๋ก๋ ์ฐ์ผ ์ ์๋ค!!
๐ฑ2. OUTER ์กฐ์ธ
๐ธ(1). LEFT OUTER JOIN
A LEFT OUTER JOIN B ์ผ ๊ฒฝ์ฐ, A๋ ๋ชจ๋ ๋ค ์ถ์ถํ๊ณ B๋ A์ ์กด์ฌํ๋(๋งคํ๋๋) ํ๋ค๋ง ์ถ์ถํ๋ค.
(A๊ฐ ๊ธฐ์ค์ด ๋จ!!)
A์ ์๋ B๊ฐ๋ง ๊ฐ์ ธ์จ๋ค. A์๋ ์๋๋ฐ B์๋ ์๋ ๊ฒฝ์ฐ NULL์ฒ๋ฆฌ

[SQL ์์]
SELECT *
FROM FOOD_A A
LEFT OUTER JOIN FOOD_B B
ON A.FOODNM = B.FOODNM;
[๊ฒฐ๊ณผ]

๐ธ(2). LEFT OUTER JOIN – (LEFT ONLY)
A์ ์ ์ฒด๋ฅผ ์ถ์ถํ๋, ๋ง์ผ B์ ๋งคํ ๋๋ ๊ฒ์ด ์๋ค๋ฉด ๊ทธ๊ฑฐ๋ ์ ์ธํ๊ณ ์ถ์ถํ๋ ๊ฒ.
์ค๋ก์ง ๊ฒน์น๋๊ฑฐ ์์ด ํ๋ก ์๋ A์ ๋ฐ์ดํฐ๋ง ๋ฝ๊ณ ์ ํ ๋!

[SQL ์์]
SELECT *
FROM FOOD_A A
LEFT OUTER JOIN FOOD_B B
ON A.FOODNM = B.FOODNM
WHERE B.ID IS NULL;
[๊ฒฐ๊ณผ]

๐ธ(3). RIGHT OUTER JOIN
A RIGHT OUTER JOIN B ๋ฅผ ํ๊ฒ ๋๋ฉด B๋ฅผ ๊ธฐ์ค์ผ๋ก A์ ์กฐ์ธํ๋ค. (๊ธฐ์ค์ด ๋๋ ํ ์ด๋ธ์ RIGHT๋๊น ์ค๋ฅธ์ชฝ์ ์๋ ’B’๊ฐ ๋๋ ๊ฒ!)

[SQL ์์]
SELECT *
FROM FOOD_A A
RIGHT OUTER JOIN FOOD_B B
ON A.FOODNM = B.FOODNM;
[๊ฒฐ๊ณผ]

๐ธ(4). RIGHT OUTER JOIN – (RIGHT ONLY)
A RIGHT OUTER JOIN B ์ผ ๋,
๊ธฐ์ค์ด ๋๋ B์ ๋ชจ๋ ๋ฐ์ดํฐ ์ค A์ ์๋ ๋ฐ์ดํฐ๋ง ์ถ์ถํ๋ค.

[SQL ์์]
SELECT *
FROM FOOD_A A
RIGHT OUTER JOIN FOOD_B B
ON A.FOODNM = B.FOODNM
WHERE A.ID IS NULL;
[๊ฒฐ๊ณผ]

ref : https://cceeun.tistory.com/189
=======================================================================
๐ฑ1. JOIN์ด๋
๋๊ฐ ์ด์์ ํ
์ด๋ธ์ ๊ฒฐํฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
์์ ์ด ๊ฒ์ํ๊ณ ์ถ์ ๋ฐ์ดํฐ๊ฐ ํ๊ฐ์ ํ ์ด๋ธ์ด ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ํ ์ด๋ธ์ ๋๋์ด์ ธ ์๋ค๋ฉด ๊ฐํ ์ด๋ธ์ ์ปฌ๋ผ์ ํ๊ฐ์ฉ ๊ฐ์ ธ์์ ๊ทธ ์ปฌ๋ผ์ ์ ์ ์ผ๋ก ์ด์ฉํ์ฌ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋๋์ด์ ธ ์๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๊ฒ์ํ๋๋ฐ์ ๋ณดํต ์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ์ปฌ๋ผ์ Primary Key ํน์ Foreign Key๋ก ๋ ํ ์ด๋ธ์ ์ฐ๊ฒฐํฉ๋๋ค. ๋ฌผ๋ก ๋ ์ปฌ๋ผ์ ์ ์ ์ผ๋ก ๋น๊ตํ๊ธฐ ์ํด์๋ ๊ฐ์ ๋ฐ์ดํฐํ์ ์ ์ฌ์ฉํ๋ ์ปฌ๋ผ์ด์ด์ผ ํ๋ ๊ฒ์ ๋น์ฐํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ๋ฐ์ดํฐ๋ฅผ ํ๊ฐ์ ํ
์ด๋ธ์ ๋ฃ์ง ์๊ณ ๋๊ฐ์ ํ
์ด๋ธ์ ๋๋์ด์ ๋ฃ์ ํ์ Join์ด๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋์ง ์๊ฐํด ๋ณผ ํ์๊ฐ ์์ต๋๋ค.
์๋์ ํ ์ด๋ธ์ ๊ฒ์ํ์ DBํ ์ด๋ธ์ด๋ผ๊ณ ๊ฐ์ ์ ํ๊ณ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ๊ฒฝ์ฐ์ ๋ง์ฝ ์์ฑ์์ ๋์ด๊ฐ ์ด๋ ํ ์ด์ ๋ก ๋ณ๊ฒฝ์ด ๋์๋ค๋ฉด ํ ์ด๋ธ์ ์์ฑ์ ์ด๋ฆ์ ์ ๋ถ ์์ ํด ์ฃผ์ด์ผ ํ ๊ฒ์ ๋๋ค.
๋ง์ฝ ๊ฒ์๊ธ์ด 100๋ง๊ฐ ๋ผ๋ฉด 100๋ง๊ฐ๋ฅผ ๋ชจ๋ ์์ ์ ํด์ค์ผ๋ง ํฉ๋๋ค.
| ๊ฒ์๊ธ์ ๋ชฉ | ๊ฒ์๊ธ๋ด์ฉ | ์์ฑ์ID | ์์ฑ์๋์ด |
| ์๊ธฐ์๊ฐ | ์ค๋ต... | zozo123 | 24 |
| Join ์ฌ์ฉ๋ฒ | ์ค๋ต... | zozo123 | 24 |
| ํด์ธ์ฌํ ํ๊ธฐ | ์ค๋ต... | zozo123 | 24 |
ํ์ง๋ง ์๋์ฒ๋ผ ๊ฒ์ํ์ ํ ์ด๋ธ๊ณผ ํ์์ ํ ์ด๋ธ์ด ๋ฐ๋ก ๋ถ๋ฆฌ๋์ด ์๋ค๋ฉด ์ด๋จ๊น์?
๊ฒ์ํ์ ๋ฐ์ดํฐ์์ด ์ผ๋ง๊ฐ ๋์๋๊ฐ์ ํ์ํ ์ด๋ธ์์ ํ๋ฒ๋ง ์ด๋ฆ์ ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ฉ๋๋ค.
๋ง์ฝ ๊ฒ์ํ์์ ๊ฒ์๊ธ ์์ฑ์์ ๋์ด๋ ์ด๋ฆ์ ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค๋ฉด ์์ฑ์ ์์ด๋์ ์ปฌ๋ผ์ ์ด์ฉํด์ JOIN์ ํด์ฃผ๋ฉด ์ผ๋ง๋ ์ง ๋์ด์ ์ด๋ฆ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ๊ด๊ณํ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ JOIN์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ JOIN์๋ ์ด๋ค ์ข ๋ฅ๊ฐ ์๋์ง ์๋์์ ํ๊ฐ์ง์ฉ ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก LEFT JOIN๊ณผ INNER JOIN ์ด ๋๊ฐ์ง๋ฅผ ์ ๋์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๊ณ ๋๋จธ์ง๋ ์ฌ์ฉ๋น๋๊ฐ ์ ์ ํธ์ ๋๋ค.
| ๊ฒ์๊ธ์ ๋ชฉ | ๊ฒ์๊ธ๋ด์ฉ | ์์ฑ์ID |
| ์๊ธฐ์๊ฐ | ์ค๋ต... | zozo123 |
| Join ์ฌ์ฉ๋ฒ | ์ค๋ต... | zozo123 |
| ํด์ธ์ฌํ ํ๊ธฐ | ์ค๋ต... | zozo123 |
| ID | ๋์ด | ์ด๋ฆ |
| zozo123 | 24 | ํ๊ธธ๋ |
| sata3000 | 27 | ์ด์์ |
๐ฑ2. LEFT JOIN

์ฒซ๋ฒ์งธ๋ก ์ดํด๋ณผ JOIN์ LEFT JOIN์ ๋๋ค. ์ฐธ๊ณ ๋ก LEFT OUTER JOIN์ ์ค์ฌ์ฐ๋ฉด LEFT JOIN์ด ๋ฉ๋๋ค.
LEFT JOIN๋ง๊ณ ๋ RIGHT JOIN๋ ์์ง๋ง ์ฌ์ค์ LEFT JOIN๊ณผ ๋ฐฉํฅ๋ง ๋ค๋ฅผ ๋ฟ ๊ฐ์ ๊ฐ๋ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
LEFT JOIN์ ํ ์คํธ ํด๋ณด๊ธฐ ์ํด ์๋์ ํ ์ด๋ธ์ ๋ง๋ค์ด ๋ดค์ต๋๋ค.
๊ฒ์ํ ์ํ ํ ์ด๋ธ(bbs)
| bbs_seq | title | description | id_seq |
| 1 | Oracle | Oracle is... | 1 |
| 2 | MySql | MySql is... | 1 |
| 3 | MariaDB | MariaDB is... | 2 |
| 4 | Cubrid | Cubrid is... | NULL |
์์ด๋ ์ํ ํ ์ด๋ธ(id)
| id_seq | id | name | profile_seq | |
| 1 | star23 | ํ๊ธธ๋ | 1 | |
| 2 | zozo11 | ์ด์์ | 2 | |
| 3 | haha600 | ๊ฐ๊ฐ์ฐฌ | 3 | |
์์์ ๋ง๋ ํ ์ด๋ธ ๋๊ฐ๋ฅผ ์ด์ฉํ์ฌ LEFT JOIN์ ์๋์ ์ฟผ๋ฆฌ๋ฌธ์ฒ๋ผ ์คํํด ๋ดค์ต๋๋ค.
๊ฐ ํ ์ด๋ธ์ id_seq์ปฌ๋ผ์ ์ด์ฉํ์ฌ JOIN์ ํ๊ณ LEFT JOIN์ด๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ ์์นํ IDํ ์ด๋ธ์ด ๊ธฐ์ค์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์ IDํ ์ด๋ธ์๋ ์์ง๋ง BBS์๋ ์๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ IDํ ์ด๋ธ์ ์ ๋ณด๋ ๊ทธ๋๋ก ์ถ๋ ฅ๋๊ณ Bํ ์ด๋ธ์ ์ปฌ๋ผ๋ค์๋ NULL๊ฐ์ด ๋ค์ด๊ฐ์ฑ๋ก ์ถ๋ ฅ์ด ๋ฉ๋๋ค.
SELECT * FROM BBS A
LEFT JOIN ID B
ON A.ID_SEQ = B.ID_SEQ
| bbs_seq | title | description | A.id_seq | B.id_seq | id | name | profile_seq |
| 1 | Oracle | Oracle is... | 1 | 1 | star23 | ํ๊ธธ๋ | 1 |
| 2 | MySql | MySql is... | 1 | 1 | star23 | ํ๊ธธ๋ | 1 |
| 3 | MariaDB | MariaDB is... | 2 | 2 | zozo11 | ์ด์์ | 2 |
| 4 | Cubrid | Cubrid is... | NULL | NULL | NULL | NULL | NULL |
์ด๋ฐ์์ผ๋ก JOINํ์ WHERE์ ๋ก ์กฐ๊ฑด์ ์ค์๋ ์์ต๋๋ค.
SELECT * FROM BBS A
LEFT JOIN ID B
ON A.ID_SEQ = B.ID_SEQ
WHERE B.ID_SEQ IS NULL
| bbs_seq | title | description | A.id_seq | B.id_seq | id | name | profile_seq |
| 4 | Cubrid | Cubrid is... | NULL | NULL | NULL | NULL | NULL |
๐ฑ3. INNER JOIN

๋๋ฒ์งธ๋ก ์ดํด๋ณผ JOIN์ INNER JOIN์ ๋๋ค. ์ฐธ๊ณ ๋ก INNER JOIN์ NULL๊ฐ์ด ์์ต๋๋ค.
JOINํ๋ ๋ ํ ์ด๋ธ ๋ชจ๋์์ ์กด์ฌํ๋ ๊ฐ๋ง ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
LEFT JOIN์์ ์ดํด๋ดค๋ ์์์ ํ ์ด๋ธ์ ์ด์ฉํด์ INNER JOIN์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์๋๋ ๋งจ์์ชฝ์์๋ ์ํํ ์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ ๋ง๋ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ฟผ๋ฆฌ๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ๋๋ค.
SELECT * FROM BBS A
INNDER JOIN ID B
ON A.ID_SEQ = B.ID_SEQ
| bbs_seq | title | description | A.id_seq | B.id_seq | id | name | profile_seq |
| 1 | Oracle | Oracle is... | 1 | 1 | star23 | ํ๊ธธ๋ | 1 |
| 2 | MySql | MySql is... | 1 | 1 | star23 | ํ๊ธธ๋ | 1 |
| 3 | MariaDB | MariaDB is... | 2 | 2 | zozo11 | ์ด์์ | 2 |
๐ฑ4. FULL OUTER JOIN

์ธ๋ฒ์งธ๋ก ์ดํด๋ณผ JOIN์ FULL OUTER JOIN์ ๋๋ค.
์ฐธ๊ณ ๋ก FULL OUTER JOIN์ ์ง์ํ์ง ์๋ DB๊ฐ ๋ง์ต๋๋ค. FULL OUTER JOIN๋ฅผ ์ง์ํ์ง ์๋ DB์์๋ UNION ํจ์๋ฅผ ์ฌ์ฉํด์ FULL OUTER JOIN์ ๋์ฒดํ์ฌ ์ฌ์ฉํฉ๋๋ค.
์๋๋ ๋งจ์์ชฝ์์๋ ์ํํ ์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ ๋ง๋ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ฟผ๋ฆฌ๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ๋๋ค.
SELECT * FROM BBS A
FULL OUTER JOIN ID B
ON A.ID_SEQ = B.ID_SEQ
| bbs_seq | title | description | A.id_seq | B.id_seq | id | name | profile_seq |
| 1 | Oracle | Oracle is... | 1 | 1 | star23 | ํ๊ธธ๋ | 1 |
| 2 | MySql | MySql is... | 1 | 1 | star23 | ํ๊ธธ๋ | 1 |
| 3 | MariaDB | MariaDB is... | 2 | 2 | zozo11 | ์ด์์ | 2 |
| 4 | Cubrid | Cubrid is... | NULL | NULL | NULL | NULL | NULL |
| 5 | NULL | NULL | NULL | 3 | haha600 | ๊ฐ๊ฐ์ฐฌ | 3 |
๐ฑ5. EXCLUSIVE JOIN
๋ง์ง๋ง์ผ๋ก ์ดํด๋ณผ JOIN์ EXCLUSIVE JOIN์ ๋๋ค.
EXCLUSIVE JOIN๋ ๋ง์ฝ ํ ์ด๋ธ ๋๊ฐ๋ฅผ JOINํ๋ค๋ฉด ๋์ค ํ๊ฐ์ง ํ ์ด๋ธ์๋ง ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
๋ค๋ฅธ JOIN๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ณ๋์ EXCLUSIVE JOINํจ์๊ฐ ์๋ ๊ฒ์ ์๋๊ณ ๊ธฐ์กด์ LEFT JOIN๊ณผ Where์ ์ ์กฐ๊ฑด์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋ง๋๋ JOIN์ ๋๋ค.
์๋๋ ๋งจ์์ชฝ์์๋ ์ํํ ์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ ๋ง๋ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์ฟผ๋ฆฌ๋ฌธ์ ๋ํ ๊ฒฐ๊ณผ๊ฐ์ ๋๋ค.
SELECT * FROM BBS A
LEFT JOIN ID B
ON A.ID_SEQ = B.ID_SEQ
WHERE B.ID_SEQ IS NULL
| bbs_seq | title | description | A.id_seq | B.id_seq | id | name | profile_seq |
| 4 | Cubrid | Cubrid is... | NULL | NULL | NULL | NULL | NULL |
'Knowledge๐ง > ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [MySQL๐ฑ] ํ ์ด๋ธ ์์ฑ, ์ปฌ๋ผ ์ถ๊ฐ, ์ญ์ , ์์ (0) | 2023.05.04 |
|---|---|
| [MySQL๐ฑ] DML, DDL, DCL์ด๋? (0) | 2023.05.04 |
| Workbench๋ก ์คํค๋ง์ ํ ์ด๋ธ ๋ง๋ค๊ธฐ๐งธ (0) | 2023.04.11 |
| DB ๋ฐ์ดํฐ ํ์ (0) | 2023.04.11 |
| ๋ค๋๋ค (M:N) ๊ด๊ณ ์ฐ๊ฒฐํ ์ด๋ธ๋ก ๊ตฌํํ๊ธฐ (0) | 2023.04.07 |