소개
SQL 관련 포스팅 링크를 모아둔 아카이브 페이지가 있습니다.
글의 목표
동적 SQL에 대해서 다루어볼려고 합니다.
1. 샘플 테이블 구성
2. SET 변수 지정
3. SELECT 변수 지정
1. 샘플 테이블 구성
MSSQL에는 AdventureWorks라는 유명한 샘플데이터베이스가 있습니다.
개념이 조금 헷갈리실 수도 있는데 설치 = 복원 입니다. 공식 문서 홈페이지에 설치 방법이 잘 설명되어 있으니 한번 따라해보시길 바랍니다.
SELECT [BusinessEntityID]
,[NationalIDNumber]
,[LoginID]
,[OrganizationNode]
,[OrganizationLevel]
,[JobTitle]
,[BirthDate]
,[MaritalStatus]
,[Gender]
,[HireDate]
,[SalariedFlag]
,[VacationHours]
,[SickLeaveHours]
,[CurrentFlag]
,[rowguid]
,[ModifiedDate]
FROM [AdventureWorks2019].[HumanResources].[Employee]
오늘 사용해볼 샘플 테이블은 Employee입니다. 여러 컬럼들이 있는데 그 중 JobTitle과 Gender를 이용하여 변수 지정을 해볼 것입니다.
2. SET 변수 지정
Declare @helloSet AS int;
set @helloSet = 101;
변수를 지정하는 순서는 위와 같다. 우선, Declare로 변수명과 타입을 선언한다. 그리고, set을 통해 선언된 변수명 타입에 맞는 정보를 할당한다.
서브 쿼리를 이용하여 정보를 할당할 수도 있다.
USE [AdventureWorks2019];
declare @empinfo as nvarchar(40);
set @empinfo = (select gender + '_' + jobTitle
from [HumanResources].[Employee]
where NationalIDNumber = '245797967');
select @empinfo as empinfo;
Jobtitle 앞에 _와 성별 정보 F를 붙였다.
SET으로 변수를 지정할 때는 반드시 "스칼라" 값만 대입하여야 한다. 이 말을 다시 해석하면
select gender + '_' + jobTitle
from [HumanResources].[Employee]
where NationalIDNumber = '245797967'
NationalIDNumber = '245797967' 인 직원은 한명 밖에 없다는 뜻이 된다.
declare @empinfo as nvarchar(40);
set @empinfo = (select gender + '_' + jobTitle
from [HumanResources].[Employee]
where gender = 'F');
select @empinfo as empinfo;
왜 에러가 나왔을까? gender = 'F'인 직원이 한명이 아니기 때문이다.
-- 한 번에 여러 정보를 할당
declare @geninfo as nvarchar(40), @jobinfo as nvarchar(40);
set @geninfo = (select gender
from [HumanResources].[Employee]
where NationalIDNumber = '245797967');
set @jobinfo = (select jobTitle
from [HumanResources].[Employee]
where NationalIDNumber = '245797967');
select @geninfo as gen, @jobinfo as job;
한번에 여러 정보를 할당할 수도 있다.
이 역시, gen과 job에 스칼라 값 하나씩만 할당되었기 때문에 출력된다.
3. SELECT 변수 지정
select를 이용하여서도 변수를 지정할 수 있다.
declare @job1 as nvarchar(10)
select @job1 = jobtitle
from [HumanResources].[Employee]
where gender = 'M'
select @job1 as job
여기서 재밌는 것은 where gender = 'M'에 해당하는 직원들이 여러명임에도 하나의 값이 출력된다는 것이다. 즉, select로 변수를 지정하면 임의의 값 하나를 출력해준다는 사실을 알 수 있다.
'딥상어동의 딥한 SQL > LV2.중급쿼리' 카테고리의 다른 글
SQL 구문이 데이터 저장소에 이르기 까지 (0) | 2021.06.26 |
---|---|
왜 버퍼를 사용하는가? (0) | 2021.06.26 |
[MSSQL] while (1) 기본 사용법 - declare, set, while, begin, end, print (0) | 2021.03.29 |
[MSSQL] With (Nolock)을 사용하는 이유 (2) | 2021.03.27 |
MSSQL | 윈도우 함수 사용시 주의 사항 (0) | 2021.03.23 |
제 블로그에 와주셔서 감사합니다! 다들 오늘 하루도 좋은 일 있으시길~~
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!