본문 바로가기
MSSQL

[SQL] 한 개의 테이블을 여러 테이블 처럼 조인 만들기

by eloyb 2025. 1. 28.
반응형

이번에 알아볼 SQL JOIN은 하나의 테이블을 여러 테이블을 조인하는 것처럼 조인 T-SQL을 만드는 방법입니다. 이런 방법이 왜 필요한 지 의문이 들 수 있겠지만 한 개의 테이블에 판매내역 자료가 있는데 년도별 판매내역을 비교하기 위해 한 개의 테이블에 있는 2012년도 판매내역과 2013년도 판매내역을 비교하기 위해 같은 테이블에 있는 자료를 조인을 통해서 두개의 테이블을 조인 하는 것처럼 조인 구문을 생성하는 것입니다.

예제는 범용성을 위해 AdventureWorks 데이터베이스를 이용하겠습니다.

AdventureWorks 데이터베이스는 아래의 사이트에서 다운로드 할 수 있습니다. 버전은 OLTP 중에서 아무 버전이나 선택해서 다운로드 해도 관계가 없고 자신의 컴퓨터에 설치되어 있는 데이터베이스 버전에 맞는 걸 선택하시면 되겠습니다.

https://learn.microsoft.com/ko-kr/sql/samples/adventureworks-install-configure?view=sql-server-ver16&tabs=ssms

 

AdventureWorks 예제 데이터베이스 - SQL Server

다음 지침에 따라 T-SQL(Transact-SQL), SSMS(SQL Server Management Studio) 또는 Azure Data Studio를 사용하여 SQL Server AdventureWorks 샘플 데이터베이스를 다운로드하고 설치합니다.

learn.microsoft.com

 

SELECT TOP 100 * FROM Sales.SalesPerson

 

위 테이블은 Sales.SalesPerson  테이블이고 BusinessEntityID 기본키를 통해서 Sales.SalesPersonQuotaHistory와 조인을 하게 됩니다.

 

SELECT 100 * FROM Sales.SalesPersonQuotaHistory;

 

위 테이블은 두개의 컬럼 BusinessEntityID, QuotaDate가 기본키이고 Sales.SalesPerson 테이블과 조인을 통해서 BusinessEntityID 별로 년도별 집계 자료를 생성하는 데 사용됩니다.

그러면 실제 구문을 보도록 하겠습니다.

SELECT s.BusinessEntityID,
-- 2012년도 판매량, 2013년도 판매량 집계를 SUM 함수를 이용해서 집계한다.
	SUM(s2012.SalesQuota) Total_2012_SQ,
	SUM(s2013.SalesQuota) Total_2013_SQ
FROM Sales.SalesPerson s
-- 조인을 하면서 별칭을 만들어서 같은 테이블에서 두번 이상 다른 조인을 생성할 수 있다.
-- 2012년도의 집계자료를 출력하기 위한 조인을 한다.
	LEFT OUTER JOIN Sales.SalesPersonQuotaHistory s2012
	ON s.BusinessEntityID = s2012.BusinessEntityID
	AND YEAR(s2012.QuotaDate) = 2012
-- 2013년도의 집계자료를 출력하기 위한 조인을 한다.
		LEFT OUTER JOIN Sales.SalesPersonQuotaHistory s2013
		ON s.BusinessEntityID = s2013.BusinessEntityID
		AND YEAR(s2013.QuotaDate) = 2013
-- 집계함수가 있는 컬럼이 아닌 모든 컬럼은 그룹으로 묶어야 한다.        
GROUP BY s.BusinessEntityID;


결과 테이블은 아래와 같습니다.

 

2012년도 판매량 데이터와 2013 판매량 데이터가 범주별로 비교할 수 있는 자료가 생성되었습니다.

'MSSQL' 카테고리의 다른 글

HAVING 절  (1) 2024.11.19
데이터 그룹화(GROUP BY)  (1) 2024.11.18
집계함수  (0) 2024.11.17
서브쿼리(Sub Query)  (3) 2024.11.16
데이터베이스 조인(UNION)  (2) 2024.11.15