FULL OUTER, SELF, NATURAL, CROSS ์์ฝ
FULL OUTER JOIN | ๋ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฒฐํฉํ๋ฉฐ, ์ผ์นํ์ง ์๋ ํ์ NULL๋ก ์ฑ์์ง๋๋ค. |
SELF JOIN | ํ ์ด๋ธ์ ์๊ธฐ ์์ ๊ณผ ์กฐ์ธํ์ฌ ๊ฐ์ ํ ์ด๋ธ ๋ด์์ ํ ๊ฐ์ ๊ด๊ณ๋ฅผ ํํํฉ๋๋ค. |
NATURAL JOIN | ๋ ํ ์ด๋ธ ๊ฐ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ๋ชจ๋ ์ด์ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ์กฐ์ธํฉ๋๋ค. |
CROSS JOIN | ๋ ํ ์ด๋ธ ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ์์ฑํ์ฌ ์นดํฐ์ ๊ณฑ์ ๋ง๋ญ๋๋ค. |
1. FULL OUTER JOIN
FULL OUTER JOIN์ ๋ ํ ์ด๋ธ ๊ฐ์ ๋ชจ๋ ํ์ ๊ฒฐํฉํฉ๋๋ค. ์ฆ, ์์ชฝ ํ ์ด๋ธ์์ ์ผ์นํ๋ ํ์ ํ๋๋ก ๊ฒฐํฉ๋๋ฉฐ, ์ผ์นํ์ง ์๋ ํ๋ ํฌํจํ์ฌ NULL ๊ฐ์ผ๋ก ์ฑ์์ค๋๋ค
์์
ํ ์ด๋ธ Customers:
CustomerID | CustomerName |
1 | Alice |
2 | Bob |
3 | Charlie |
ํ ์ด๋ธ Orders:
CustomerID | OrderAmount | OrderAmount |
101 | 1 | 100 |
102 | 2 | 150 |
103 | 4 | 200 |
์ฟผ๋ฆฌ:
SELECT Customers.CustomerID, Customers.CustomerName, Orders.OrderID, Orders.OrderAmount
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
๊ฒฐ๊ณผ:
CustomerID | Customer Name | OrderID | OrderAmount |
1 | Alice | 101 | 100 |
2 | Bob | 102 | 150 |
3 | Charlie | NULL | NULL |
NULL | NULL | 103 | 200 |
์ค๋ช :
- CustomerID = 1, 2: Alice์ Bob์ Orders ํ ์ด๋ธ์ OrderID 101๊ณผ OrderID 102์ ๊ฐ๊ฐ ๋งค์นญ๋ฉ๋๋ค.
- CustomerID = 3: Charlie๋ ์ฃผ๋ฌธ์ด ์์ผ๋ฏ๋ก OrderID์ OrderAmount๋ NULL์ ๋๋ค.
- CustomerID = 4: OrderID 103์ Customers ํ ์ด๋ธ์ ๋งค์นญ๋๋ ํ์ด ์์ผ๋ฏ๋ก CustomerID์ CustomerName์ NULL์ ๋๋ค.
2. SELF JOIN
SELF JOIN์ ํ ์ด๋ธ์ ์๊ธฐ ์์ ๊ณผ ์กฐ์ธํ๋ ๊ฒ์ ๋๋ค.
์๊ธฐ ์์ ๊ณผ์ ๊ด๊ณ๋ฅผ ํํํด์ผ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, ํ ์ด๋ธ์ ๊ฐ ํ์ ๋ค๋ฅธ ํ๊ณผ ๋น๊ตํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
์์:
ํ ์ด๋ธ Employees:
EmployeeID | Name | ManagerID |
1 | John | 2 |
2 | Jane | NULL |
3 | Alice | 2 |
4 | Bob | 1 |
์ฟผ๋ฆฌ:
SELECT e1.Name AS Employee, e2.Name AS Manager
FROM Employees e1
LEFT JOIN Employees e2 ON e1.ManagerID = e2.EmployeeID;
๊ฒฐ๊ณผ:
Employee | Manager |
John | Jane |
Jane | NULL |
Alice | Jane |
Bob | John |
์ค๋ช :
- SELF JOIN์ ๊ฐ์ ํ ์ด๋ธ์์ ์ง์๊ณผ ๊ทธ๋ค์ ๊ด๋ฆฌ์๋ฅผ ์กฐ์ธํ์ฌ, ๊ฐ ์ง์์ ๊ด๋ฆฌ์๋ฅผ ์ฐพ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Jane์ ์ต๊ณ ๊ด๋ฆฌ์์ด๋ฏ๋ก, Manager ์ด์ด NULL์ ๋๋ค.
3. NATURAL JOIN
NATURAL JOIN์ ๋ ํ ์ด๋ธ ๊ฐ์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ๋ชจ๋ ์ด์ ๊ธฐ์ค์ผ๋ก ์๋์ผ๋ก ์กฐ์ธํฉ๋๋ค.
์ด ์ด๋ฆ๊ณผ ๊ฐ์ด ์ผ์นํ๋ ํ๋ค๋ง ๊ฒฐํฉ๋ฉ๋๋ค.
์์:
ํ ์ด๋ธ Departments:
DepartmentID | DepartmentName |
10 | HR |
20 | Finance |
30 | IT |
ํ ์ด๋ธ Employees:
EmployeeID | DepartmentID | EmployeeName |
1 | 10 | John |
2 | 20 | Jane |
3 | 10 | Jack |
์ฟผ๋ฆฌ:
SELECT EmployeeID, EmployeeName, DepartmentName
FROM Employees
NATURAL JOIN Departments;
๊ฒฐ๊ณผ:
EmployeeID | EmployeeName | DepartmentName |
1 | John | HR |
2 | Jane | Finance |
3 | Jack | HR |
์ค๋ช :
- NATURAL JOIN์ ๋ ํ ์ด๋ธ ๊ฐ์ ๊ณตํต ์ด์ธ DepartmentID๋ฅผ ์๋์ผ๋ก ์กฐ์ธํฉ๋๋ค.
- DepartmentID๊ฐ ์ผ์นํ๋ ํ๋ค๋ง ๊ฒฐํฉ๋์ด ๊ฒฐ๊ณผ๋ก ๋ฐํ๋ฉ๋๋ค.
4. CROSS JOIN
CROSS JOIN์ ๋ ํ ์ด๋ธ ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ์์ฑํฉ๋๋ค.
๋ ํ ์ด๋ธ์ ๊ฐ ํ์ด ์๋ก ๊ฒฐํฉ๋์ด ์นดํฐ์ ๊ณฑ(Cartesian Product)์ ๋ง๋ญ๋๋ค.
์์
ํ ์ด๋ธ Products:
ProductID | ProductName |
1 | Laptop |
2 | Phone |
ํ ์ด๋ธ Suppliers:
SupplierID | SupplierName |
101 | SupplierA |
102 | SupplierB |
์ฟผ๋ฆฌ:
SELECT Products.ProductName, Suppliers.SupplierName
FROM Products
CROSS JOIN Suppliers;
๊ฒฐ๊ณผ:
ProductName | SupplierName |
Laptop | SupplierA |
Laptop | SupplierB |
Phone | SupplierA |
Phone | SupplierB |
์ค๋ช :
- CROSS JOIN์ ๋ชจ๋ ์ ํ์ด ๋ชจ๋ ๊ณต๊ธ์์ ์กฐํฉ๋๋ฏ๋ก, ์ด 4๊ฐ์ ๊ฒฐ๊ณผ ํ์ด ์์ฑ๋ฉ๋๋ค.
- ๊ฒฐ๊ณผ๋ ๋ ํ ์ด๋ธ ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ํฌํจํฉ๋๋ค.