이번에 다룰 주제는 데이터베이스 조인 방법 중에서 Union 조인의 쓰임새에 대해서 설명드리도록 하겠습니다. Union 조 인은 두개 혹은 그 이상의 테이블에서 단일 테이블의 출력 결과를 나타내고자 할 때 사용합니다. 이렇게 글로 설명하는 것 보다 하나의 그림을 보면 쉽게 이해하실 수 있습니다.
Union 조인을 이용하면 위와 같이 두개의 테이블을 하나의 테이블로 결합하는 결과를 출력할 수 있습니다. 구문의 사용법 은 아래와 같습니다.
SELECT (Distinct) Column, Column, Column... FROM 첫번째 Table Name
UNION [ALL]
SELECT (Distinct) Column, Column, Column... FROM 두번째 Table Name
Union 조인 중에서 ALL 키워드는 중복되는 행을 제거하지 않는 옵션이고, Union만 사용하면 중복되는 행을 제거해서 출 력하게 됩니다. Union 조인을 사용할 때 주의할 점은 조인을 할 두개의 테이블은 열의 갯수가 같아야 하고, 데이터 형식도 서로 같은 데이터 형식이거나, 호환되는 데이터 형식이어야 합니다.
그러면 Union 조인의 사용 예를 알아보도록 하겠습니다.
SELECT Customers.FirstName + ' ' + Customers.LastName AS Names, Customers.Address, Customers.City, Customers.CState, Customers.ZipCode
FROM Customers UNION
SELECT Vendors.VendName, Vendors.VendStreetAddress, Vendors.VendCity, Vendors.VendState, Vendors.VendZipCode
FROM Vendors
위의 예제는 두개의 테이블의 각 컬럼을 하나의 테이블처럼 출력한 결과입니다. 고객(Customers)의 각 컬럼과 공급자 (Vendors)의 각 컬럼들의 데이터 형식이 같기 때문에 두개의 테이블은 하나의 테이블처럼 연결을 할 수 있습니다.
출력 결과는 위와 같은 형태로 나타나게 됩니다.
이번에는 조금 복잡한 Union 조인 예를 알아보도록 하겠습니다.
SELECT Customers.FirstName +''+ Customers.LastName AS Names, Products.ProductName, 'Customer' AS 컬 럼
FROM ((Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID) INNER JOIN Order_Details ON Orders.OrderNumber = Order_Details.OrderNumber) INNER JOIN Products ON Products.ProductNumber =Order_Details.ProductNumber WHERE Products.ProductName LIKE '%PC%'
UNION
SELECT Vendors.VendName, Products.ProductName,'Vendor' AS 컬럼
FROM (Vendors INNER JOIN Product_Vendors ON Vendors.VendorID = Product_Vendors.VendorID) INNER JOIN Products ON Products.ProductNumber =Product_Vendors.ProductNumber
WHERE Products.ProductName LIKE '%PC%'
위의 예제는 고객과 공급자를 하나의 컬럼에 표시하고, 고객이 주문한 제품과 공급자가 생산한 제품을 두번째 컬럼에 표시 한 예제입니다. 그리고 Where 절을 이용하여 고객이 주문한 상품이 PC 종류이고, 공급자가 생산한 상품도 PC 종류만을 출력하도록 필터링 했습니다. 세번째 컬럼은 고객이 주문한 제품이라는 것을 나타내기 위해 'Customer' AS 컬럼을 추가 해 주었고, 공급자가 생산하는 제품이라는 것을 나타내기 위해 'Vendor' AS 컬럼을 추가해 주었습니다.
출력 결과는 위와 같은 형태로 나타나게 됩니다.
Union 조인은 그리 많이 사용되지는 않을 것입니다. 하지만 특수한 경우에는 필요할 수가 있습니다. 예를 들어
"여러개의 테이블에 나뉘어져 들어가 있는 메일주소를 한번에 출력해서 메일링 리스트를 만들어야 할 경우" "모든 고객및 공급업체 담당자의 휴대전화 리스트를 출력해서 한꺼번에 문자 메시지를 발송하고자 할 경우" 가 있다면 Union 조인을 사용하는 것이 좋습니다.
'MSSQL' 카테고리의 다른 글
집계함수 (0) | 2024.11.17 |
---|---|
서브쿼리(Sub Query) (3) | 2024.11.16 |
외부조인 (0) | 2024.11.14 |
테이블 연결(INNER JOIN) (1) | 2024.11.13 |
데이터 검색(여러 조건) (0) | 2024.11.12 |