🔥 1. SQL 변수(DECLARE)

📌 "SQL에서 변수를 선언하고 사용하는 방법"

SQL에서 변수를 선언할 때는 DECLARE 키워드를 사용한다.

-- 변수 선언
DECLARE @i AS INT;
DECLARE @j AS INT = 10;

-- SET을 이용한 값 할당
DECLARE @z AS INT;
SET @z = 10;

✅ 일반적인 프로그래밍 언어와 같이 선언, 초기화, 값 할당 가능
DECLARE를 사용하여 변수를 정의하고 SET을 통해 값을 변경 가능


2. 역대 최고 연봉을 받은 선수 이름 저장하기

-- 최고 연봉자의 이름을 변수에 저장
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 실행 시 해당 선수의 이름이 출력됨


3. 여러 변수를 한 번에 할당하기

📌 "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에 각각 값이 저장됨


🔥 2. 배치(Batch)

📌 "SQL에서 실행 단위를 나누는 방법"

SQL에서 GO 키워드를 사용하면 실행 단위를 나눌 수 있음
이렇게 실행 단위를 나누는 것을 배치(Batch) 라고 함.

GO

DECLARE @i AS INT = 10;

-- 동일한 변수명을 다시 선언 가능 (배치가 다르면 충돌 없음)
GO

DECLARE @i AS INT = 20;

GO를 사용하면 서로 다른 배치 내에서 같은 변수명을 사용할 수 있음
하나의 묶음으로 실행되는 명령어 집합을 만들 때 유용함


🔥 3. 흐름 제어 (IF, WHILE)

📌 "프로그래밍 언어에서 사용하는 흐름 제어와 유사함"

1) IF-ELSE 조건문

GO
DECLARE @i AS INT = 10;

IF @i = 10
	PRINT('BINGO!');
ELSE
	PRINT('NO!');

IF-ELSE를 사용하여 특정 조건이 만족하면 PRINT 실행

여러 개의 명령어 실행 (BEGIN ~ END)

IF @i = 10
BEGIN
	PRINT('BINGO!');
	PRINT('당첨되었습니다!');
END
ELSE
	PRINT('NO!');

BEGIN ~ END를 사용하면 여러 개의 SQL 문을 한 번에 실행 가능!


2) WHILE 반복문

GO
DECLARE @i AS INT = 0;

WHILE @i <= 10
BEGIN
	PRINT @i;
	SET @i = @i + 1;
	IF @i = 6 BREAK;
END

WHILE을 사용하여 반복 실행 가능
BREAK 사용 시 반복문 탈출

CONTINUE 사용 예제

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; 실행을 건너뛸 수 있음


🔥 4. 테이블 변수 (Temporary Table)

📌 "임시로 사용할 테이블을 변수로 선언할 수 있다!"
📌 "일반적인 테이블을 생성하는 것보다 효율적이며, 메모리에서 관리됨"

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과 달리 메모리에서 관리되며, 성능이 뛰어남
✅ 트랜잭션 종료 시 자동으로 제거됨


실제 활용 예제

📌 1) 게임 서버에서 GM이 특정 유저의 목록을 임시 저장하고 조회하는 경우

-- 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;

배치를 나누고 데이터를 특정 범위로 필터링하여 관리할 때 유용


profile
李家네_공부방

0개의 댓글