MSSQL

[MSSQL] 테이블 값 생성자

띠옹떼옹 2024. 8. 26. 14:42

기존에는 어떤 설정 값을 임시로 담아야하거나 할 때 임시테이블을 사용하거나 임시테이블변수를 사용하거나 서브쿼리로 SELECT ~ UNION ALL 이렇게 많이 사용했는데,

FROM 절에도 VALUES 문법을 사용할 수 있다는 것을 알게되었다.

여러가지 구문에서 활용가능하며, 사용 방법에 따라 WORKTABLE을 생성하지 않으니 데이터양이 많지 않고 중간 값 저장이 필요없고 정렬이 필요없는 케이스라면 해당 문법을 사용하는 것도 좋아보인다.

-- SELECT ~ UNION ALL
SELECT	*
FROM	(	SELECT N'rpc' AS [NAME], 1 AS [NUMBER]
			UNION ALL 
			SELECT N'pub', 2
			UNION ALL
			SELECT N'sub', 4
			UNION ALL
			SELECT N'dist', 8
			UNION ALL
			SELECT N'published'	, 1
	)AS A

-- 단일 사용 
SELECT	*
FROM	( VALUES	(N'rpc'			, 1)
				,	(N'pub'			, 2)
				,	(N'sub'			, 4)
				,	(N'dist'		, 8)
				,	(N'published'	, 1)
		) AS MID_TABLE([NAME], [NUMBER])	-- 테이블명(컬럼명)
WHERE	[NUMBER] = 1

-- JOIN에 사용
SELECT	*
FROM	DBO.spt_values AS A
JOIN	( VALUES	(N'rpc'			, 1)
				,	(N'pub'			, 2)
				,	(N'sub'			, 4)
				,	(N'dist'		, 8)
				,	(N'published'	, 1)
		) AS MID_TABLE([NAME], [NUMBER])	-- 테이블명(컬럼명)
ON		A.[NAME]	= MID_TABLE.[NAME]
AND		A.[NUMBER]	= MID_TABLE.[NUMBER]

 


 

https://learn.microsoft.com/ko-kr/sql/t-sql/queries/table-value-constructor-transact-sql?view=sql-server-ver16