데이터베이스(DB)에서 기본적으로 조인을 하는 방법은 내부 조인(INNER JOIN)이라고 이전 장에서 설명을 드렸습니다. 보통 가장 많이 사용되는 조인이 Inner Join 이지만 Left Join 과 Right Join도 실무에서는 많이 사용되는 조인 중 하나입 니다.
그림으로 설명을 드리자면 INNER JOIN은 위와 같이 고객과 주문에서 일치하는 자료만 가져오거나, 생산자와 주문에서 일 치하는 자료만 가져오게 되는 역할을 하게 됩니다.
그런데 Left/Right Join은 위와 같이 생산자와 주문 중에서 주문이 없는 제품리스트를 가져오거나, 고객과 주문 중에서 주 문이 없는 고객 리스트를 가져오려고 할 때 사용합니다. 물론 주문을 포함해서 데이터를 가져올 수도 있습니다.
LEFT/RIGHT JOIN(외부 조인)
주문 테이블
그러면 위의 2개의 고객테이블과 주문테이블에서 Left Join의 사용법을 알아보도록 하겠습니다.
SELECT (FirstName + ' ' + LastName) As Names, OrderDate, ShipDate FROM Customers
LEFT JOIN Orders
ON Orders.CustomerID=Customers.CustomerID
Left Join을 사용해서 두개의 테이블을 연결하려면 위와 같이 입력합니다. 그러면 아래와 같은 출력 결과를 확인할 수 있습니다.
위에서 보면 NULL 값들이 나오는 것을 확인할 수 있습니다. Left Join과 Inner Join의 차이점이 이 부분입니다. Left 조인 은 모든 고객들을 포함한 후에 주문과 연결을 하기 때문에 주문이 없는 고객이라도 같이 출력되게 됩니다. 그러면 Left Join을 이용해서 주문이 없는 고객들만 출력하려면 어떻게 해야 할까요? 이런 데이터를 출력하려면 역시 Left Join을 사용 해서 아래와 같이 작성을 하면 됩니다.
SELECT (FirstName + ' ' + LastName) As Names, OrderDate, ShipDate FROM Customers
LEFT JOIN Orders
ON Orders.CustomerID=Customers.CustomerID
위의 코드를 보시면 Where 절이 추가된 것을 확인할 수 있습니다. 모든 고객리스트 중에서 주문번호가 없는 고객(주문이 한번도 이루어지지 않은 고객)을 조건으로 추가했기 때문에 결과는 주문이 한번도 없었던 고객리스트만 출력되게 됩니다.
SELECT (FirstName + ' ' + LastName) As Names, OrderDate, ShipDate FROM Customers
LEFT JOIN Orders
ON Orders.CustomerID=Customers.CustomerID WHERE Orders.OrderNumber IS NULL
+
SELECT (FirstName + ' ' + LastName) As Names, OrderDate, ShipDate FROM Customers
INNER JOIN Orders
ON Orders.CustomerID=Customers.CustomerID
=
SELECT (FirstName + ' ' + LastName) As Names, OrderDate, ShipDate FROM Customers
LEFT JOIN Orders
ON Orders.CustomerID=Customers.CustomerID
'MSSQL' 카테고리의 다른 글
서브쿼리(Sub Query) (3) | 2024.11.16 |
---|---|
데이터베이스 조인(UNION) (2) | 2024.11.15 |
테이블 연결(INNER JOIN) (1) | 2024.11.13 |
데이터 검색(여러 조건) (0) | 2024.11.12 |
데이터 검색(WHERE) (2) | 2024.11.11 |