저장을 습관화
SQL - FULL JOIN, SELF JOIN 본문
1. FULL JOIN
왼쪽 테이블(table 1)과 오른쪽 테이블(table 2) 레코드에 일치하는 항목이 있는 경우
모든 레코드를 반환한다.
FULL OUTER JOIN 이라고도 하며, 잠재적으로 매우 큰 결과 집합을 반활할 수 있다.
예시 테이블 Customers)
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
예시 테이블 Orders)
OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
10308 | 2 | 7 | 1996-09-18 | 3 |
10309 | 37 | 3 | 1996-09-19 | 1 |
10310 | 77 | 8 | 1996-09-20 | 2 |
예시)
select Customers.CustomerName, Orders.OrderID
from Customers
full outer join Orders
on Customers.CustomerID = Orders.CustomerID
order by Customers.CustomerName
참고: FULL OUTER JOIN 키워드는 다른 테이블의 일치 여부에 관계 없이
두 테이블 모두에서 일치하는 모든 레코드를 반환한다.
따라서 Orders에 일치 항목이 없는 Customers 행이 있거나,
Customers에 일치 항목이 없는 Orders 행이 있는 경우 해당 행도 나열된다.
2. SELF JOIN
하나의 테이블 내에서 자기 자신과의 조인을 수행한다.
테이블 내에서 서로 다른 행 간의 관계를 찾을때 유용하다.
예시 테이블 Customers)
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
예시) 동일한 도시에서 서로 다른 고객을 검색하고, 그들의 정보를 비교한다.
select A.CustomerName as CustomerName1, B.CustomerName as CustomerName2, A.City
from Customers A, Customers B
where A.CustomerID <> B.CustomerID
and A.City = B.City
order by A.City
이하 생략..
예시 테이블 Employee)
EmployeeID | EmployeeName | ManagerID |
1 | John | 3 |
2 | Jane | 1 |
3 | Tom | NULL |
4 | Alice | 3 |
5 | Bob | 1 |
예시) 각 직원과 그 직원의 상사를 조회한다.
select e.EmployeeName as Employee, m.EmployeeName as Manager
from Employee e
left join Employee m
on e.ManagerID = m.EmployeeID
Employee | Manager |
John | Tom |
Jane | John |
Tom | NULL |
Alice | Tom |
Bob | John |
'공부 > 데이터베이스' 카테고리의 다른 글
객체 관계 데이터베이스 ORDBMS (0) | 2024.01.08 |
---|---|
RDBMS와 ORDBMS (0) | 2024.01.08 |
SQL - LEFT JOIN, RIGHT JOIN (0) | 2023.12.09 |
SQL - INNER JOIN (0) | 2023.12.08 |
SQL - JOINS (0) | 2023.12.08 |