본문 바로가기

프로그래밍/MSSQL

MSSQL 간단 정리 요약 사전

반응형




1. 데이타검색 - SELECT, ALIASES, TOP, DISTINCT, WHERE, ORDER BY
2. 조건 연산자 - 부등호,  AND/OR/NOT, NULL, BETWEEN, IN, LIKE, ALL/ANY/SOME
3. 집합 연산자 - UNION, INTERSECT, EXCEPT
4. 그룹- GROUP BY, HAVING, PARTITION BY, ROLLUP/CUBE, PIVOT/UNPIVOT
5. 순위 함수 - ROW_NUMBER, RANK, DENSE_RANK
6. NULL 함수 - NULLIF, ISNULL, COALESCE
7. 집계 함수 - MAX/MIN, COUNT/AVG/SUM, COMPUTE
8. 문자열 함수 - ASCII/CHAR, REPLACE/STUFF/UPPER/LOWER/REVERSE/REPLICATE, LEFT/RIGHT/SUBSTRING, CHARINDEX/PATINDEX/LEN, LTRIM/RTRIM/SPACE
9. IS_ - ISNUMERIC, ISDATE
10. 수치 함수
11. 날짜/시간 - CURRENT_TIMESTAMP/GETDATE/SYSDATETIME/GETUTCDATE, YEAR/MONTH/DAY, DATEADD/DATEDIFF, DATENAME/DATEPART
12. 조인 - (INNER) JOIN, LEFT (OUTER) JOIN, RIGHT (OUTER) JOIN, FULL (OUTER) JOIN, CROSS JOIN
13. 흐름 제어 - IF/ELSE, CASE, GOTO, RETURN, WHILE/BREAK/CONTINUE, EXEC, SET
14. 암호화 - PWDENCRYPT, PWDCOMPARE, HASHBYTES
15. 형변환 - CAST, CONVERT
16. 오브젝트 - 데이타베이스, 테이블, 데이타, 뷰, 저장 프로시저, 트리거, 커서


# 데이타 검색

/*
  [SELECT]
  모든 컬럼 조회
*/
SELECT * FROM 테이블

/*
  [SELECT/Aliases]
  특정 컬럼 조회 및 별칭
*/
SELECT 컬럼1, 컬럼2 AS '별칭' FROM 테이블

/*
  [TOP]
  상위 N개의 데이타 조회
*/
SELECT TOP N * FROM 테이블 -- N개의 데이타
SELECT TOP N PERCENT * FROM 테이블 -- N%개의 데이타

/*
  [DISTINCT]
  중복 제거
*/
SELECT DISTINCT * FROM 테이블

/*
  [WHERE]
  조건 데이타
*/
SELECT * FROM 테이블 WHERE 조건

/*
  [ORDER BY]
  정렬
*/
SELECT * FROM 테이블 ORDER BY 컬럼 -- 디폴트 오름차순(ASC)
SELECT * FROM 테이블 ORDER BY 컬럼 ASC -- 오름차순 정렬
SELECT * FROM 테이블 ORDER BY 컬럼 DESC -- 내림차순 정렬
SELECT * FROM 테이블 ORDER BY 컬럼 ASC, 컬럼 DESC -- 복수 컬럼 정렬





# 조건절 연산자

/*
  [=,<>,>,>=,<,<=]
  부등호
*/
SELECT * FROM 테이블 WHERE 컬럼 = 'A' -- 컬럼의 값이 A인 데이타
SELECT * FROM 테이블 WHERE 컬럼 <> 'A' -- 컬럼의 값이 A가 아닌 데이타
SELECT * FROM 테이블 WHERE 컬럼 > 5 -- 컬럼의 값이 5보다 큰 데이타
SELECT * FROM 테이블 WHERE 컬럼 >= 5 -- 컬럼의 값이 5와 같거나 5보다 큰 데이타
SELECT * FROM 테이블 WHERE 컬럼 < 5 -- 컬럼의 값이 5보다 작은 데이타
SELECT * FROM 테이블 WHERE 컬럼 <= 5 -- 컬럼의 값이 5와 같거나 5보다 작은 데이타

/*
  [AND/OR/NOT]
  논리 함수
*/
SELECT * FROM 테이블 WHERE 컬럼1 = 'A' AND 컬럼2 = 'B' -- 컬럼1의 값이 A이고 컬럼2의 값이 B인 데이타 (조건 모두 만족)
SELECT * FROM 테이블 WHERE 컬럼1 = 'A' OR 컬럼2 = 'B' -- 컬럼1의 값이 A이거나 컬럼2의 값이 B인 데이타 (조건 중 하나 이상 만족)
SELECT * FROM 테이블 WHERE NOT 컬럼 = 'A' -- 컬럼의 값이 A가 아닌 데이타

/*
  [NULL]
*/
SELECT * FROM 테이블 WHERE 컬럼 IS NULL -- 컬럼의 값이 NULL인 데이타
SELECT * FROM 테이블 WHERE 컬럼 IS NOT NULL -- 컬럼의 값이 NULL이 아닌 데이타

/*
  [BETWEEN]
  범위
*/
SELECT * FROM 테이블 WHERE 컬럼 BETWEEN 5 AND 10 -- 컬럼의 값이 5와 10 사이인 데이타
SELECT * FROM 테이블 WHERE 컬럼 BETWEEN '2018-12-26' AND '2019-01-30' -- 컬럼의 값이 '2018-12-26'와 '2019-01-30' 사이인 데이타

/*
  [IN]
  포함
*/
SELECT * FROM 테이블 WHERE 컬럼 IN ('A', 'B') -- 컬럼의 값이 A이거나 B인 데이타
SELECT * FROM 테이블 WHERE 컬럼1 IN (SELECT 컬럼2 FROM 테이블) -- 컬럼1의 값이 컬럼2인 데이타

/*
  [LIKE (+ Wildcards)]
  패턴 일치
  자세한 설명 http://ggmouse.tistory.com/131
*/
SELECT * FROM 테이블 WHERE 컬럼 LIKE '%A%' -- 컬럼의 값에 A가 포함된 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE 'A%' -- 컬럼의 값이 A로 시작하는 데이타 
SELECT * FROM 테이블 WHERE 컬럼 LIKE '%A' -- 컬럼의 값이 A로 끝나는 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE 'A%Z' -- 컬럼의 값이 A로 시작해서 Z로 끝나는 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE '__A' -- 컬럼의 길이가 3이면서 세번째 값이 A인 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE '_A%' -- 컬럼의 두번째 값이 A로 시작하는 데이타 (CAP, SAY, DAMAGE...)
SELECT * FROM 테이블 WHERE 컬럼 LIKE '_A%' -- 컬럼의 두번째 값이 A로 시작하는 데이타 (CAP, SAY, DAMAGE...)
SELECT * FROM 테이블 WHERE 컬럼 LIKE '[ABC]%' -- 컬럼의 값이 A 또는 B 또는 C로 시작하는 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE '[^ABC]%' -- 컬럼의 값이 A 또는 B 또는 C로 시작하지 않는 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE '[A-D]%' -- 컬럼의 값이 (A~D) A 또는 B 또는 C 또는 D로 시작하는 데이타
SELECT * FROM 테이블 WHERE 컬럼 LIKE '%[%]%' -- 컬럼의 값에 %가 포함되는 데이타 
SELECT * FROM 테이블 WHERE 컬럼 LIKE '%#%%' ESCAPE '#' -- 컬럼의 값에 %가 포함되는 데이타 (# 대신 모든 문자 사용 가능)

/*
  [ALL/ANY/SOME]
  하위 쿼리에서 값을 둘 이상 반환했을 경우
  자세한 설명 http://ggmouse.tistory.com/160
 */
SELECT * FROM 테이블 WHERE 컬럼 = ALL (SELECT 컬럼 FROM 테이블) -- 하위 쿼리에서 나온 결과 값을 모두 충족 (AND)
SELECT * FROM 테이블 WHERE 컬럼 = ANY (SELECT 컬럼 FROM 테이블) -- 하위 쿼리에서 나온 결과 값에서 하나 이상 만족 (OR)
SELECT * FROM 테이블 WHERE 컬럼 = SOME (SELECT 컬럼 FROM 테이블) -- 하위 쿼리에서 나온 결과 값에서 하나 이상 만족 (OR)





# 집합 연산자
자세한 설명 http://ggmouse.tistory.com/138
※조건: 컬럼의 수가 일치해야 함

/*
  [UNION]
  합집합
*/
SELECT * FROM 테이블 -- 두 테이블의 결과를 합친 데이타 (중복제거) 
UNION
SELECT * FROM 테이블

SELECT * FROM 테이블 -- 두 테이블의 결과를 합친 데이타
UNION ALL
SELECT * FROM 테이블

/*
  [INTERSECT]
  교집합
*/
SELECT * FROM 테이블 -- 두 테이블의 일치하는 데이타
INTERSECT
SELECT * FROM 테이블

/*
  [EXCEPT]
  차집합
*/
SELECT * FROM 테이블 -- 첫번째 테이블를 기준으로 두번째 테이블과 중복을 제외한 데이타
EXCEPT
SELECT * FROM 테이블





# 그룹

/*
  [GROUP BY]
  그룹
*/
SELECT 컬럼 FROM 테이블 GROUP BY 컬럼 -- 조건: GROUP BY에서 지정한 컬럼만이 SELECT 컬럼에 올 수 있음

/*
  [HAVING]
  그룹 조건
*/
SELECT 컬럼 FROM 테이블 GROUP BY 컬럼 HAVING 조건 -- 그룹 함수의 조건 지정

/*
  [PARTITION BY]
  테이블 분할
  자세한 설명 http://ggmouse.tistory.com/119
*/
SELECT 순위함수 OVER(PARTITION BY 컬럼1 ORDER BY 컬럼2) FROM 테이블 -- 컬럼1을 기준으로 컬럼2 값의 순위를 매김 (학년별 등수)
SELECT 집계함수 OVER(PARTITION BY 컬럼) FROM 테이블 -- 테이블 전체의 집계가 아닌 컬럼을 기준으로 집계 (학년별로 총 점수)

/*
  [ROLLUP/CUBE]
  그룹별 소계와 총 합계
*/
SELECT 컬럼 FROM 테이블 GROUP BY 컬럼 WITH ROLLUP -- GROUP BY에 있는 컬럼을 오른쪽에서 왼쪽순으로 그룹 생성
SELECT 컬럼 FROM 테이블 GROUP BY ROLLUP(컬럼)
SELECT 컬럼 FROM 테이블 GROUP BY 컬럼 WITH CUBE -- 나올 수 있는 모든 경우의 수로 그룹 생성 (ROLLUP의 결과보다 더 상세함)
SELECT 컬럼 FROM 테이블 GROUP BY CUBE(컬럼)

/*
  [PIVOT/UNPIVOT]
  행렬 변환
  자세한 설명 http://ggmouse.tistory.com/128
*/
SELECT 컬럼 FROM 테이블 PIVOT([집계 함수]([집계 컬럼명]) FOR [대상 컬럼명] IN ([컬럼이 될 값])) AS 피벗테이블명
SELECT 컬럼 FROM 테이블 UNPIVOT([집계될 데이터의 컬럼명] FOR [UNPIVOT할 컬럼 데이터의 컬럼명] IN ([UNPIVOT할 컬럼명])) AS 언피벗테이블명





# 순위 함수
자세한 설명 http://ggmouse.tistory.com/118

/* [ROW_NUMBER] */
SELECT ROW_NUMBER() OVER(ORDER BY 컬럼) FROM 테이블 -- 동일한 값이 있을 경우 순차적으로 순위를 매김 (중복 순위 존재X)
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) FROM 테이블 -- 정렬 조건 없이 SELECT 해서 나온 결과 그대로 순위를 매김

/* [RANK] */
SELECT ROW_NUMBER() OVER(ORDER BY 컬럼) FROM 테이블 -- 중복 순위 적용 후 다음 순위 변동 (2등이 2명일 경우: 2명 모두 2등, 다음 등수는 4등)

/* [DENSE_RANK] */
SELECT ROW_NUMBER() OVER(ORDER BY 컬럼) FROM 테이블 -- 중복 순위 적용 후 다음 순위 미변동 (2등이 2명일 경우: 2명 모두 2등, 다음 등수는 3등)





# NULL 함수

/*
  [NULLIF]
  값 비교
*/
SELECT NULLIF(컬럼1, 컬럼2) FROM 테이블 -- 컬럼1과 컬럼2의 값이 동일할 경우 NULL, 아닐 경우 컬럼1 반환)
ex. SELECT NULLIF(4, 4) -- 결과: NULL
ex. SELECT NULLIF(3, 4) -- 결과: 3

/*
  [ISNULL]
  널 대체
*/
SELECT ISNULL(컬럼1, 컬럼2) FROM 테이블 -- 컬럼1의 값이 NULL일 경우 컬럼2의 값 반환

/*
  [COALESCE]
  널 체크
*/
SELECT COALESCE(컬럼1, 컬럼2, 컬럼3...) FROM 테이블 -- 컬럼1, 컬럼2, 컬럼3... 첫번째로 NULL이 아닌 값 반환
ex. SELECT COALESCE(NULL, 4, 5) FROM 테이블 -- 결과: 4





# 집계 함수

/*
  [MAX/MIN]
  최대/최소
*/
SELECT MAX(컬럼) FROM 테이블 -- 컬럼의 최대값
SELECT MIN(컬럼) FROM 테이블 -- 컬럼의 최소값

/*
  [COUNT/AVG/SUM]
  개수/평균/합계
*/
SELECT COUNT(*) FROM 테이블 -- 전체 데이타 개수
SELECT COUNT(컬럼) FROM 테이블 -- 컬럼이 NULL이 아닌 데이타 개수
SELECT AVG(컬럼) FROM 테이블 -- 컬럼의 평균값
SELECT SUM(컬럼) FROM 테이블 -- 컬럼의 합계

/*
  [COMPUTE]
  별도 집합 출력
*/
SELECT 컬럼 FROM 테이블 COMPUTE 집계함수(컬럼)





# 문자열 함수
자세한 설명 http://ggmouse.tistory.com/136, http://ggmouse.tistory.com/126

/*
  [ASCII/CHAR]
  아스키코드
*/
SELECT ASCII(문자열) -- 첫 번째 문자의 아스키 코드 반환
SELECT CHAR(값) -- 정수 아스키 코드의 문자를 반환

/*
  [REPLACE/STUFF/UPPER/LOWER/REVERSE/REPLICATE]
  문자열 변경
*/
SELECT REPLACE(문자열,기존문자열,대체문자열) -- 문자열 변경
SELECT STUFF(문자열,시작위치,길이,대체문자열) -- 문자열에서 시작위치와 길이를 기준으로 문자열 변경
SELECT UPPER(문자열) -- 대문자로 반환
SELECT LOWER(문자열) -- 소문자로 반환
SELECT REVERSE(문자열) -- 문자열 역순으로 반환
SELECT REPLICATE(문자열,숫자) -- 문자열을 지정한 수 만큼 반복

/*
  [LEFT/RIGHT/SUBSTRING]
  문자열 자르기
*/
SELECT LEFT(문자열,숫자) -- 문자열에서 왼쪽부터 지정한 길이의 문자 반환
SELECT RIGHT(문자열,숫자) -- 문자열에서 오른쪽부터 지정한 길이의 문자 반환
SELECT SUBSTRING(문자열,시작위치,길이) -- 문자열 자르기

/*
  [CHARINDEX/PATINDEX/LEN]
  위치/길이
*/
SELECT CHARINDEX(문자,문자열,[시작위치]) -- 문자열에서 문자의 위치를 반환 (문자 이용)
SELECT PATINDEX(패턴,문자열) -- 문자열에서 문자의 위치를 반환 (패턴 이용)
ex. SELECT PATINDEX('%꽁%', '손꽁쥐10살') -- 결과: 2
ex. SELECT PATINDEX('%[0-9]%', '손꽁쥐10살') -- 결과: 4
SELECT LEN(문자열) -- 문자열 길이 반환

/*
  [LTRIM/RTRIM/SPACE]
  공백
*/
SELECT LTRIM(문자열) -- 문자열의 왼쪽 공백 제거
SELECT RTRIM(문자열) -- 문자열의 오른쪽 공백 제거
SELECT SPACE(숫자) -- 지정한 수만큼 공백 문자 반환





# 형변환
자세한 설명 http://ggmouse.tistory.com/302

/* [CAST] */
SELECT CAST(유효한식 AS 데이타형)
ex. SELECT CAST(29.5 AS INT) -- 결과: 29

/* [CONVERT] */
SELECT CONVERT(데이타형, 유효한식, [옵션])
ex. SELECt CONVERT(VARCHAR, GETDATE(), 23) -- 결과: 2018-12-28





#IS_

/*
  [ISNUMERIC]
  숫자형 체크
*/
SELECT ISNUMERIC(값) -- 값이 숫자형이면 1 아니면 0 반환

/*
  [ISDATE]
  날짜형 체크
*/
SELECT ISDATE(값) -- 값이 DATETIME이면 1 아니면 0 반환





# 수치 함수

SELECT ABS(수식) -- 절대값
SELECT FLOOR(수식) -- 내림
SELECT CEILING(수식) -- 올림
SELECT ROUND(수식,반올림자리,[옵션]) -- 반올림/자르기 (옵션: 0 반올림, 1 자르기. 디폴트 값은 0)
SELECT POWER(수식,N) -- N승
SELECT SQUARE(실수) -- 제곱
SELECT SQRT(실수) -- 제곱근
SELECT SIGN(수식) -- 부호(1:양수, -1:음수, 0:0)
SELECT RAND([SEED]) -- 0~1 난수





# 날짜/시간

/*
  [CURRENT_TIMESTAMP/GETDATE/SYSDATETIME/GETUTCDATE]
  현재 날짜 및 시간
*/
SELECT CURRENT_TIMESTAMP -- 날짜 및 시간
SELECT GETDATE() -- 데이타베이스 시스템 날짜 및 시간
SELECT SYSDATETIME() -- SQL Server 날짜 및 시간
SELECT GETUTCDATE() -- UTC 날짜 및 시간

/*
  [YEAR/MONTH/DAY]
  년/월/일
*/
SELECT YEAR(날짜) -- 년 반환
SELECT MONTH(날짜) -- 월 반환
SELECT DAY(날짜) -- 일 반환

/*
  [DATEADD/DATEDIFF]
  날짜 계산
  자세한 설명 http://ggmouse.tistory.com/134
*/
SELECT DATEADD(날짜형식,값,날짜) -- 날짜와 값을 가지고 계산
ex. SELECT DATEADD(DAY, 5, '2018-12-27') -- 결과: 2019-01-01 (2018-12-27에서 +5일)
ex. SELECT DATEADD(MONTH, -5, '2018-12-27') -- 결과: 2018-7-27 (2018-12-27에서 -5달)

SELECT DATEDIFF(날짜형식,시작날짜,종료날짜) -- 두 날짜의 차이를 계산
ex. SELECT DATEDIFF(DAY, '2018-12-27', '2019-01-01') -- 결과: 5

/*
  [DATENAME/DATEPART]
  날짜 정보
  자세한 설명 http://ggmouse.tistory.com/120
*/

SELECT DATENAME(날짜형식, 날짜) -- 해당 날짜의 요일 정보
SELECT DATENAME(DW, GETDATE()) -- 결과: Thursday
SELECT DATEPART(날짜형식, 날짜) -- 해당 날짜의 요일 정보
SELECT DATEPART(DW, GETDATE()) -- 결과: 5

/*
  ※ 날짜형식

  year, yyyy, yy = Year
  quarter, qq, q = Quarter
  month, mm, m = month
  dayofyear = Day of the year
  day, dy, y = Day
  week, ww, wk = Week
  weekday, dw, w = Weekday
  hour, hh = hour
  minute, mi, n = Minute
  second, ss, s = Second
  millisecond, ms = Millisecond
*/





# 조인 JOIN 

SELECT * FROM 테이블 (INNER) JOIN 테이블 ON 조건 -- 조인 구문을 충족하는 데이타
SELECT * FROM 테이블 LEFT (OUTER) JOIN 테이블 ON 조건 -- 왼쪽 테이블의 모든 데이타와 조인 구문을 충족하는 오른쪽 테이블의 데이타
SELECT * FROM 테이블 RIGHT (OUTER) JOIN 테이블 ON 조건 -- 오른쪽 테이블의 모든 데이타와 조인 구문을 충족하는 왼쪽 테이블의 데이타
SELECT * FROM 테이블 FULL (OUTER) JOIN 테이블 ON 조건 -- 조인 구문과 상관없이 모든 데이타
SELECT * FROM 테이블 CROSS JOIN 테이블 ON 조건 -- 한쪽 테이블의 모든 행들을 다른쪽 모든 행과 조인 (결과 행수는 두 테이블의 데이타 행수의 곱)





# 흐름 제어
자세한 설명 http://ggmouse.tistory.com/148

/*
  [IF/ELSE]
  조건
*/
IF (조건문) 
  -- 조건이 참일 경우
ELSE
  -- 조건이 거짓일 경우


/*
  [CASE]
  조건
*/
SELECT 
  (CASE
  WHEN 조건1 THEN 결과1
  WHEN 조건2 THEN 결과2
  ELSE 결과
  END

/*
  [GOTO]
  이동
*/
T_LABEL: -- 라벨:
...
GOTO T_LABEL -- 라벨(T_LABEL) 부분으로 이동

/*
  [RETURN]
  종료
*/
IF (1=1)
BEGIN
  RETURN; -- 쿼리 실행 종료
END
SELECT * FROM 테이블 -- 수행되지 않음

/*
  [WHILE/BREAK/CONTINUE]
  반복문
*/
DECLARE @Cnt INT = 1;
WHILE (@Cnt <= 500)
BEGIN
IF (@Cnt = 10)
  BREAK; -- 반복문 탈출

  SET @Cnt = @Cnt +1;
END

/*
  [EXEC (=EXECUTE)]
  실행
*/
EXEC 프로시저 -- 1. 프로시저 실행

DECLARE @query VARCHAR(100) = 'SELECT * FROM 테이블'
EXEC (@query) -- 2. 쿼리 실행

/*
  SET
  자세한 설명 https://docs.microsoft.com/ko-kr/sql/t-sql/statements/set-statements-transact-sql?view=sql-server-2017
*/
-- 1. 지역 변수 값 설정
DECLARE @SetVariable1 INT;
DECLARE @SetVariable2 INT;
SET @SetVariable1 = 50;
SET @SetVariable2 = 60;
SELECT @SetVariable1 = 50, @SetVariable2 = 60; -- ※ SELECT 명령어는 한 번에 하나 이상의 변수를 할당할 수 있음

-- 2. 특정 정보를 처리하는 현재 세션을 변경  
SET NOCOUNT ON/OFF; -- 저장 프로시저의 영향을 받은 행 수를 나타내는 메시지가 결과 집합의 일부로 반환되지 않도록 설정





# 암호화
자세한 설명 http://ggmouse.tistory.com/208
※ HashBytes 함수의 반환값은 이진수이기 때문에 VARBINARY를 사용해야 함

/*
  [PWDENCRYPT]
  암호화
*/
SELECT PWDENCRYPT(문자열)

/*
  [PWDCOMPARE]
  암호 비교
*/
SELECT PWDCOMPARE(비교대상문자열, 암호화된HASH값) -- 같으면1, 다르면0
ex. SELECT PWDCOMPARE('ABC', PWDENCRYPT('ABC')) -- 결과: 1

/*
  [HASHBYTES]
  암호화 알고리즘으로 암호화 (MD2, MD4, MD5, SHA, SHA1, SHA2_256, SHA2_512)
*/
SELECT HASHBYTES(암호화알고리즘, 문자열)
ex. SELECT HASHBYTES('SHA1', 'ABC') -- 결과: 0x3C01BDBB26F358BAB27F267924AA2C9A03FCFDB8





# 오브젝트

1. 데이타베이스

/* 데이타베이스 생성 */
CREATE DATABASE 데이타베이스명


2. 테이블 

/* 테이블 생성 */
CREATE TABLE 테이블 (
  컬럼 데이타형 속성,
  A INT DEFAULT 0, -- 디폴트 지정
  B CHAR(1) CONSTRAINT
)
/*
  속성

  NOT NULL - 열이 NULL 값을 가질 수 없음
  UNIQUE - 열의 모든 값이 서로 다른 지 확인
  PRIMARY KEY - NULL과 UNIQUE NOT의 조합. 테이블의 각 행을 고유하게 식별
  FOREIGN KEY - 고유 다른 테이블의 행 / 기록을 식별
  체크 - 열의 모든 값이 특정 조건을 만족하는 것을 보장
  DEFAULT는 - 값이 지정되지 않은 경우에 열에 대한 기본 값을 설정
  INDEX - 매우 빠르게 데이터베이스에서 데이터를 생성하고 검색하는 데 사용
*/

/* 테이블 삭제 */
DROP TABLE 테이블

/* 테이블 변경 (컬럼/제약 변경) */
ALTER TABLE 테이블 ADD 컬럼 -- 컬럼 추가
ALTER TABLE 테이블 DROP COLUMN 컬럼 -- 컬럼 삭제
ALTER TABLE 테이블 ADD CONSTRAINT 제약 -- 제약 추가
ALTER TABLE 테이블 DROP CONSTRAINT 제약 -- 제약 삭제

/* 테이블 복사 (데이타 포함) ※ 제약조건은 복사되지 않음 */
SELECT 컬럼 INTO 생성할테이블 FROM 원본테이블

/* 임시 테이블 생성 */
CREATE TABLE #테이블 ( -- 로컬 임시 테이블
  컬럼 데이타형 속성
)
CREATE TABLE ##테이블 ( -- 전역 임시 테이블
  컬럼 데이타형 속성
)


3. 데이타

/*
  [INSERT INTO SELECT]
  데이타 복사
*/
INSERT INTO 대상테이블 (컬럼) SELECT 컬럼 FROM 원본테이블

/*
  [INSERT]
  데이타 저장
*/
INSERT INTO 테이블 (컬럼) VALUES (값)

/*
  [UPDATE]
  데이타 수정
*/
UPDATE 테이블 SET 컬럼 = 값 -- 전체 데이타 수정
UPDATE 테이블 SET 컬럼 = 값 WHERE 조건 -- 조건에 맞는 데이타 수정
UPDATE TOP (1) 테이블 SET 컬럼 = 값 -- 상위 1개 데이타 수정
UPDATE A SET A.컬럼 = B.컬럼 FROM 테이블A AS A, 테이블B AS B WHERE A.컬럼 = B.컬럼 -- JOIN UPDATE

/*
  [DELETE]
  데이타 삭제
*/
DELETE FROM 테이블 -- 전체 데이타 삭제
DELETE FROM 테이블 WHERE 조건 -- 조건에 맞는 데이타 삭제
DELETE TOP (1) FROM 테이블 -- 상위 1개 데이타 삭제

/*
  [TRUNCATE]
  전체 데이타 삭제
*/
TRUNCATE TABLE 테이블

/*
  [MERGE]
  입력/수정/삭제 한 번에 처리
  자세한 설명 http://ggmouse.tistory.com/130
*/
MERGE 대상테이블 AS A
USING 기준테이블 AS B
ON A.컬럼 = B.컬럼
WHEN MATCHED THEN 일치할때쿼리
WHEN NOT MATCHED THEN 불일치할때쿼리

ex.
MERGE TABLE_A AS A
USING TABLE_B AS B
ON A.COL1 = B.COL1
WHEN MATCHED THEN
INSERT (COL1) VALUES (1)
WHEN NOT MATCHED AND B.COL1 >= 2 THEN
UPDATE SET COL1 = 2
WHEN NOT MATCHED AND B.COL1 >= 2 THEN
DELETE;


4. 뷰

/* 뷰 생성 */
CREATE VIEW 뷰명
AS
SELECT * FROM 테이블

/* 뷰 삭제 */
DROP VIEW 뷰명


5. 저장 프로시저

/* 프로시저 생성 */
CREATE PROCEDURE 프로시저명 -- 1) 매개변수 없는 프로시저
AS
BEGIN
  ... 쿼리
END

CREATE PROCEDURE 프로시저명 -- 2) 매개변수 있는 프로시저
@ID INT
AS
BEGIN
  ... 쿼리
END

CREATE PROCEDURE 프로시저명 -- 3) 리턴값을 갖는 프로시저
AS
BEGIN
DECLARE @ID INT
  ...
  RETURN @ID
END

CREATE PROCEDURE 프로시저명 -- 4) OUTPUT 매개변수를 이용한 프로시저
@ID INT OUTPUT
AS
BEGIN
  SET @ID = 5;
  ...
END

/* 프로시저 수정 */
ALTER PROCEDURE 프로시저명
AS
BEGIN
  ... 쿼리
END

/* 프로시저 삭제 */
DROP PROCEDURE 프로시저명


6. 트리거 (특정 테이블에 입력,삭제,수정이 발생했을 때 다른 이벤트를 처리)

/* 트리거 생성*/
CREATE TRIGGER 트리거명 ON 테이블명
FOR INSERT/DELETE/UPDATE
AS 이벤트 발생시 실행될 쿼리


7. 커서

DECLARE 커서명 CURSOR FOR SELECT 컬럼 FROM 테이블 -- 커서 선언
OPEN 커서명 -- 커서 오픈
FETCH NEXT FROM 커서명 INTO @ID -- 첫 행을 읽어서 @ID에 저장

DECLARE @ID INT

WHILE @@FETCH_STATUS = 0
BEGIN
  ...
  FETCH NEXT FROM 커서명 INTO @ID -- 다음 행을 읽기
END

CLOSE 커서명; -- 커서 닫기
DEALLOCATE 커서명; -- 커서 할당 해제



참고 사이트
https://www.w3schools.com/sql
https://docs.microsoft.com/ko-kr/sql/t-sql




반응형