(Database : Basic-19) 변수와 흐름 제어

Posted by : at

Category : Database


변수 선언

DECLARE @i AS INT = 10 
-- @는 필수는 아지만 table과 이름이 겹칠까봐 넣음
-- 초기값은 필수는 아니다
DECLARE @i2 AS INT
SET @i2 = 10

-- 예제 역대 최대 연봉을 받은 선수 이름
DECLARE @firstName AS NVARCHAR(15)
DECLARE @lastName AS NVARCHAR(15)
SET @firstName 1 = (SELECT TOP 1 nameFirst
    FROM players AS p
        INNER JOIN slaries AS s
        ON p.playerID = s.playerID
    ORDER BY s.salary DESC);

SELECT @firstName
-- 아래는 MS-SQL만 지원한다
SET TOP 1 @firstName = p.nameFirst, @lastName = p.nameLast
FROM players AS p
    INNER JOIN slaries AS s
    ON p.playerID = s.playerID
ORDER BY s.salary DESC;

배치(GO)

DECLARE @firstName AS NVARCHAR(15)
--- ...
DECLARE @firstName AS NVARCHAR(15)  -- Error : 중복 변수 선언
-- 영역을 나누는 방법이 없나? -> 배치
GO
DECLARE @firstName AS NVARCHAR(15)

--- ...

GO
DECLARE @firstName AS NVARCHAR(15) -- Okay

배치는 아래와 같은 상황에도 사용한다.

SELECT *
FOM players     -- FROM의 오타, 아래 라인도 모두 출력이 안된다.

SELECT *
FROM salaries   -- 한 줄의 오타로 아래 라인이 모두 동작이 안됨 -> 배치로 구분하자
SELECT *
FOM players     -- FROM의 오타

GO

SELECT *
FROM salaries   -- 정상동작

흐름제어

-- IF
GO
DECLARE @i AS INT = 10

IF @i = 10
BEGIN
    PRINT('BINGTO!')
END
ELSE
BEGIN
    PRINT('NO!')
END
-- while
DECLARE @i AS INT = 10
WHILE @i <= 10
BEGIN
    PRINT @i
    SET @i = @i + 1
    IF @i = 6 BREAK -- OR CONTINUE
END

테이블 변수

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

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links