'MS SQL'에 해당되는 글 4건

Programming/Microsoft SQL Server

1. 주석

Program을 작성(C나 C++, VB등 뭐든지 좋습니다.)할때 작성한 Program Code가 수십에서 수백줄.. 수천줄 정도 된다고 가정해 봅시다.

이렇게 방대하게 만들어진 Program은 당장 개발할때 Program의 Image가 머리에 들어와 있기 때문에 큰 문제가 되진 않습니다만 시간이 지나고 며칠뒤 또는 몇개월 후 해당 Program을 다시 열어봤을때 Program이 도데체 어떻게 돌아가는지 파악하는게 쉽지 않은 경우가 많습니다.

심지어 자신이 만든 Program이다 할지라도 말이지요. 기억할 수 있느냐 하는 문제는 아무도 보장할 수 없는 것입니다.

그래서 Program Code에 개발자가 Code의 역활이나 기타 특징들을 기록해 둘 필요가 있는데 그것이 바로 주석에 해당합니다. 주석이란 프로그램내의 코드에서 실행되지 않는 부분으로 주로 개발자의 설명을 넣는용도로 많이 사용합니다.

SQL Query에서 주석을 표현하는 방법에는 두가지가 있습니다. 하나는 --이고 또다른 하나는 /* 와 */입니다.
단 한줄만 주석으로 처리할경우 --을 많이 쓰고 두줄이상인경우 /* */를 많이 사용합니다.(이 부분은 정해진것이 없습니다. 그냥 편한대로 사용하면 되는 것이죠.)

Select GetDate()

/* 아래 Query는 서버의 현재시간을 구하되 날짜만
표시하도록 합니다. */

Select Convert(Char(10), GetDate(), 120)


/*과 */을 사용해 주석을 표시하고 있습니다. 주석은 Program이 Compil될때 무시되는 부분으로서 오로지 Source상에서만 볼 수 있으며 주석이 아무리 많다 하더라도 Program의 성능을 영향을 끼치는 경우는 종류를 불문하고 없기 때문에 주석처리로 인한 성능문제는 생각하지 않아도 됩니다.(단 Source의 가독성에는 신경을 써야 겠지요.)

2. 식별자 (이름짓기)

데이터베이스를 생성 또는 데이터베이스에 열을 추가하는 경우, 변수 선언이나 뷰, 사용자함수처리등등... 곳곳에서 이름을 짓는 경우는 빈번히 발생합니다.

이런이름을 흔히 식별자라고 하며 MS-SQL에서 이 식별자는 두가지 종류가 존재합니다.

(1) 일반 식별자
(2) 구분 식별자

이름이란것을 '개똥이' 이렇게 내키는 대로 짓고 싶지만 아쉽게도 이름을 짓는데는 몇가지 규칙이 존재합니다. 이 규칙에 근거하여 지어진 이름을 일반식별자라고 부르지요.

그 잘난 이름짓는규칙은 다음과 같은 것들이 있습니다.

(1) 식별자 이름의 처음은 숫자로 시작할 수 없다.
영문이나(물론 한글등 유니코드문자도 사용가능합니다.) _, @, # 문자만 처음시작문자로 사용할 수 있으며 숫자는 두번째 부터 들어갈 수 있습니다.(보통의 경우 @로 시작하는 식별자는 변수, #로 시작하는 식별자는 임시테이블을 의미합니다. 또한 T-SQL내에서 쓰이는 전역함수는 @@로 시작합니다.)

(2) Select나 Delete, Insert등 Query내에서 전용으로 쓰이는 명령어나 이름등은 식별자로 사용할 수 없습니다. 이러한 이름들을 흔히 예약어라고 하는데 예약어를 포함하는 식별자는 사용이 가능합니다.

- Select          → 안됨. SQL Server내에서 Table을 조회하는 예약어임.
- SelectValue  → 가능. Table예약어를 포함하는 식별자

(3) 공백및 _, @, #, & 문자를 제외한 다른 특수문자는 사용할 수 없습니다.

반면 구분식별자는 위 규칙을 따르지 않은 식별자를 의미합니다. 이러한 식별자는 그대로 쓰일 수 없기때문에 반드시 []나 ""로 묶어줘서 사용해야 합니다.

[Select], "Select"

반드시 필요한 경우가 아니면 구분식별자는 그리 권장되지 않는 방법입니다.

'Programming > Microsoft SQL Server' 카테고리의 다른 글

우편번호 DB (MSSQL)  (0) 2010.05.07
[SQL Server] - Sample Database 설치  (0) 2010.05.06
[SQL] 주석과 식별자  (0) 2010.05.04
[SQL] Select  (0) 2010.05.03
[SQL] 시간관련 형식 변환  (0) 2010.04.30
[SQL] Table 조회시 합계 표시하기  (0) 2010.04.26
0 0
Programming/Microsoft SQL Server
Select *
From Person.Person

Person.Person 테이블의 모든행과 열값을 가져오도록 합니다.


Select *
From Person.Person
Where PersonType = 'IN'

Person.Person 테이블의 PersonType 열값이 'IN'인것만 가져오도록 합니다.


Where 이하 조건문에서는 '='연산자 이외에 다음의 다양한 비교 연산자를 사용할 수 있습니다.

 조건  설명
 >  크다.
 <  작다.
 >=  크거나 같다.
 <=  작거나 같다.
 <>, !=  같지않다.
 !>  크지않다.
 !<  

Select *
From Person.Person
Where PersonType = 'IN'
And FirstName Like '%Andy%'

PersonType이 'IN'이며 FirstName중에 'Andy'라는 문자열값을 포함하고 있는것만 조회합니다.


Like는 문자열관련 비교 연산자에 해당하며 지정한 문자 혹은 문자열을 조건으로 데이터를 조회하게 됩니다. 반면 Not Like는 Like와 반대로 지정한 문자열을 포함하지 않는것만을 조회대상으로 합니다.

Like에서 비교대상 문자열을 지정하는 경우, 아래 특수문자를 사용하여 좀더 유연한 조회조건을 지정할 수도 있습니다.

(1) % 
다른 문자열을 대체합니다. 예를 들어 '%Korea' 라고 쓰는경우 앞의 문자열은 상관없이 끝문자열이 'Korea'로 끝나는 것만을 조회대상으로 합니다. 반면 'Korea%'라고 하는 경우 끝 문자열은 상관없이 시작문자열이 'Korea'인것만을 조회 대상으로 합니다.

결국 %를 조건으로 하고자 하는 문자열의 앞뒤에 모두 사용할 경우 전체문자열 중에서 'Korea'라는 문자열을 포함하는 것만 조회대상이 됩니다.

(2) _
%는 문자열 단위의 조회조건을 나타내지만 _ 는 한문자 만을 대체할 수 있습니다.

예를 들어 '_Korea' 이면 'Korea'로 끝나는 6자의 문자열만을 조건으로 하고 'Korea_'이면 'Korea'로 시작하는 6자의 문자열만을 조회대상으로 합게 됩니다.

물론 '_Korea_'또한 'Korea'를 포함하고 있는 7문자의 문자열을 조회 대상으로 보게 됩니다.

(3) []
일부분의 범위만을 조회대상으로 하고자 경우 []를 쓸 수 있습니다.

'[a-c]Computer'라고 하면 앞문자가 a부터 c까지이며 Computer로 끝나는 문자열만을 대상으로 한 것으로서 aComputer, bComputer, cComputer가 조건이 됩니다.

'[a,c]Computer'는 앞문자가 a와 c이며 Computer로 끝나는 문자열만 해당하는 것으로 aComputer, cComputer가 조회 대상이 됩니다.

반면 []안에 ^를 지정할경우 지정한 문자에 포함되지 않는 것만([]의 반대개념)을 조건으로 보게 됩니다.

Select *
From Person.Person
Where PersonType = 'IN'
Or EmailPromotion = 0

PersonType이 'IN'이거나 EmailPromotion이 0인것만 조회합니다.


Where 조건식에는 And 또는 Or를 통해 조건식에서 참, 거짓을 적용할 수도 있습니다.

(1) And
지정한 두 조건이 모두 참이여야만 합니다. 예를 들어 a = 0 And b = 0 라고 했을 경우 a가 0이고 b가 0인것만을 조회대상으로 합니다.

(2) Or
지정한 두 조건중에서 하나만 참이면 됩니다. 예를 들어 a = 0 or b = 0 라고 했을 경우 a가 0이거나 b가 0인것만을 조회대상으로 하게 됩니다.

참고:
Not 조건식은 부정의 의미로서 해당 조건이 거짓에 대항하는 경우입니다.
예를 들어 Not PersonType = 'IN' And FirstName Like '%Andy%' 이라는 조건식이 지정되는 경우  PersonType이 IN이 아니고 FistName에 Andy문자열이 포함된것만을 조회한다는 의미가 됩니다.

Select *
From Person.Person
Where PersonType In ('IN', 'EM')

PersonType이 'IN'이거나 'EM'인것만 조회합니다.


In은 ()안에서 ,로 구분된 값에 해당하는 것만을 조회 대상으로 합니다. 이때 In은 포함하는 것을 Not In은 포함하지 않는 것을 의미합니다.

Select *
From Person.Person
Where BusinessEntityID BetWeen 10 And 20

BusinessEntityID값이 10에서 20까지인것만을 조회합니다.


BetWeen은 지정된 범위안에 해당하는 모든 열을 조회 대상으로 합니다. 그래서 <1-6>에서 쓰인 BetWeen조건은 Where BusinessEntityID >= 10 And BusinessEntityID <= 20과 같은 결과를 가져오게 됩니다.

또한 Not BetWeen은 지정된 범위안에 포함되지 않는 경우에 해당합니다.

Select *
From Person.Person
Where Title Is Null

Title열값이 Null인것만을 조회합니다.


Null이라고 하는것은 아무것도 없는 상태를 의미합니다. 이것은 0 혹은 공백과는 완전히 다른 것으로서 이들과 혼동하지 않도록 주의하십시오.

Null은 그 특징에 따라 일반 연산자로는 Null을 구분할 수 없습니다. 그래서 Is Null과 Is Not Null등의 Null전용 연산자를 따로 써야 합니다.(Is Null은 Null인것만 Is Not Null은 Null이 아닌것만을 조회대상으로 합니다.)

참고:
Set Ansi_Nulls Off 명령을 통해 Ansi_Nulls를 Off시키면 Null을 Is Null이나 Is Not Null이 아닌 다른 일반연산자(= 이나 <> 등)를 통해서도 조회가 가능해 집니다.(그리 권장하지는 않습니다.)

Select DepartmentID, Name
From HumanResources.Department

HumanResources.Department Table에서 DepartmentID와 Name열만을 조회합니다.


조회하고자 하는 Table의 모든열을 가져오려면 * 를 사용하고 열의 일부분만 가져오려면 해당 열 이름을 ,로 구분지어 지정하면 됩니다.

Select DepartmentID, Name
From HumanResources.Department
Order By DepartmentID

HumanResources.Department Table에서 DepartmentID와 Name열만을 조회하되 DepartmentID열값의 순으로 정렬합니다.


Order By는 지정한 열을 기준으로 데이터를 정렬하여 출력하도록 합니다.

만일 데이터를 오름차순으로 정렬하고자 하신다면 "Orde By [정렬기준열이름] Asc" 로 하고 내림차순으로 하고자 하신다면 "Orde By [정렬기준열이름] Desc"처름 사용하시면 됩니다.(기본값 Asc)

참고:
정렬기준열값에 Null이 있는경우 가장 작은 값으로 처리합니다.

Select DepartmentID, Name As '이름'
From HumanResources.Department

Name열을 조회할때 열 이름을 '이름'으로 출력합니다.

 

이는 특정 컬럼에 별칭을 지정한 것으로 As는 있어도 되고 없어도 됩니다. 약간 다른 방법으로 별칭 = 열이름 형식과 같이 지정할 수도 있습니다.

 

Select 이름 = [Name]
From HumanResources.Department;

 

Select DepartmentID, 'Name : ' + Name
From HumanResources.Department


HumanResources.Department Table조회시 Name열값 앞에 "Name : "라는 문자열을 더해서 출력하도록 합니다.


Select BusinessEntityID, Stuff(NationalIDNumber, 3, 0, '-')
From HumanResources.Employee


Stuff함수를 쓰면 조회하고자 하는 열값 중간에 다른 문자열을 삽입하여 조회할 수 있습니다.

Stuff(대상열 혹은 문자열, 삽입위치(삭제위치), 삭제위치에서 부터 삭제할 문자수, 삽입위치에서 부터 삽입할 문자 혹은 문자열)

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL Server] - Sample Database 설치  (0) 2010.05.06
[SQL] 주석과 식별자  (0) 2010.05.04
[SQL] Select  (0) 2010.05.03
[SQL] 시간관련 형식 변환  (0) 2010.04.30
[SQL] Table 조회시 합계 표시하기  (0) 2010.04.26
[SQL] 하위 Query(Sub Query)  (0) 2010.04.21
0 0
Programming/Microsoft SQL Server
1. ANSI(년.월.일)

Select Convert(Char(08), GetDate(), 2)
Select Convert(Char(10), GetDate(), 102)


2. ISO(년월일)

Select Convert(Char(06), GetDate(), 12)
Select Convert(Char(08), GetDate(), 112)


3. ISO(8601) - 날짜 표기에 관한 국제 표준규격(년-월-일T시:분:초.밀리초)

Select Convert(Char(23), GetDate(), 126)


참고:
127 로 하면 Z 표준시로 나타남

4. ODBC(년-월-일 시:분:초, 년-월-일 시:분:초.밀리초)

Select Convert(Char(20), GetDate(), 120)
Select Convert(Char(20), GetDate(), 20)


Select Convert(Char(23), GetDate(), 121)
Select Convert(Char(23), GetDate(), 21)


5. 독일표준(일.월.년)

Select Convert(Char(10), GetDate(), 104)
Select Convert(Char(08), GetDate(), 4)


6. 미국표준(월/일/년, 월-일-년)

Select Convert(Char(10), GetDate(), 101)
Select Convert(Char(08), GetDate(), 1)


Select Convert(Char(10), GetDate(), 110)
Select Convert(Char(08), GetDate(), 10)


7. 영국표준(일/월/년)

Select Convert(Char(10), GetDate(), 103)
Select Convert(Char(08), GetDate(), 3)


8. 유럽표준(일 월 년 시:분:초.밀리초)

Select Convert(Char(25), GetDate(), 113)
Select Convert(Char(25), GetDate(), 13)


9. 이탈리아(일-월-년)

Select Convert(Char(10), GetDate(), 105)
Select Convert(Char(08), GetDate(), 5)


10, 일본(년/월/일)

Select Convert(Char(19), GetDate(), 100)
Select Convert(Char(19), GetDate(), 0)


11. 표준(월 일 년 시:분AM 또는 PM, 월 일 년 시:분:초.밀리초AM 또는 PM)

Select Convert(Char(19), GetDate(), 100)
Select Convert(Char(19), GetDate(), 0)


Select Convert(Char(26), GetDate(), 109)
Select Convert(Char(26), GetDate(), 9)


12. 프랑스표준(일/월/년)

Select Convert(Char(10), GetDate(), 103)
Select Convert(Char(08), GetDate(), 3)


13. 회교표준(일 시:분:초:밀리초 년 월AM 또는 PM, 일/월/년 시:분:초:밀리초AM 또는 PM)

Select Convert(nChar(32), GetDate(), 130)
Select Convert(Char(25), GetDate(), 131)


14. 기타

(1) 일 월 년

Select Convert(Char(11), GetDate(), 106)
Select Convert(Char(9), GetDate(), 6)


(2) 월 일, 년

Select Convert(Char(12), GetDate(), 107)
Select Convert(Char(10), GetDate(), 7)


(3) 시:분:초

Select Convert(Char(8), GetDate(), 108)
Select Convert(Char(8), GetDate(), 8)


(4) 시:분:초:밀리초

Select Convert(Char(12), GetDate(), 114)
Select Convert(Char(12), GetDate(), 14)

'Programming > Microsoft SQL Server' 카테고리의 다른 글

[SQL] 주석과 식별자  (0) 2010.05.04
[SQL] Select  (0) 2010.05.03
[SQL] 시간관련 형식 변환  (0) 2010.04.30
[SQL] Table 조회시 합계 표시하기  (0) 2010.04.26
[SQL] 하위 Query(Sub Query)  (0) 2010.04.21
[SQL] 흐름제어 구문  (0) 2010.04.08
0 0
Programming/Microsoft SQL Server
1. 숫자(정수)

 데이터형  크기  범위
 Begint  8byte  -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
 Int  4byte  -2,147,483,648 ~ -2,147,483,647
 Tinyint  2byte  0 ~ 255
 Bit  1byte  1, 0, Null
 Smallint  4byte  -32,768 ~ 32,767

2. 실수

(1) 고정형(Decimal, Numeric)
크기및 범위 : Numeric(전체크기, 소수점이하크기)

만일 Numeric(12, 2)라고 한다면 전체가 12자리이고 그 중에서 소수점이 2자리임을 의미합니다. 이때 전체크기가 1~9라면 5 byte, 10~19라면 9 byte, 20~28이라면 13 byte의 크기를 갖게 됩니다. 즉, 전체자리가 위와같이 증가한다면 크기는 4byte씩 늘어나는 것입니다.

또한 사용상 Decimal과 Numeric은 차이가 없습니다.

(2) 부동형실수(Float, Real)
크기및 범위 : Float(숫자)

Float에는 얼마만큼의 숫자가 들어가느냐에 따라 표현가능한 자리수가 달라집니다. 일반적으로 1~24까지 7자리(4 byte), 25~53까지 15자리(8 byte)표현이 가능합니다.

Real은 Float(24)와 같으며 7자리까지만 표현이 가능합니다.

Float과 Real은 상당히 큰 숫자를 다룰 수 있지만 근사치 데이터를 저장하는데, 실수를 다르는 경우 되도록 Decimal을 사용하는 것이 좋습니다.

3. 통화(통화형식은 소수점 이하 4자리수까지로 제한합니다.)

 데이터형  크기  범위
 Money  8byte  -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
 Smallmoney  4byte  -214,748.3648 ~ 214,748.3647

4. 문자(문자열)

 데이터형  크기  범위
 Char(n) / NChar(n)  입력된 n byte / 입력된 n * 2 byte  8000자 이하 / 4000자 이하
 Varchar(n) / NVarchar(n)  n에 입력된 크기와 상관없이 실제 사용된 만큼  8000자 이하 / 4000자 이하, MAX지정시 2기가 / 1,073,741,823자(단 MAX는 MS SQL 2008버전부터는 사용되지 않습니다.)
 Text / NText  231-1 byte / 230-1 byte  2,147,483,647자 / 1,073,741,823자

Text 나 NText 그리고 Image는 더이상 MS SQL Server에서 지원하지 않을 예정이니 사용하지 말고 대신 VarChar(Max), nVarChar(Max), Varbinary(Max)를 사용하는 것이 좋습니다.

Char는 고정형입니다. 예를 들어 Char(100)이라고 하면 100바이트 크기를 나타냅니다. 'abc'문자열을 저장하는 경우 3바이트만을 필요로 하지만 100중 3만 차지하고 나머지 97바이트는 버려집니다. 반면 VarChar는 가변형식으로서 VarChar(100)을 하더라도 'abc'를 저장할때는 3바이트만을 차지하기 때문에 공간효휼성은 더 좋습니다. 다만 성능은 Char형이 더 우위에 있습니다.

참고:
n으로 시작되는 형식은 유니코드문자용입니다.(대부분의 경우 크기는 n이 없는 형의 * 2 가 되며 저장할 수 있는 크기는 n이 없는 형의 절반입니다.)

5. 날짜형식

 데이터형  크기  범위
 Datetime  8byte  1753-01-01 ~ 9999-12-31(ms단위까지)
 SmallDateTime  4byte  1990-01-01 ~ 2079-06-09(분까지)

참고 :
년도를 4자리로 하지 않고 두자리만 지정시 년도는 다음과 같이 인식됩니다.
00 ~ 49 까지 : 2000년대
50 ~ 99 까지 : 1900년대

6. 이진형식

 데이터형  범위
 Binary(n) / VarBinary(n)  1~8000까지의 이진데이터(n을 생략시 1, cast에서 지정하지 않으면 30을 기본)
 Image  232-1byte(2,147,483,647 byte까지)

7. 시스템 형식

 데이터형  설명
 Cursor  커서
 Sql_Variant  IMAGE, NTEXT, NVARCHAR(MAX), TEXT, TIMESTAMP, VARCHAR(MAX), XML를 제외한 모든 자료형 대체가능
 Table  Table
 TimeStamp  TABLE의 행이 바뀔때마다 바뀌는 고유한 숫자(8 byte)
 Uniqueidentifier  Newid()를 통해 발생되는 고유값으로 16진수로 구성된 각 자리수가 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx형태로 구성되며 IS NULL이나 IS NOT NULL, =, <=, >=, <>, >, < 의 연산자만 허용합니다.
 Xml  Xml

8. 사용자 형식

(1) sp_addtype

sp_addtype 이름, '데이터형', null 여부, '소유자' 의 형태로 씁니다. null여부와 소유자는 생략할 수 있는데 이경우 null허용하게 되며 해당 데이터형은 현재사용자가 소유자가 되는것이 기본입니다.

sp_addtype postal, 'Char(07)';
Go

Declare @ipostal As postal;
Set @ipostal = '780-080';
Select @ipostal;


지정한 사용자 형식을 삭제하는 방법은 다음과 같습니다.

sp_droptype postal;

(2) Create Type

Create Type은 sp_addtype에 비해 소유자를 지정할 수 없을뿐 sp_addtype과 같습니다.
사용형식은 'Create Type 이름 From 데이터형, null 여부'로 구현됩니다.

Create Type postal From Char(07) Not Null;
Go

Declare @ipostal As postal;
Set @ipostal = '780-080'
Select @ipostal;


지정한 사용자 형식을 삭제하는 방법은 다음과 같습니다.

Drop Type postal;


9. ISO 표준 형식


MS SQL Server는 ISO와의 호환을 위해 다음 단어를 해당 형식으로 일치시켰습니다. 따라서 Char대신 Character를 사용할 수 있습니다.


 본래형식

 ISO형식

 Char

 Character

 VarChar

 Character Varying

 Varbinary

 Binary Varying

 Decimal

 Dec

 Float

 Double Precision

 Int

 Integer

 nChar

 National Character

 nVarChar

 National Character Varying

 RowVersion

 Timestamp


2 0
1
블로그 이미지

클리엘