JOIN
์ฌ๋ฌ ํ ์ด๋ธ์ ํ๋์ ํ ์ด๋ธ์ฒ๋ผ ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
์ผ๋ฐ์ ์ผ๋ก, ๋ ์ด์ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๊ฒฝ์ฐ JOIN์ ์๋ํ๋ค.
JOIN๊ณผ ์งํฉ ์ฐ์ฐ์์ ์ฐจ์ด
- ์งํฉ ์ฐ์ฐ์ : ๋ ๊ฐ ์ด์์ SELECT๋ฌธ์ ๊ฒฐ๊ณผ ๊ฐ์ ์ธ๋ก๋ก ์ฐ๊ฒฐํ ๊ฒ
- JOIN : ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก๋ก ์ฐ๊ฒฐํ ๊ฒ
EQUI JOIN
๋ ํ ์ด๋ธ์ ํน์ ์ด์ ๊ฐ๋ค์ด ์ ํํ๊ฒ ์ผ์นํ ๋ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
- Default Join ๋ฐฉ๋ฒ
- ์ผ๋ฐ์ ์ผ๋ก PK, FK ๊ด๊ณ์ ์ํด JOIN์ ์๋ํ์ง๋ง ์ผ๋ฐ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก JOIN์ ์๋ํ๋ ๊ฒ๋ ๊ฐ๋ฅ
- JOINํ๋ ค๋ ๋๊ฐ ์ด์ ํ ์ด๋ธ์ด ๋์ผํ ์ด๋ฆ์ ์ปฌ๋ผ์ ์ฌ์ฉํ๋ค๋ฉด SELECT ์ ๋ฐ๋์ ํ ์ด๋ธ ๋ช ์ ๋ฐํ์ผํจ
- N๊ฐ์ ํ ์ด๋ธ์ JOINํ ๊ฒฝ์ฐ ์ต์ N-1๊ฐ์ JOIN ์กฐ๊ฑด์ด ํ์ํจ
SQL ํํ
Q. ํ์ฌ ์ง์๋ค์ ์ฌ๋ฒ, ์ด๋ฆ๊ณผ ํจ๊ป ํด๋น ์ง์๋ค์ด ์ํ ๋ถ์๋ฒํธ์ ๋ถ์๋ช ์ ์กฐํํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ์ง์์ด ์ํ ๋ถ์๋ฒํธ ์ ๋ณด๊ฐ ๋ด๊ธด ์ด๊ณผ ๋ถ์ ํ ์ด๋ธ์ ๋ถ์๋ฒํธ ์ด์ ๊ธฐ์ค์ผ๋ก JOINํ๋ฉด ๋ ํ ์ด๋ธ์ ๋ถ์๋ฒํธ๊ฐ ๋์ผํ ๋ ์ง์ ์ ๋ณด์ ๊ฐ ๋ถ์๋ช ์ ๋ฐ๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
SELECT e.empno, e.ename, e.deptno, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
- ์์ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ฐ์ด
=
์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์์ ํ ์ผ์นํ๋ ํน์ ์ด์ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ -
JOIN ์กฐ๊ฑด์
ON
์ ์ด๋WHERE
์ ์ ๋ถ์ฌํ ์ ์์- ๋จ, OUTER JOIN์ ์๋ํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์กฐ๊ฑด๊ณผ ํจ๊ป JOIN ์กฐ๊ฑด์
ON
์ ๋ก ๋ถ์ฌํ๋ ๊ฒ๊ณผWHERE
์ ๋ก ๋ถ์ฌํ ๋ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ฏ๋ก ์ฃผ์
- ๋จ, OUTER JOIN์ ์๋ํ ๊ฒฝ์ฐ ์ฌ๋ฌ ์กฐ๊ฑด๊ณผ ํจ๊ป JOIN ์กฐ๊ฑด์
INNER JOIN
- EQUI JOIN๊ณผ ํจ๊ป Default Join ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋จ
- SQL ํํ๋ EQUI JOIN๊ณผ ๊ฐ์
INNER JOIN๊ณผ EQUI JOIN
- EQUI JOIN :
=
์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌON
์ ์ด๋WHERE
์ ์ ์กฐ๊ฑด์ ๋ถ์ฌํ์ฌ JOINํ๋ ๋ฐฉ๋ฒ - INNER JOIN : JOIN ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ ๋ํด์๋ง ๊ฒฐ๊ณผ ๊ฐ์ด ๋์ค๋ JOIN
INNER JOIN๊ณผ OUTER JOIN
- INNER JOIN : ๋ ํ ์ด๋ธ์ ๊ต์งํฉ์ผ๋ก JOINํ๋ ๊ฐ๋
- OUTER JOIN : ๋ ํ ์ด๋ธ์ ํฉ์งํฉ์ผ๋ก JOINํ๋ ๊ฐ๋
for x in A :
for x in B :
if (A.x = B.x) JOIN
์์ ๊ฐ์ด A ํ ์ด๋ธ๊ณผ B ํ ์ด๋ธ์ x ์ด์ ๊ธฐ์ค์ผ๋ก JOIN์ ์๋ํ๋ ๊ฒฝ์ฐ
INNER JOIN์ ์๋ฌด๋ฆฌ A ํ ์ด๋ธ์ x ์ด์ด ์กด์ฌํ๋ค๊ณ ํ๋๋ผ๋ B ํ ์ด๋ธ์ x์ด์ ๊ฐ๊ณผ ๊ฐ์ง ์๋ค๋ฉด ๊ทธ ๊ฐ์ ๊ฒฐ๊ณผ์ ํฌํจ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ด๋ถ for๋ฌธ์ ํด๋นํ๋ B ํ ์ด๋ธ ์กฐ๊ฑด์ด ๊ฒฐ๊ณผ์ ํต์ฌ์ด๋ค.
๋ฐ๋ฉด OUTER JOIN์ A ํ ์ด๋ธ๊ณผ B ํ ์ด๋ธ์ ๊ฐ๊ฐ์ x ์ด์ ๊ฐ์ด ๊ฐ์ง ์๋ค๊ณ ํ ์ง๋ผ๋ ์ธ๋ถ for๋ฌธ์ ํด๋นํ๋ A ํ ์ด๋ธ์ ๊ฐ์ด ์กด์ฌํ๋ค๋ฉด ๊ฒฐ๊ณผ์ ํฌํจ์ํจ๋ค. ๋ฐ๋ผ์ ์ธ๋ถ for๋ฌธ์ ํด๋นํ๋ A ํ ์ด๋ธ ์กฐ๊ฑด์ด ๊ฒฐ๊ณผ์ ํต์ฌ์ด๋ค. ๋ง์ฝ ์ธ๋ถ for๋ฌธ์ B ํ ์ด๋ธ์, ๋ด๋ถ for๋ฌธ์ A ํ ์ด๋ธ์ ์กฐ๊ฑด์ผ๋ก ๋๋ค๋ฉด ๊ฒฐ๊ณผ๋ ์ ๊ฒฝ์ฐ์ ๋ฐ๋๋ก ์ธ๋ถ for๋ฌธ์ ํด๋นํ๋ B ํ ์ด๋ธ์ ์กด์ฌํ๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๊ฒฐ๊ณผ์ ํฌํจ์ํจ๋ค.
NON-EQUI JOIN
ํ ํ ์ด๋ธ์ ์ด์ ๊ฐ์ด ๋ค๋ฅธ ํ ์ด๋ธ ์ด์ ๊ฐ๊ณผ ์ ํํ ์ผ์นํ์ง ์์ง๋ง JOIN์ ์๋ํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- EQUI JOIN๊ณผ ๋ฌ๋ฆฌ
=
์ฐ์ฐ์๋ ์ฌ์ฉํ ์ ์๊ณ (๊ฐ์ด ์ ํํ ์ผ์นํ์ง ์์),Between
,>
,>=
,<
,<=
๋ฑ ๋ค๋ฅธ ์ฐ์ฐ์๋ฅผ ์ด์ฉํด JOIN ์กฐ๊ฑด์ ๋ถ์ฌํด์ผ ํจ.
SQL ํํ
Q. ํ์ฌ ์ง์๋ค์ ์ฌ๋ฒ, ์ด๋ฆ๊ณผ ํจ๊ป ํด๋น ์ง์๋ค์ ๊ธ์ฌ ๋ฑ๊ธ์ ์กฐํํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ์ง์ ๊ธ์ฌ ์ด๊ณผ ๊ธ์ฌ๋ฑ๊ธ ํ ์ด๋ธ์ ๊ธ์ฌ ํํ์ ๊ณผ ์ํ์ ์ด๋ค์ ๋น๊ตํ์ฌ JOINํ๋ฉด ์ง์์ ๊ธ์ฌ์ ๊ธ์ฌ๊ฐ ์ํ๋ ๋ฒ์์ ๋ฑ๊ธ์ ์ฐ๊ฒฐํ ์ ์๋ค.
SELECT e.empno, e.ename, e.salary, s.grade
FROM emp e, salgrade s
WHERE e.salary BETWEEN s.losal AND s.hisal;
- ์์ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ๊ฐ์ด
=
๊ฐ ์๋ ๋ค๋ฅธ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ ๋ฒ์์ ํฌํจ๋๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ก ๋์ถ
OUTER JOIN
JOIN ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๋ ์ฝ๋๋ฅผ ๊ฒฐ๊ณผ์ ํฌํจํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ JOIN ๋ฐฉ๋ฒ
์ด๋ ํ์ชฝ ํ ์ด๋ธ์๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋๋ฐ ๋ค๋ฅธ์ชฝ ํ ์ด๋ธ์๋ ํด๋น ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ INNER JOIN์ ํ๋ค๋ฉด ๊ฒ์ ๊ฒฐ๊ณผ์ ๋๋ฝ์ด ๋ฐ์ํ ์ ์์
๋ฐ๋ผ์ ํฉ์งํฉ์ ๊ตฌํ๊ณ ์ ํ ๋ ์ฌ์ฉํ ์ ์์
OUTER JOIN ๋ฐฉ๋ฒ
- LEFT [OUTER] JOIN : JOIN ํค์๋์ ์ผ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ํด๋น ํ ์ด๋ธ์ ์ํ ๋ฐ์ดํฐ๋ ๋ชจ๋ ํฌํจ
- RIGHT [OUTER] JOIN : JOIN ํค์๋์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ํด๋น ํ ์ด๋ธ์ ์ํ ๋ฐ์ดํฐ๋ ๋ชจ๋ ํฌํจ
- FULL [OUTER] JOIN : JOIN ํค์๋์ ์์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ ํ ์ด๋ธ์ ์ํ ๋ฐ์ดํฐ๋ฅผ ํฌํจ
SQL ํํ
Q. ํ์ฌ ๋ชจ๋ ์ง์๋ค์ ์ฌ๋ฒ, ์ด๋ฆ๊ณผ ํจ๊ป ํด๋น ์ง์๋ค์ ๋ถ์๋ช ์ ์กฐํํ๋ค. ๋จ, ์์ง ๋ถ์๋ฅผ ๋ฐฐ์น๋ฐ์ง ๋ชปํ ์ง์๊น์ง ํฌํจํ์ฌ ํ์ฌ์ ๋ชจ๋ ์ง์๋ค์ด ์กฐํ๋์ด์ผ ํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ๋ถ์ ๋ฒํธ ์ด๊ณผ ๋ถ์ ํ ์ด๋ธ์ ๋ถ์ ๋ฒํธ ์ด์ ๊ฐ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ๋ฅผ JOINํ๋ค. ๋จ, ์ง์ ๋๋ฝ์ด ๋ฐ์ํ๋ฉด ์๋๋ฏ๋ก ์ง์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ OUTER JOIN์ ํ๋ค.
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id;
- ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด์ผํ๋ ํ ์ด๋ธ์ ์์น์ ๋ฐ๋ผ LEFT์ RIGHT ์กฐ๊ฑด์ ๋ถ์ฌํ์ฌ ์ฌ์ฉํ๋ค.
SELF JOIN
ํ ํ ์ด๋ธ์ ์ด์ ๊ฐ์ ํ ์ด๋ธ ๋ด ๋ค๋ฅธ ์ด๊ณผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๊ฐ์ ํ ์ด๋ธ์ 2๊ฐ ์ด์์ ํ ์ด๋ธ์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์์
-
์ฃผ๋ก ๋ฐ์ดํฐ ๊ฐ ๊ณ์ธตํ ๊ด๊ณ๋ฅผ ํํํ ์ ์์ ๋ ์ฌ์ฉ
- ex) ์ ํ๋ฐฐ ๊ด๊ณ, ์์ฌ์ ๋ถํ ์ง์ ๊ด๊ณ, ๊ฒ์๊ธ๊ณผ ๋ต๊ธ ๊ด๊ณ ๋ฑ
- FROM ์ ๋ค์ ๋์ผํ ํ ์ด๋ธ ๋ช ์ 2๋ฒ ํํํ๋, ๋์ ๊ตฌ๋ถํ๊ธฐ ์ํด ๋ฐ๋์ ๋ณ์นญ์ ๊ธฐ์ฌํด์ผ ํจ
- ์ปฌ๋ผ ์ญ์ ์ด๋ค ๊ธฐ์ค ํ ์ด๋ธ์ธ์ง ํ ์ด๋ธ ๋ณ์นญ์ ์ฐ๊ฒฐํ์ฌ ํํํด์ผ ํจ
SQL ํํ
Q. ํ์ฌ ์ง์๋ค์ ์ด๋ฆ๊ณผ ํจ๊ป ์์ ์ ์์ฌ ๋ฒํธ, ์์ฌ ์ด๋ฆ, ์์ฌ์ ์ง์ ๋ฒํธ๋ฅผ ์กฐํํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ์์ฌ ๋ฒํธ ์ด๊ณผ ์ง์ ํ ์ด๋ธ์ ์ง์ ๋ฒํธ ์ด์ ๊ฐ์ด ๋์ผํ ๊ฒฝ์ฐ๋ฅผ JOINํ๋ค.
SELECT e1.last_name, e1.manager_id, e2.last_name, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id = e2.employee_id;
- ๋์ผํ์ง๋ง ์๋ก ๋ค๋ฅธ ๋ชฉ์ ์ ์ํด ์ค๋ณต๋ ๋ ํ ์ด๋ธ์ ๊ตฌ๋ถํด์ผ ํจ. ๋ฐ๋ผ์ ๋ณ์นญ์ ๊ผญ ์ง์ด์ค์ผ ํจ.
Cartesian JOIN(Cross JOIN)
- JOIN ์กฐ๊ฑด์ ์ค๋ฅ๋ก ์ธํด ํ ํ ์ด๋ธ์ ์๋ ๋ชจ๋ ๋ ์ฝ๋๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ ์ฝ๋์ JOIN์ด ๋๋ ๊ฒฝ์ฐ
- A ํ
์ด๋ธ ๋ ์ฝ๋ ์๊ฐ
a
๊ฐ, A ํ ์ด๋ธ ๋ ์ฝ๋ ์๊ฐb
๊ฐ๋ผ๋ฉด ์นดํฐ์์ ์กฐ์ธ ๊ฒฐ๊ณผa*b
๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋จ. - ์๋ก ๊ด๊ณ๊ฐ ์๋ ๋ ์ฝ๋๋ ํจ๊ป ๋ฌถ์ฌ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅ๋๋ฏ๋ก ํ์์๋ ๊ฒฐ๊ณผ๊ฐ ์ค๋ณต๋๊ฑฐ๋ ์ง๋์น๊ฒ ๋ง์ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ ์ ์์
SQL ์์
Q. ๋์๋ช ๊ณผ ๋๋ผ๋ช ์ ์กฐํํ๋ค.
- ๋ ํ ์ด๋ธ์ JOIN ๊ธฐ์ค ์์ด JOINํ๋ฏ๋ก ๋ ์ฝ๋์ ์ปฌ๋ผ ๊ฐ ์๋ฏธ๊ฐ ์๋ ๋ ์ฝ๋๊ฐ ์ ์ฅ๋จ.
SELECT country_name, city
FROM countries, locations;
- ์์ ๊ฒฐ๊ณผ 23๊ฐ์ city ๋ ์ฝ๋ ์์ 25๊ฐ์ country_name ๋ ์ฝ๋ ์๊ฐ ๊ณฑํด์ ธ ์ด 575๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ถ๋จ.
- ์๋์ ์ผ๋ก ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๋ ค๋ ๊ฒ์ด ์๋๋ผ๋ฉด,
WHERE
์ ํน์ON
์ ์ JOIN ์กฐ๊ฑด์ ๋ช ์ํด์ผํจ.
Q. ๊ฐ ๋๋ผ ๋ณ ๋์๋ฅผ ์กฐํํ๋ค.
SELECT c.country_name, l.city
FROM countries c, locations l
WHERE c.country_id = l.country_id;
Q. ๋ชจ๋ ๋๋ผ์ ๋์๋ฅผ ์กฐํํ๋ค.
SELECT c.country_name, l.city
FROM locations l RIGHT JOIN countries c
ON c.country_id = l.country_id;
ANSI JOIN
๋ฏธ๊ตญ ๊ตญ๋ฆฝ ํ์ค ํํ(American National Standards Institute,ANSI)์์ ์ง์ ํ SQL ๋ฌธ๋ฒ
NATURAL JOIN
๋ ํ ์ด๋ธ์ JOINํ ์ด๋ค์ด ์์ ํ ๋์ผํ ํ๋๋ช (์ปฌ๋ผ๋ช )์ ๊ฐ์ง ๊ฒฝ์ฐ ํด๋น ์ด๋ค์ JOIN
- ๋จ, ๋ ํ ์ด๋ธ์ ์ด์ด ๊ฐ์ ํ๋๋ช ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ํ ์ง๋ผ๋, ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ์ฑ๋ก ํ๋๋ช ๋ง ๋์ผํ ์๋ ์์ผ๋ฏ๋ก ์ฃผ์ํ์ฌ ์ฌ์ฉํด์ผ ํ๋ค.
SQL ํํ
Q. ํ์ฌ ์ง์ ๋ณ ์ง๋ฌด๋ฅผ ์กฐํํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ์ง๋ฌด ๋ฒํธ์ ์ง๋ฌด ํ ์ด๋ธ์ ์ง๋ฌด ๋ฒํธ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ JOIN
SELECT last_name, job_title
FROM employees NATURAL JOIN jobs;
JOIN ~ USING
๋ ํ ์ด๋ธ์ JOIN ๊ธฐ์ค ์ด์ USING์ ๋ช ์ํ์ฌ JOINํ๋ ๋ฐฉ๋ฒ
SQL ํํ
Q. ํ์ฌ ์ง์ ๋ณ ์ง๋ฌด๋ฅผ ์กฐํํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ์ง๋ฌด ๋ฒํธ์ ์ง๋ฌด ํ ์ด๋ธ์ ์ง๋ฌด ๋ฒํธ๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ JOIN
SELECT last_name, job_title
FROM employees JOIN jobs
USING(job_id);
JOIN ~ ON
๋ ํ
์ด๋ธ ๊ฐ ๊ณตํต๋ ์ด๋ฆ์ ์ด์ด ์กด์ฌํ์ง ์๊ฑฐ๋, ์ผ๋ฐ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ธ WHERE
์ ๊ณผ ๊ตฌ๋ถํ๊ธฐ ์ํด ON
์ ์ ๊ธฐ์ค์ ๋ช
์ํ์ฌ JOINํ๋ ๋ฐฉ๋ฒ
OUTER JOIN์์์ WHERE๊ณผ ON
Q. IT ๋ถ์์์ ์ผํ๋ ํ์ฌ ์ง์๋ค์ ์ด๋ฆ์ ์กฐํํ๋ค.
- ์ง์ ํ ์ด๋ธ์ ๋ถ์ ๋ฒํธ ์ด๊ณผ ๋ถ์ ํ ์ด๋ธ์ ๋ถ์ ๋ฒํธ ์ด์ ๊ฐ์ด ์ผ์นํ๋ ๊ฒฝ์ฐ๋ฅผ JOINํ๋ค. ๋จ, ์ง์ ๋๋ฝ์ด ๋ฐ์ํ๋ฉด ์๋๋ฏ๋ก ์ง์ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ OUTER JOIN์ ํ๋ค.
SELECT e.last_name, d.department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
WHERE d.department_name = 'IT';
- ์์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ
WHERE
์ ๋ก IT๋ถ์ ์ง์๋ค์ ํํฐ๋ง ํ ๋ค, JOIN์ ํ๋ค. - ๋ฐ๋ผ์ IT๋ถ์ ์ง์๋ค์ด ์๋๋ผ๋ฉด ๊ฒฐ๊ณผ์ ํฌํจ๋์ง ์๋๋ค.
SELECT e.last_name, d.department_name
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
AND d.department_name = 'IT';
- ์์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ
ON
์ ์ ํต์งธ๋ก ๊ธฐ์ค์ผ๋ก ์ผ์ JOIN์ ํ๋ค. - ๋ฐ๋ผ์ ๋ฐ๊นฅ for๋ฌธ์ ํด๋นํ๋ employees ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์์ชฝ for๋ฌธ์ ํด๋นํ๋ departments ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ฉ ํ์ธํ๋ฉฐ ๋ถ์ ๋ฒํธ๊ฐ ๋์ผํ๊ณ IT๋ถ์๋ผ๋ฉด JOIN์ผ๋ก ๊ด๊ณ๋ฅผ ํํํ์ง๋ง, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ employees ํ ์ด๋ธ์ ์ํ ๋ฐ์ดํฐ๋ฉด ๊ฒฐ๊ณผ์ ํฌํจํ๋ค.
OUTER JOIN ์ ON
๊ณผ WHERE
์ฌ์ฉ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค. ๋ง์ฝ ํํฐ๋ง์ผ๋ก ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ถ์ํด์ผ ํ๋ค๋ฉด, 1๋ฒ ์์์ฒ๋ผ JOIN ์กฐ๊ฑด์ ON
์, ํํฐ๋ง ์กฐ๊ฑด์ WHERE
์ ํํํ๋ ๊ฒ์ด ์ข๋ค.