📌 "SQL에서 변수를 선언하고 사용하는 방법"
SQL에서 변수를 선언할 때는 DECLARE 키워드를 사용한다.
-- 변수 선언
DECLARE @i AS INT;
DECLARE @j AS INT = 10;
-- SET을 이용한 값 할당
DECLARE @z AS INT;
SET @z = 10;
✅ 일반적인 프로그래밍 언어와 같이 선언, 초기화, 값 할당 가능
✅ DECLARE를 사용하여 변수를 정의하고 SET을 통해 값을 변경 가능
-- 최고 연봉자의 이름을 변수에 저장
DECLARE @firstName AS NVARCHAR(15);
DECLARE @lastName AS NVARCHAR(15);
SET @firstName = (SELECT TOP 1 nameFirst
FROM players AS p
INNER JOIN salaries AS s
ON p.playerID = s.playerID
ORDER BY s.salary DESC);
SELECT @firstName;
✅ SELECT 쿼리를 사용하여 최고 연봉자의 nameFirst를 변수에 저장
✅ SELECT @firstName 실행 시 해당 선수의 이름이 출력됨
📌 "SQL Server에서만 지원하는 문법"
SELECT TOP 1
@firstName = p.nameFirst,
@lastName = p.nameLast
FROM players AS p
INNER JOIN salaries AS s
ON p.playerID = s.playerID
ORDER BY s.salary DESC;
SELECT @firstName, @lastName;
✅ SET 대신 SELECT 문으로 여러 변수를 한 번에 할당 가능
✅ @firstName, @lastName에 각각 값이 저장됨
📌 "SQL에서 실행 단위를 나누는 방법"
SQL에서 GO 키워드를 사용하면 실행 단위를 나눌 수 있음
이렇게 실행 단위를 나누는 것을 배치(Batch) 라고 함.
GO
DECLARE @i AS INT = 10;
-- 동일한 변수명을 다시 선언 가능 (배치가 다르면 충돌 없음)
GO
DECLARE @i AS INT = 20;
✅ GO를 사용하면 서로 다른 배치 내에서 같은 변수명을 사용할 수 있음
✅ 하나의 묶음으로 실행되는 명령어 집합을 만들 때 유용함
📌 "프로그래밍 언어에서 사용하는 흐름 제어와 유사함"
GO
DECLARE @i AS INT = 10;
IF @i = 10
PRINT('BINGO!');
ELSE
PRINT('NO!');
✅ IF-ELSE를 사용하여 특정 조건이 만족하면 PRINT 실행
IF @i = 10
BEGIN
PRINT('BINGO!');
PRINT('당첨되었습니다!');
END
ELSE
PRINT('NO!');
✅ BEGIN ~ END를 사용하면 여러 개의 SQL 문을 한 번에 실행 가능!
GO
DECLARE @i AS INT = 0;
WHILE @i <= 10
BEGIN
PRINT @i;
SET @i = @i + 1;
IF @i = 6 BREAK;
END
✅ WHILE을 사용하여 반복 실행 가능
✅ BREAK 사용 시 반복문 탈출
GO
DECLARE @i AS INT = 0;
WHILE @i <= 10
BEGIN
SET @i = @i + 1;
IF @i = 6 CONTINUE; -- 6일 때는 아래 코드 실행 안 함
PRINT @i;
END
✅ CONTINUE를 사용하면 특정 조건에서 PRINT @i; 실행을 건너뛸 수 있음
📌 "임시로 사용할 테이블을 변수로 선언할 수 있다!"
📌 "일반적인 테이블을 생성하는 것보다 효율적이며, 메모리에서 관리됨"
GO
DECLARE @test TABLE
(
name VARCHAR(50) NOT NULL,
salary INT NOT NULL
);
-- 데이터를 임시 테이블에 삽입
INSERT INTO @test
SELECT p.nameFirst + ' ' + p.nameLast, s.salary
FROM players AS p
INNER JOIN salaries AS s
ON p.playerID = s.playerID;
-- 테이블 변수 조회
SELECT * FROM @test;
✅ DECLARE @test TABLE을 사용하여 임시 테이블 생성 가능
✅ 일반적인 CREATE TABLE과 달리 메모리에서 관리되며, 성능이 뛰어남
✅ 트랜잭션 종료 시 자동으로 제거됨
-- GM이 관리하는 유저 목록을 임시 저장할 테이블 생성
DECLARE @GMList TABLE
(
playerID INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
accountStatus VARCHAR(20) NOT NULL
);
-- 특정 유저 목록을 삽입
INSERT INTO @GMList
SELECT playerID, nameFirst + ' ' + nameLast, 'Active'
FROM players
WHERE birthMonth = 12;
-- GMList 확인
SELECT * FROM @GMList;
✅ 배치를 나누고 데이터를 특정 범위로 필터링하여 관리할 때 유용