SELECT 한 내용의 전체 칼럼 INSERT

SELECT하는 테이블과 INSERT할 테이블의 칼럼은 일치되어야함!

INSERT INTO [table] SELECT * FROM [table] WHERE [조건];

원하는 칼럼만 SELECT해서 INSERT

INSERT INTO [table] (column1, column2, column3) SELECT column1, column2, column3 FROM [table] WHERE [조건]; 

DECLARE (변수선언)

변수 선언 : DECLARE @variable_name data_type
변수에 값 대입 : SET @variable_name = VALUE
변수의 값 출력 : SELECT @variable_name

DECLARE 사용 예제

-- 변수 선언  
DECLARE @Group nvarchar(50)
DECLARE @Sales money

-- 변수 초기화
SET @Group = N'Asia';
SET @Sales = 100;

-- 변수 사용 
SELECT * 
FROM Sales
WHERE Group = @Group
And Sales >= @Sales;
GO

※ data_type이 테이블 형식인 경우

DECLARE @variable_name TABLE
(
    column_name data_type,
    column_name data_type
    ...
);

자동 증가되는 컬럼 : IDENTITY 속성

SQL Server에서 숫자 자동 증가기능으로 IDENTITY 컬럼 속성을 들 수 있다. (오라클의 시퀀스(sequence)와 비슷한 기능)
int와 같은 숫자형 컬럼 타입의 경우, IDENTITY 속성을 지정하면 해당 컬럼에 자동으로 증가되는 숫자들이 들어가게 된다.
(IDENTITY 컬럼 속성을 VARCHAR나 CHAR와 같은 문자형 컬럼에는 적용할 수 없다)

CREATE TABLE table_name
(
    seq int identity(1,1)  -- 앞에 1은 시작값, 뒤에 1은 증가값
    val varchar(50) NULL
)

insert할 경우 identity 컬럼을 지정할 수 없다.
identity 컬럼을 제외한 컬럼에만 값을 지정하면, identity 컬럼은 자동으로 값이 할당된다.


NULLIF

지정된 두 식이 같으면 NULL값 반환.
두 식이 같지 않으면 첫번째 인수가 반환됨.
예를 들어 SELECT NULLIF(4,4)인 경우, NULL이 반환되고,
NULLIF(5,7)인 경우 두 입력값이 다르기 떄문에 5가 반환됨.


OUTPUT절

INSERT, UPDATE, DELETE 또는 MERGE문의 영향을 받는 각 행의 정보를 반환
결과를 테이블 또는 테이블 변수에 삽입 가능하다.

학생(STUDENT)테이블에 이름과 나이를 입력한 후, 입력한 데이터의 값을 리턴받고 싶을때 다음과 같이 쿼리를 작성하면 된다.

INSERT INTO STUDENT(NAME, AGE) OUPUT INSERTED.*  VALUES('GILDONG', 22)

데이터의 수정시 OUTPUT절을 사용할 때 DELETED는 수정되기 전의 칼럼값, INSERTED는 수정된 후의 컬럼값을 리턴한다.

UPDATE STUDNET SET AGE = 23 OUPUT DELETED.*, INSERTED.*
WHERE NAME = 'GILDONG'

데이터를 수정하기전에 수정전 데이터를 다른 곳에 임시보관 하고자 할 경우,

UPDATE STUDENT SET AGE = 23
OUTPUT DELETED.* -- 변경 전 데이터   
INTO STUDENT_TEMP -- TEMP테이블에 변경 전 데이터 담기  

학생이름이 ‘GILDONG’인 학생정보를 삭제하기전, STUDNET_BAK 테이블에 데이터를 백업시킨다고 해보자.

DELETE FROM STUDNET
OUTPUT DELETED.*
INTO STUDNET_BAK
WHERE NAME = 'GILDONG'

참고사이트(SQL Server 2017)
참고사이트(예제로 배우는 SQL프로그래밍)
참고사이트(MSSQL_DECLARE)