Transact-SQL (T-SQL)
Transact-SQL은 DDL, DML, DCL 3가지 종류의 SQL로 구성되어 있으며, MS utility인 isql이나 ISQL/w을 이용하여 수행시킬 수 있다.
Transact-SQL은 IF-THEN-ELSE같은 control-of-flow를 지원한다.
SQL을 잘 구사하려면 물론 SQL Server 구조와 동작에 대한 기본 지식이 필요하다. SQL의 특징을 잘 알고 사용을 하여야 효과적인 data access가 가능하여 지는 것이다.
SQL은 기본적으로 set-oriented processing을 기반으로 하는 언어이다. Set-oriented란 필요한 범위의 데이타를 한꺼번에 처리하는 방식이다. 이것은 파일 처리에서 하나의 레코드씩 순차적으로 처리하였던 방식과 비교가 된다. 그러나 대부분의 프로그래머가 파일 프로세싱 사고방식에 젖어서 SQL을 파일 처리 방식인 순차적 방식으로 코딩하는 사례가 대단히 많다. 결과적으로 액세스 성능이 저하되게 되지만 이것을 하드웨어 용량을 증설하여 해결하는 소위 무식한 처리를 하는 경우가 다반사임은 안타까운 일이다. RDBMS와 SQL을 사용하는 프로그래머는 RDBMS와 SQL의 특성을 파악하고 그에 맞는 사고의 전환으로 비싸게 구입한 내것을 알뜰하게 사용하고 자신의 기술을 축적하는 마음의 자세를 가지는것이 중요할 것이다.
DML(Data Manipulation Language)
-------------------------------------------------------
- 데이타를 입력/수정/삭제/검색하는 데이타 액세스용 언어이다.
- SELECT
- INSERT
- UPDATE
- DELETE
DDL(Data Definition Language)
------------------------------------------------------
- 데이타베이스 구조를 정의하고 데이타베이스 내의 객체를 생성/삭제 유지하는데 사용되는 언어들이다.
- ALTER TABLE
- CREATE PROCEDURE
- CREATE TABLE
- CREATE TRIGGER
- CREATE VIEW
- DROP DEFAULT
- DROP PROCEDURE
- DROP TABLE
DCL(Data Control Language)
---------------------------------------------------------
- 데이타베이스 객체를 액세스 하는 권한을 통제하는데 사용하는 언어들이다.
- GRANT
- REVOKE
Control of Flow
Control-of-Flow는 SQL의 원래 취지와는 부합하지 않는다. SQL은 비절차적인 언어로써 원하는 것을 요청하면 그 방법은 RDBMS가 결정하여 처리하여주는 방식이다. 그러나 다양한 혀현실세계는 절차적인 수행을 반드시 필요로 하는 부분이 있고, 이를 지원하기 위하여 부가된것이 Control-of-Flow 지원 keyword들이다.
따라서 이 절차적인 언어는 불가피한 경우가 아니면 사용하지 않는것이 RDBMS를 사용하는데 있어서 효과적인 방향이라는것을 명심하여야 한다.
Keywords: BEGIN...END 문장 블록을 정의한다.
GOTO level 정의한 level로 분기한다.
IF...ELSE 조건에 따라서 다른 로직 처리
RETURN 무조건 종료한다.
WAITFOR 정의한 시간만큼 다음 문장 수행을 지연시킨다.
WHILE 정의한 조건이 "정'이면 계속 반복 수행한다.
...BREAK WHILE loop에서 빠져 나온다.
...CONTINUE WHILE loop의 처음부터 다시 시작한다.
Samples:
IF (SELECT AVG(price) FROM titles) < 15
BEGIN
UPDATE titles
SET price = price * 2
SELECT title, price
FROM titles
WHERE price > 28
END
WHILE (SELECT AVG(price) FROM titles) < 30
BEGIN
UPDATE titles
SET price = price * 2
SELECT MAX(price) FROM titles
IF (SELECT MAX(price) FROM titles) > 50
BREAK
ELSE
CONTINUE
END
Cursors
- Row-by-row처리를 하고자 할때 CURSOR를 사용한다.
- Cursor를 사용하려면 다음과 같은 5단계를 거쳐야 한다.
문장 설명
DECLARE Cursor 선언
OPEN 선언된 cursor를 실행 시킨다.
FETCH OPEN으로 return된 row를 하나씩 사용자에게 return한다.
CLOSE OPEN되었던 cursor를 종료한다.
즉 cache에 할당되었던 cursor 정보가 삭제된다.
DEALLOCATE Cursor 선언문이 제거 된다.
- Samples
DECLARE authors_cursor CURSOR
FOR SELECT * FROM authors
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
SQL Server의 Datatype
타입 분류 데이타 타입 기타
Binary BINARY(n)
VARBINARY(n)
문자 CHAR(n) 1
Functions
---------------------------------------------------
Function 분류 종 류
Aggregate Functions COUNT(*), COUNT, AVG, MIN, MAX, SUM
Date Functions GETDATE, DATEADD, DATENAME, DATEDIFF, DATEPART
Mathematical Functions ABS, ACOS, ASIN, ATAN, ATN2, CEILING, COS,
COT, DEGREES, EXP, FLOOR, LOG, LOG10, PI, POWER,
RADIANS, RAND, ROUND, SIGN, SIN, SQRT, TAN
Niladic Functions CURRENT_TIMESTAMP, CURRENT_USER, SESSION_USER,
SYSTEM_USER, USER
String Functions +, ASCII, CHAR, CHARINDEX, DIFFERENCE, LOWER, LTRIM,
PATINDEX, REPLICATE, REVERSE, RIGHT, RTRIM,
SOUNDEX, SPACE, STR, STUFF, SUBSTRING, UPPER
System Functions COALESCE, COL_LENGTH, COL_NAME, DATALENGTH,
DB_ID, DB_NAME, GETANSINULL, HOST_NAME, IDENT_INCR,
IDENT_SEED, INDEX_COL, ISNULL, NULLIF, HOST_ID,
OBJECT_NAME, STATS_DATE, SUSER_ID, SUSER_NAME,
USER_ID, USER_NAME, OBJECT_ID
Text and Image Functions PATINDEX, TEXTPTR, SET TEXTSIZE, TEXTVALID
Type-conversion Functions CONVERT
CONVERSION 함수
데이타 타입을 변환할때 사용한다.
날짜 format을 변경하는데 사용된다.
데이타 타입 변환은 두가지 방법이 지원된다.
Implicit conversion : CONVERT를 사용 안해도 자동으로 변환시켜주는 데이타 타입들
Explicit conversion : 반드시 CONVERT로 변환지시를 하여야 하는 데이타 타입들
Syntax : CONVERT (datatype[(length)],expression[,style])
Style ... 변환된 날짜 format을 지정한다.
Style Number 출력 형태
0 or 100 mon dd yyyy hh:miAM
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy
104 dd.mm.yy
105 dd-mm-yy
106 dd mom yy
107 mon dd, yy
108 hh:mm:ss
9 or 109 mon dd yyyy hh:mi:ss:mmmAM
110 mm-dd-yy
111 yy/mm/dd
112 yymmdd
13 or 113 dd mon yyyy hh:mm:ss:mmm(24h)
114 hh:mi:ss:mmm(24h)
Examples :
SELECT titles, CONVERT(char(12), ytd_sales) FROM titles
SELECT CONVERT(char(12), GETDATE(),3)
Operators
--------------------------------------------------------------
조작자 분류 종 류
Arithmetic Operators + (더하기), - (빼기), * (곱하기), / (나누기), % (나머지)
Bitwise Operators & (AND), | (OR), ^ (Exclusive OR), ~ (NOT)
Comparison Operators =, <, >, >=, <=, <>
Outer Join Operators *=, =*
String Operators + (문자열 결합)
Wildcard
Wildcard는 LIKE 를 사용하여 문자열을 search할때 사용하는 기호들을 말한다.
Syntax : expression [NOT] LIKE 'string'
*'string' 은 다음과 같은 wildcard를 이용한다. Wildcard 의미
% 모든 문자열 포함
_(밑줄) 문자 한개와 일치되는것
[ ] 대괄호 안의 어떤 한개 문자만이라도 일치되면 OK
[^] 대괄호 안의 문자들을 포함하지 않는 문자열
Samples
LIKE '5%' 숫자 5 또는 5로 시작하는 문자열
LIKE '5[%]' 문자 5%
LIKE '_n' an, in, on등 n으로 끝나는 두자리 문자
LIKE '[_]n' 문자 _n
LIKE '[a-cdf]' 문자 a,b,c,d,f
LIKE '[-acdf]' 문자 -,a,c,d,f
|