SQL์ ์ด์ฉํ ๋ ๋๊ฐ์ ํ ์ด๋ธ์ ํฉ์ณ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ณ ์ถ์๋๊ฐ ์๋ค! ๊ทธ๋ ์ฐ์ด๋๊ฒ์ด ๋ฐ๋ก JOIN์ด๋ค.
์ค๋์ JOIN์ ๋ํด ์์๋ณด์!
JOIN์ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๊ฑฐ๋ ๊ฒฐํฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ ํค์๋์ ๋๋ค. JOIN์ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ JOIN ์ข ๋ฅ๋ INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN ๋ฑ์ด ์์ต๋๋ค. ์ด ์ค์์ INNER JOIN์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ JOIN ์ ํ์ด๋ฉฐ, ๋ค๋ฅธ JOIN ์ ํ์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฅ๋์์ต๋๋ค.
INNER JOIN
INNER JOIN ์ฌ์ฉ๋ฐฉ๋ฒ
SELECT *
FROM ํ
์ด๋ธ1
INNER JOIN ํ
์ด๋ธ2
ON ํ
์ด๋ธ1.์ด = ํ
์ด๋ธ2.์ด;
์์ ์์์์๋ ํ ์ด๋ธ1๊ณผ ํ ์ด๋ธ2 ๊ฐ์ ๊ณตํต ์ด์ ๊ธฐ์ค์ผ๋ก INNER JOIN์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฃผ๋ฌธ ์ ๋ณด๊ฐ ๋ด๊ธด ํ ์ด๋ธ๊ณผ ์ ํ ์ ๋ณด๊ฐ ๋ด๊ธด ํ ์ด๋ธ์ด ์์ ๊ฒฝ์ฐ, ๋ ํ ์ด๋ธ์์ ์ ํ ID ์ด์ ๊ณตํต ์ด๋ก ์ฌ์ฉํ์ฌ INNER JOIN์ ์ํํ ์ ์์ต๋๋ค. ์์๋ฅผ ํตํด ์์๋ณด๊ฒ ์ต๋๋ค.
ํ ์ด๋ธ1: ์ฃผ๋ฌธ ์ ๋ณด
OrderID ProductID CustomerID OrderDate
----------------------------------------------
1 100 1 2022-01-01
2 200 1 2022-01-02
3 100 2 2022-01-03
4 300 3 2022-01-04
ํ ์ด๋ธ2: ์ ํ ์ ๋ณด
ProductID ProductName ProductPrice
-------------------------------------
100 ์ ํ1 10000
200 ์ ํ2 20000
300 ์ ํ3 30000
์์ ๋ ํ ์ด๋ธ์์ INNER JOIN์ ์ฌ์ฉํ์ฌ ๊ณตํต ์ด์ธ ProductID๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐํฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
SELECT *
FROM ์ฃผ๋ฌธ์ ๋ณด
INNER JOIN ์ ํ์ ๋ณด
ON ์ฃผ๋ฌธ์ ๋ณด.ProductID = ์ ํ์ ๋ณด.ProductID;
-- ๊ฒฐ๊ณผ
OrderID ProductID CustomerID OrderDate ProductName ProductPrice
------------------------------------------------------------------------
1 100 1 2022-01-01 ์ ํ1 10000
2 200 1 2022-01-02 ์ ํ2 20000
3 100 2 2022-01-03 ์ ํ1 10000
4 300 3 2022-01-04 ์ ํ3 30000
LEFT JOIN
LEFT JOIN์ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์์ ๊ณตํต ์ด ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ๋ฐํํฉ๋๋ค. LEFT JOIN์ ์ฌ์ฉํ๋ฉด ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ณด์กดํ๋ฉด์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ํฌํจ์ํฌ ์ ์์ต๋๋ค.
LEFT JOIN ์ฌ์ฉ๋ฐฉ๋ฒ
SELECT *
FROM ํ
์ด๋ธ1
LEFT JOIN ํ
์ด๋ธ2
ON ํ
์ด๋ธ1.์ด = ํ
์ด๋ธ2.์ด;
์์ ์์์์๋ ์ผ์ชฝ ํ ์ด๋ธ์ธ ํ ์ด๋ธ1์ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ ๋ณด์กดํ๋ฉด์, ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ธ ํ ์ด๋ธ2์์ ํ ์ด๋ธ1๊ณผ ๊ณตํต ์ด์ ๊ธฐ์ค์ผ๋ก ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ํฌํจ์ํต๋๋ค. JOIN ์กฐ๊ฑด์ ํด๋นํ์ง ์๋ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ NULL ๊ฐ์ผ๋ก ๋ฐํ๋ฉ๋๋ค. ์์๋ฅผ ํตํด ์์๋ณด๊ฒ ์ต๋๋ค.
ํ ์ด๋ธ1: ์ฃผ๋ฌธ ์ ๋ณด
OrderID ProductID CustomerID OrderDate
----------------------------------------------
1 100 1 2022-01-01
2 200 1 2022-01-02
3 100 2 2022-01-03
4 300 3 2022-01-04
ํ ์ด๋ธ2: ์ ํ ์ ๋ณด
ProductID ProductName ProductPrice
-------------------------------------
100 ์ ํ1 10000
200 ์ ํ2 20000
์์ ๋ ํ ์ด๋ธ์์ LEFT JOIN์ ์ฌ์ฉํ์ฌ ๊ณตํต ์ด์ธ ProductID๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฒฐํฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
SELECT *
FROM ์ฃผ๋ฌธ์ ๋ณด
LEFT JOIN ์ ํ์ ๋ณด
ON ์ฃผ๋ฌธ์ ๋ณด.ProductID = ์ ํ์ ๋ณด.ProductID;
-- ๊ฒฐ๊ณผ
OrderID ProductID CustomerID OrderDate ProductName ProductPrice
------------------------------------------------------------------------
1 100 1 2022-01-01 ์ ํ1 10000
2 200 1 2022-01-02 ์ ํ2 20000
3 100 2 2022-01-03 ์ ํ1 10000
4 300 3 2022-01-04 NULL NULL
์์ ๊ฒฐ๊ณผ์์ INNER JOIN์ ์ฌ์ฉํ์ฌ ๋ ํ ์ด๋ธ์ ๊ฒฐํฉํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. INNER JOIN์ ์ฌ์ฉํ๋ฉด ProductID ์ด์ ๊ธฐ์ค์ผ๋ก ๋ ํ ์ด๋ธ์ ๊ฒฐํฉํ์ฌ, ์ฃผ๋ฌธ ์ ๋ณด์ ์ ํ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐํ์์ต๋๋ค.
RIGHT JOIN
RIGHT JOIN์ JOIN ์กฐ๊ฑด์ ๋ง๋ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ค๊ณ , ๊ทธ ์ค์์ ์ผ์ชฝ ํ ์ด๋ธ๊ณผ ์ผ์นํ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ํจ๊ป ์ถ๋ ฅํ๋ JOIN ๋ฐฉ๋ฒ์ ๋๋ค. ์ฆ, RIGHT JOIN์ LEFT JOIN๊ณผ ๋ฐ๋๋ก ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก JOIN์ ์ํํฉ๋๋ค.
RIGHT JOIN ์ฌ์ฉ๋ฐฉ๋ฒ
SELECT *
FROM ํ
์ด๋ธ1
RIGHT JOIN ํ
์ด๋ธ2
ON ํ
์ด๋ธ1.์ด์ด๋ฆ = ํ
์ด๋ธ2.์ด์ด๋ฆ;
์์ ์์์์๋ ํ ์ด๋ธ2๋ฅผ ๊ธฐ์ค์ผ๋ก RIGHT JOIN์ ์ํํฉ๋๋ค. ์ฆ, ํ ์ด๋ธ2์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ํ ์ด๋ธ1์์๋ ํ ์ด๋ธ2์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์์ ํจ๊ป ์ถ๋ ฅํฉ๋๋ค. ํ ์ด๋ธ1๊ณผ ํ ์ด๋ธ2์์ ์ด ์ด๋ฆ์ด ๊ฐ์ ์ด์ ๊ธฐ์ค์ผ๋ก JOIN์ ์ํํฉ๋๋ค.
RIGHT JOIN์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ผ์ชฝ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ถ๋ ฅ๋์ง ์์ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ LEFT JOIN๊ณผ RIGHT JOIN์ ์กฐํฉํ์ฌ ์ฌ์ฉํ๊ฑฐ๋, UNION์ ์ฌ์ฉํ์ฌ ๋ JOIN ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
students ํ ์ด๋ธ:
| id | name | age | gender |
|----|-----------|-----|--------|
| 1 | John | 18 | M |
| 2 | Jane | 19 | F |
| 3 | Michael | 20 | M |
| 4 | Rachel | 18 | F |
| 5 | David | 19 | M |
grades ํ ์ด๋ธ:
| student_id | grade |
|------------|-------|
| 1 | 80 |
| 2 | 90 |
| 3 | 85 |
| 5 | 95 |
์ ๋ ํ ์ด๋ธ์์ RIGHT JOIN์ ์ฌ์ฉํ์ฌ "students" ํ ์ด๋ธ๊ณผ "grades" ํ ์ด๋ธ์ JOINํด๋ณด๊ฒ ์ต๋๋ค.
SELECT *
FROM grades
RIGHT JOIN students
ON grades.student_id = students.id;
์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ฉ๋๋ค.
| student_id | grade | id | name | age | gender |
|------------|-------|-----|----------|-----|--------|
| 1 | 80 | 1 | John | 18 | M |
| 2 | 90 | 2 | Jane | 19 | F |
| 3 | 85 | 3 | Michael | 20 | M |
| 5 | 95 | 5 | David | 19 | M |
| NULL | NULL | 4 | Rachel | 18 | F |
๊ฒฐ๊ณผ์ ์ผ๋ก "grades" ํ ์ด๋ธ๊ณผ "students" ํ ์ด๋ธ์์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง "student_id"์ "id" ์ด์ ๊ธฐ์ค์ผ๋ก RIGHT JOIN์ด ์ํ๋๋ฉฐ, "grades" ํ ์ด๋ธ์๋ ์๋๋ฐ "students" ํ ์ด๋ธ์๋ ์๋ ๋ฐ์ดํฐ๋ NULL๋ก ํ์๋ฉ๋๋ค. ์์ ๊ฒฐ๊ณผ์์๋ "students" ํ ์ด๋ธ์์ id๊ฐ 4์ธ Rachel ๋ฐ์ดํฐ๊ฐ JOIN๋์ง ์์์ง๋ง, RIGHT JOIN์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ์ ํฌํจ๋์์ต๋๋ค.
FULL OUTER JOIN
FULL OUTER JOIN์ LEFT OUTER JOIN๊ณผ RIGHT OUTER JOIN์ ํฉ์ณ ๋์ JOIN ๋ฐฉ๋ฒ์ ๋๋ค. ์ฆ, ๋ ํ ์ด๋ธ ์ค ์ด๋ ํ ์ชฝ์๋ง ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ ๊ฐ์ ธ์ต๋๋ค.
FULL OUTER JOIN ์ฌ์ฉ๋ฐฉ๋ฒ
SELECT *
FROM ํ
์ด๋ธ1
FULL OUTER JOIN ํ
์ด๋ธ2
ON ํ
์ด๋ธ1.์ด์ด๋ฆ = ํ
์ด๋ธ2.์ด์ด๋ฆ;
์์ ์์์์๋ ํ ์ด๋ธ1๊ณผ ํ ์ด๋ธ2 ๋ชจ๋๋ฅผ ๊ธฐ์ค์ผ๋ก FULL OUTER JOIN์ ์ํํฉ๋๋ค. ๋ฐ๋ผ์ ๋ ํ ์ด๋ธ์์ ์ด๋ ํ ์ชฝ์๋ง ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ ์ถ๋ ฅ๋ฉ๋๋ค. ์ด ์ด๋ฆ์ด ๊ฐ์ ์ด์ ๊ธฐ์ค์ผ๋ก JOIN์ ์ํํฉ๋๋ค.
FULL OUTER JOIN์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ ํ ์ด๋ธ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก ์ฑ๋ฅ์ ์ด์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์๋ LEFT OUTER JOIN ๋๋ RIGHT OUTER JOIN์ ์กฐํฉํ์ฌ ์ฌ์ฉํ๊ฑฐ๋, UNION์ ์ฌ์ฉํ์ฌ ๋ JOIN ๊ฒฐ๊ณผ๋ฅผ ํฉ์ณ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
employees ํ ์ด๋ธ:
| emp_id | first_name | last_name | salary |
|--------|------------|-----------|--------|
| 1 | John | Smith | 50000 |
| 2 | Sarah | Johnson | 60000 |
| 3 | David | Lee | 70000 |
| 4 | Rachel | Kim | 80000 |
orders ํ ์ด๋ธ:
| order_id | order_date | emp_id | amount |
|----------|------------|--------|--------|
| 101 | 2022-01-01 | 1 | 1000 |
| 102 | 2022-02-01 | 3 | 2000 |
| 103 | 2022-03-01 | 2 | 3000 |
์ ๋ ํ ์ด๋ธ์์ FULL OUTER JOIN์ ์ฌ์ฉํ์ฌ "employees" ํ ์ด๋ธ๊ณผ "orders" ํ ์ด๋ธ์ JOINํด๋ณด๊ฒ ์ต๋๋ค.
SELECT *
FROM employees
FULL OUTER JOIN orders
ON employees.emp_id = orders.emp_id;
์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ฉ๋๋ค.
| emp_id | first_name | last_name | salary | order_id | order_date | amount |
|--------|------------|-----------|--------|----------|------------|--------|
| 1 | John | Smith | 50000 | 101 | 2022-01-01 | 1000 |
| 2 | Sarah | Johnson | 60000 | 103 | 2022-03-01 | 3000 |
| 3 | David | Lee | 70000 | 102 | 2022-02-01 | 2000 |
| 4 | Rachel | Kim | 80000 | NULL | NULL | NULL |
| NULL | NULL | NULL | NULL | 104 | 2022-04-01 | 5000 |
์ ๊ฒฐ๊ณผ์์๋ "employees" ํ ์ด๋ธ๊ณผ "orders" ํ ์ด๋ธ์์ ๋ชจ๋ ๊ณตํต์ ์ผ๋ก ๊ฐ์ "emp_id" ์ด์ ๊ธฐ์ค์ผ๋ก FULL OUTER JOIN์ด ์ํ๋๋ฉฐ, "employees" ํ ์ด๋ธ์๋ ์๋๋ฐ "orders" ํ ์ด๋ธ์๋ ์๋ ๋ฐ์ดํฐ์, "orders" ํ ์ด๋ธ์๋ ์๋๋ฐ "employees" ํ ์ด๋ธ์๋ ์๋ ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ํฌํจ๋์ด ์ถ๋ ฅ๋ฉ๋๋ค.
๋ํ "orders" ํ ์ด๋ธ์๋ ์๋๋ฐ "employees" ํ ์ด๋ธ์๋ ์๋ ๋ฐ์ดํฐ๋ "employees" ํ ์ด๋ธ์ ๊ฐ์ด NULL๋ก ํ์๋๊ณ , "employees" ํ ์ด๋ธ์๋ ์๋๋ฐ "orders" ํ ์ด๋ธ์๋ ์๋ ๋ฐ์ดํฐ๋ "orders" ํ ์ด๋ธ์ ๊ฐ์ด NULL๋ก ํ์๋ฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ๋งค๋ฒ ์กฐ๊ฑด์ ๋ช ์ํ๊ณ ํด์ผ๋ง JOIN ํ ์ ์์๊น? ์กฐ๊ฑด์ ๋ช ์ํ์ง ์๊ณ ๋ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค!
๊ทธ๊ฒ์ ๋ฐ๋ก NATURAL JOIN์ด๋ค.
NATURAL JOIN
NATURAL JOIN์ JOIN ์กฐ๊ฑด์ ๋ช ์ํ์ง ์๊ณ ๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ JOIN ํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค. NATURAL JOIN์ ์ฌ์ฉํ๋ฉด ๋ ํ ์ด๋ธ์์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์ด์ ์๋์ผ๋ก ์ฐพ์์ JOIN์ ์ํํฉ๋๋ค.
์ฆ, NATURAL JOIN์ ์ฌ์ฉํ๋ฉด ๋ ํ ์ด๋ธ์์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ด์ ์ฐพ์์ ํด๋น ์ด์ ๊ธฐ์ค์ผ๋ก INNER JOIN์ ์ํํฉ๋๋ค. NATURAL JOIN์ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง ์ด์ ๊ธฐ์ค์ผ๋ก JOIN์ ์ํํ๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค๋ณต๋๋ ์ด ์ด๋ฆ์ด ์๋ ์๋ก์ด ํ ์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค.
NATURAL JOIN ์ฌ์ฉ ๋ฐฉ๋ฒ
SELECT *
FROM ํ
์ด๋ธ1
NATURAL JOIN ํ
์ด๋ธ2;
์์ ์์์์๋ ํ ์ด๋ธ1๊ณผ ํ ์ด๋ธ2์์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ์ด์ ์ฐพ์์ NATURAL JOIN์ ์ํํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด ์ด๋ฆ์ด ๊ฐ์ ์ด์ ๊ธฐ์ค์ผ๋ก INNER JOIN์ด ์ํ๋๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค๋ณต๋๋ ์ด ์ด๋ฆ์ด ์๋ ์๋ก์ด ํ ์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค.
NATURAL JOIN์ ์ฌ์ฉํ๊ธฐ ๊ฐํธํ๊ณ ์ง๊ด์ ์ด์ง๋ง, ์ด ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ์ ์ฝ์ด ์์ต๋๋ค. ๋ํ, ์๋์ผ๋ก JOIN ์กฐ๊ฑด์ ์์ฑํ๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ณผ๊ฐ ์์ธก๋์ง ์์ ์ ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
employees ํ ์ด๋ธ:
| emp_id | first_name | last_name | dept_id |
|--------|------------|-----------|---------|
| 1 | John | Smith | 2 |
| 2 | Jane | Doe | 1 |
| 3 | Jack | Jones | 2 |
| 4 | Jill | Smith | 3 |
departments ํ ์ด๋ธ:
| dept_id | dept_name |
|---------|-----------|
| 1 | Sales |
| 2 | Marketing |
| 3 | HR |
์ ๋ ํ ์ด๋ธ์์ NATURAL JOIN์ ์ฌ์ฉํ์ฌ "employees" ํ ์ด๋ธ๊ณผ "departments" ํ ์ด๋ธ์ JOINํด๋ณด๊ฒ ์ต๋๋ค.
SELECT *
FROM employees
NATURAL JOIN departments;
์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ฉ๋๋ค.
| emp_id | first_name | last_name | dept_id | dept_name |
|--------|------------|-----------|---------|-----------|
| 2 | Jane | Doe | 1 | Sales |
| 1 | John | Smith | 2 | Marketing |
| 3 | Jack | Jones | 2 | Marketing |
| 4 | Jill | Smith | 3 | HR |
๊ฒฐ๊ณผ์ ์ผ๋ก "employees" ํ ์ด๋ธ๊ณผ "departments" ํ ์ด๋ธ์์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง "dept_id" ์ด์ ๊ธฐ์ค์ผ๋ก INNER JOIN์ด ์ํ๋๋ฉฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค๋ณต๋๋ ์ด ์ด๋ฆ์ด ์๋ ์๋ก์ด ํ ์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค. ์ด๋ ๊ฒ NATURAL JOIN์ ์ฌ์ฉํ๋ฉด JOIN ์กฐ๊ฑด์ ๋ช ์ํ์ง ์์๋ ์ด ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก JOIN์ด ์ํ๋์ด ํธ๋ฆฌํฉ๋๋ค.
์ค๋์ ์ด๋ ๊ฒ JOIN์ ๋ํด ์์๋ณด์์ต๋๋ค!
๋ค์ Sql ๋ฌธ๋ฒ ๊ณต๋ถ๋ ์ด์ฌํ ํด๋ด์! ๐ง๐ง
'Oracle > sql' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๐ sql ๋ฌธ๋ฒ์ ๊ณต๋ถํ์ ๐] ์ค๋ผํด์ ์๋ฃํ๊ณผ ํจ์ (1) | 2023.04.20 |
---|---|
[๐ sql ๋ฌธ๋ฒ์ ๊ณต๋ถํ์ ๐] ์๋ธ์ฟผ๋ฆฌ๋? (0) | 2023.04.20 |
[๐ sql ๋ฌธ๋ฒ์ ๊ณต๋ถํ์ ๐] WHERE ์ด๋? (0) | 2023.04.18 |
[๐ sql ๋ฌธ๋ฒ์ ๊ณต๋ถํ์ ๐] ROUND, TRUNC, CEIL, FLOOR (0) | 2023.04.16 |
Dql์ ๋ํด ์์๋ณด์! (0) | 2023.04.11 |