-- SQL서버의데이터형식

-- 정수형: Int, TinyInt, BigInt, Bit

-- 실수형: Float

-- 문자열(가변길이) : VarChar, NVarChar

-- 문자열(고정길이) : Char

-- 문자열: Text

-- 날짜형: DateTime, SmallDateTime

-- 기타: ...

 

-- 테이블생성예: 상황에맞게데이터형식지정

Create Table Members

(

       Num Int Identity(1, 1) Primary Key, -- 일련번호

       Name VarChar(25) Not Null,              -- 이름

       Age TinyInt Null,                             -- 나이(0~255)

       Ssn Char(13) Null,                            -- 주민번호(13)

       Intro Text Null,                              -- 자기소개

       AddDate SmallDateTime Null,                   -- 가입일

       Gender Bit Null,                              -- 남자(0), 여자(1)

       Height Float Null,                            -- (180.5)

       Photo Image Null,                             -- 사진(바이너리)

)

      


'.NET프로그래밍 > SQL Server 2008' 카테고리의 다른 글

18. 연산자  (0) 2009.09.11
17. 변수(Variable)  (0) 2009.09.11
15. 주석문  (0) 2009.09.11
14. 출력문  (0) 2009.09.11
13. 임시테이블 만들기(#, ## 사용)  (0) 2009.09.11
Posted by holland14
:

--주석: 한줄/두줄연산자

--[1] 한줄주석

--(더블하이픈) 뒤로나오는모든문자열은주석(설명문)으로처리된다.

 

 

--[2] 여러줄주석

/*

슬래시별표와별표슬래시사이에있는모든SQL문은

주석(설명문)으로처리된다.

*/

Posted by holland14
:

-- 출력문

 

-- 실제결과값출력/반환

Select '안녕하세요'

 

-- 쿼리편집기에서테스트확인용

print '반갑습니다'

 

 

-- 함수레벨에서값을반환

-- Return '또만나요'




Posted by holland14
:

--[11] 8. 임시테이블

--임시테이블만들기: Drop테이블로지울필요가없다!

--테이블만들때#을이름앞에붙인다.

-- #<TableName> : 지역임시테이블

-- ##<TableName> : 전역임시테이블

Create Table #LocalTable

(

    Column1 VarChar(20)

)

Go

 

Insert #LocalTable Values('테스트')

 

Select * From #LocalTable

 

 

Create Table ##GlobalTable

(

    Column1 VarChar(20)

)

Go

 

Insert ##GlobalTable Values('테스트')

Select  * From ##GlobalTable

 

 

-- 지역또는전역임시테이블은종료하면해당정보가모두날아간다.(저장프로시저만남아있다.)




Posted by holland14
:

--[1] 1. 데이터베이스만들기(Create)

-- ex1) 간단하게데이터베이스만들기

--데이터베이스자체를만들때는'MASTER'에두고한다.

Use Master  --Master데이터베이스로이동하는명령어.

Go

 

--[!] MyDatabase2 데이터베이스생성

Create Database MyDatabase2

Go

 

--[2] 데이터베이스에대한구체적인정보검색(해당데이터베이스만)

Exec sp_helpdb MyDatabase2

Go

--Execute sp_helpdb MyDatabase2

 

--데이터베이스에대한구체적인정보검색(모든데이터베이스)

Exec sp_helpdb

Go

 

--현재데이터베이스의옵션정보검색: 몰라도상관없다.

Use MyDatabase2

Go

 

Exec sp_dboption

Go

 

--[3] 2. 데이터베이스삭제하기(Drop)

-- ex2) 데이터베이스삭제하기

-- 삭제하려는데이터베이스가현재사용중이면삭제가되질않는다.

--Drop Database MyDatabase2

--Go

 

 

 

--[4] 3. 데이터베이스이름변경하기(sp_renamedb) :

-- SQL Server 2000은오로지아래명령어로만변경가능

-- ex4) 데이터베이스이름변경하기

--sp_renamedb 사용

--데이터베이스이름을바꿔주기전에먼저싱글유저모드로전환.

Exec sp_dboption 'MyDatabase2', 'single user', 'on'  --on, true를둘다사용가능

go

Exec sp_renamedb 'MyDatabase2', 'MyDatabase3'

go

Exec sp_dboption 'MyDatabase3', 'single user', 'false' --false, off 둘다사용가능

go

 

sp_helpdb   -- sp_helpdb로바뀐이름을확인할것.

 

-- 데이터베이스이름- 다시원래대로복구할것.

Exec sp_dboption 'MyDatabase3', 'single user', 'on'  --on, true를둘다사용가능

go

Exec sp_renamedb 'MyDatabase3', 'MyDatabase2'

go

Exec sp_dboption 'MyDatabase2', 'single user', 'false' --false, off 둘다사용가능

go

 

-- MyDatabase2 데이터베이스사용하기

use MyDatabase2

 

-- 연습용데이터베이스삭제

Use Master

Go

 

Drop Database MyDatabase2

Go    

 

Posted by holland14
:


앞서 했던  "Windows Server 2008에서 반드시 알아야 할 사항 10가지"와(10가지에서 몇 개는 생략하고) "SQL Server 2008에서 반드시 알아야 할 사항 10가지 중에서 5번(테이블)"까지하고('쿼리문'으로 Memos라는 이름의 '한줄메모장' 테이블을 만든다.) --> "Visual Studio 2008"에서 "웹 페이지를 생성"하여 '한줄메모장' 전체 레코드를 웹 페이지에 출력하도록 해본다.



목표 : http://www.memos.com/Default.aspx => 한줄메모장 전체 레코드를 웹 페이지 출력


Windows Server 레벨
1. 설치
2. 사용자 : ID : Memos, PWD : Pa$$w0rd
3. NTFS
4. 공유 : 생략
5. 웹
6. FTP : 생략
7. DNS
8. 미디어서버 : 생략
9. 백업/복원 : 생략
10. 원격접속 : 생략

SQL :
1. 설치
2. 데이터베이스 : MemoDB
3. 로그인사용자 : MemoDB / Pa$$w0rd
4. UDL 파일
 MemoDB.UDL
5. 테이블
    a. Memos 테이블 : 1000 개 레코드 등록

Visual Studio 레벨:
1. 설치
2. 웹 페이지 생성
    a. web.config 파일에 Connetction String 지정
    b. 웹브라우저로 요청 후 인스톨 진행

 

===============================================================================================



==> MemoDB.UDL파일 열어서 SQL Server의 데이터베이스에 연결 속성 지정하기 
 











===============================================================================================



 

-- 한줄 메모장

Create Table dbo.Memos

(

       Num Int Identity(1, 1) Not Null Primary Key,

       Name VarChar(25) Not Null,

       Email VarChar(100) Null,

       Title VarChar(150) Not Null,

       PostDate SmallDateTime Default(GetDate()),

       PostIP VarChar(15)  -- 127.111.111.111

)

Go

 

-- 샘플로 1000개 레코드 입력: T-SQL 문법

Declare @i Int

Set @i = 1;

While @i <= 1000

Begin

       Insert Into Memos(Name, Email, Title) Values('홍길동', 'h@h.com', '안녕')

       Set @i = @i + 1

End

Go

 

Select COUNT(*) From Memos

Go


 

===============================================================================================




< 실행결과 >

--> "Visual Studio 2008" 에서 "ASP.NET 웹 응용 프로그램"으로 웹폼을 만들고 Database를 SQL Server의 "MemoDB"로 하고 위에서 만든 테이블인 Memos를 연동하여 아래그림과 같이 '한줄메모장'의 전체 레코드(1000개)가 웹 페이지에 출력되도록 하였다.








Posted by holland14
:

-- 명령어로 데이터베이스 만들기

 

-- Master DB로 이동

Use Master

Go

 

 

-- DB 생성

Create Database MyDB

Go

 

-- DB 정보보기

Execute sp_helpdb MyDB

Go

 

-- DB 삭제

Drop Database MyDB

Go

 

-- 옵션을 두어서 DB 생성: 살면서 딱 한 번 타이핑?

CREATE DATABASE MyDb

ON

PRIMARY 

    (NAME = MyDb,

    FILENAME = 'C:\Temp\MyDb.mdf',

    SIZE = 100MB,

    MAXSIZE = 200,

    FILEGROWTH = 20),

    ( NAME = MyDb2,

    FILENAME = 'C:\Temp\MyDb2.ndf',

    SIZE = 100MB,

    MAXSIZE = 200,

    FILEGROWTH = 20)

LOG ON

   (NAME = Archlog1,

    FILENAME = 'C:\Temp\MyDb_Log.ldf',

    SIZE = 100MB,

    MAXSIZE = 200,

    FILEGROWTH = 20)

GO

 

 


<실행결과>

--> 위에서 작성한 "쿼리문(명령어)으로 데이터베이스 생성하기"를 해보았는데, 실행결과 C드라이브의 'Temp'폴더(실행전에 'Temp'폴더는 미리 만들어 두었다.)에 "MyDb.mdf / MyDb2.ndf / MyDb_Log.ldf"파일이 생성되었다.






Posted by holland14
:

--[1] 3. Update(수정)

--정의) Update 테이블명Set 필드명= [Where 조건]

--Update문이나 Delete문에서 조건을 생략하면... 전체 레코드에 영향을 미친다.

 

 

 

--연습용 데이터베이스 생성

--use master

--create database my_database

--use my_database

 

 

 

--[!] 전체 데이터 출력

select * From Memos Order By Num Desc

Go

 

 

 

--[!] 데이터수정(갱신) : Update

--Update

--Set

--Where

--Go

 

 

 

--[2] Name이 홍길동인 사람의 Email'hong@redplus.net'으로 변경.

Update Memos

Set

       Email = 'hong@redplus.net'

Where

       Name = '홍길동'

Go

 

Select * From Memos

Go

 

 

-- Name''으로 끝나는 레코드의 Name='한라산', Email='h@h.net'

Update Memos

Set Name='한라산', Email='h@h.net', Title='안녕하세요.'

Where Name Like '%'

Go

 

-- Where절이 없는 Update문은 사용하지 마시오.

Update Memos

Set Name='홍길동'

--Where Name = '한라산'

Go

 

--퀴즈) Name''자가 들어가는 사람의 Name'천두산'으로 변경.

Update Memos

Set

       Name = '천두산'

Where

       Name Like '%%'

Go

 

/* Update문으로 변경된 결과는 트랜젝션("Begin Tran")과 함께 사용하지 않는 경우에는 다시 되돌릴 수 없으므로 조심할 것! */

 

 

 

--[3] 트랜젝션과 함께...

Begin Tran

       Update Memos Set Name = '천두산' Where Name Like '%%'

       -- Rollback Tran

Commit Tran

Go    

      

      

      

--[4] 4. Delete(삭제): 레코드단위로 삭제...

--정의) Delete TableName [Where 조건]

 

--Delete

--Where

 

 

 

--[5] Memos에서 이름이 '천두산'인 사람의 모든 것 삭제.

Delete Memos

Where Name = '천두산'

Go

 

Select * From Memos Where Name = '천두산'

Go

 

 

--퀴즈) Email'h'자가 들어가는 사람의 모든 것 삭제.

Delete Memos Where Email Like '%h%'

Go

 

 

 

--[6] Memos의 모든자료 삭제.

Delete Memos

Go

 

Select * From Memos

Go

 

-- 테이블 삭제

Drop Table dbo.Memos

Go

 

Posted by holland14
:

--[1] 2. Select(검색)

--정의) Select FieldNameList From TableName

--           [Where 조건] [Order By 정렬시킬필드명[ASC | DESC]]

 

/*

Select

 

Select

From

Where

Order By

Group By

Having

Go

*/

 

 

 

--[2] 시스템 정보를 얻어오기(시스템함수 사용)

-- 현재서버의이름을검색

Select @@servername       
Go
--@@SERVERNAME(Transact-SQL) : SQL Server를 실행하는 로컬서버의 이름을 반환합니다.

 

-- 현재서버의버전을검색

Select @@version   

Go
--@@VERSION(Transact-SQL) : 현재 설치된 SQL Server의버전, 프로세서아키텍처, 빌드날짜 및 운영체제를 반환합니다.

 

 


 

--[3] Memos의 모든 필드 검색.

Select Num, Name, Email, Title, PostDate From Memos

Go

 

-- Memos의 모든 필드 검색('*' 와일드문자사용: 모든것).

Select * From Memos

Go

 

--[!] 참고. 시간차주기: Waitfor(몰라도상관없음)

Begin

       Select * From Memos

       Waitfor Delay '000:00:05'

End

 

 


 

--[4] Memos에서 Name필드와 PostDate필드만 검색

Select [Name], PostDate From Memos

Go

 


 

--[5] 조건검색 : Name이 홍길동인 사람의 모든 것 검색.

Select * From Memos Where Name = '홍길동'

Go

 

-- 조건검색 : Name이 홍길동이 아닌 사람의 Num, Email만 검색.

Select Num, Email From Memos Where Name <> '홍길동'

Go

 

 

--[6] 조건검색 : Name''으로 시작하는 사람의 모든 것 검색.

-- '%' 와일드문자사용. % -> 모든것... / Like 키워드사용.

Select * From Memos Where Name Like '%'

Go

 

-- 조건검색: Name''자가 들어가는 사람의 모든 것 검색.

Select * From Memos Where Name Like '%%'

Go

 

-- 조건검색: Name''자로 끝나는 사람의 모든 것 검색.

Select * From Memos Where Name Like '%'

Go

 

--퀴즈) 이름이''자로 끝나는 사람의 NameEmail만 검색.

Select Name, Email From Memos Where Name Like '%'

Go

 

 

 

--[7] 조건검색: Memos테이블에서  Name''자로 시작하고,

--[그리고| 또는], Email'h'자가 들어가는 사람의 모든 것 검색.

 

-- AND 연산자사용. : 둘다 참인 조건

Select * From Memos Where Name Like '%' AND Email Like '%h%'

Go

 

-- OR 연산자 사용.

Select * From Memos Where Name Like '%' OR Email Like '%h%'

Go

 

 

 

--[8] 정렬검색: Num의 역순(내림차순)으로 정렬.

-- 오름차순정렬(ASCending) = 1,2,3 순서대로...(기본값)

-- 내림차순정렬(DESCending) = 3,2,1 순서대로...

Select * From Memos Order By Num DESC

Go

 

-- 정렬검색 : Name 필드를 오름차순으로 정렬.

Select * From Memos Order By Name ASC -- ASC는생략가능.

Go

 

-- 다중정렬검색 : Name 필드의역순, 이메일의정순

Select *

From Memos

--Where

Order By

       Name Desc, Email Asc

Go

 

 

--퀴즈) Name''자가 들어가는 사람의 NameEmailNum의 역순으로 검색해라.

Select Name, Email

From Memos

Where Name Like '%%'

Order By Num Desc

Go

 

 

 

--[9] 상위 5개 레코드만 검색.(Top N)

Select Top 5 * From Memos Order By Num DESC

Go

 

 

 

--[10] 해당 테이블의 전체 레코드 수 반환

Select Count(*) From Memos

Go

 

Select Count(Num) From Memos

Go

 

-- 실행결과를 별칭을 주어서 출력할 때-> "AS"구문사용

Select Count(*) As [전체레코드수] From Memos

Go

 

--참고) Memos 테이블에 있는 상위 5개 자료를 XML로출력

Select Top 5 * From Memos FOR XML AUTO

Go

 

--참고) 전세계 유일한 문자열 값을 출력시켜주는 함수

Select NewId() -- GUID

Go

 

 

 


Posted by holland14
:

--[1] 쿼리편집기사용하기

-- '--'(Double-hyphen)은주석문으로처리... /* ~ */ 도주석으로처리

-- SQL 구문실행은해당구문을블럭을씌운후F5나실행버튼을누른다.

-- SQL문에서문자열은반드시작은따옴표(')로묶는다.

-- SQL을연습할때는항상SQL 2008 온라인설명서(도움말)를적극활용한다.

 

 

 

--연습용테이블생성(관리도구로만들어도됨)

-- Drop Table dbo.Memos

CREATE Table dbo.Memos

(

Num Int Identity(1, 1) NOT NULL  Primary Key, -- 번호

[Name] VarChar(25) Not Null,                  -- 이름

Email VarChar(50) NULL,                       -- 이메일

Title VarChar(150) NULL,                      -- 한줄메모(제목)

PostDate DateTime NULL Default(GetDate())     -- 작성일

)

Go

 

-- Name을묶은대괄호([ ])'이미존재하는키워드(예를들어"Name")'를 필드명으로사용하고싶거나, 또는필드명에공백이들어갈때(예를들어"Na me"와같이) 대괄호로묶어서사용하면된다.

 


 

-- Memos 테이블에대한속성을보여주는명령어

Exec sp_help Memos

Go

Execute sp_help Memos

Go

sp_help Memos

Go

 

 

 

 

--[2] 1. Insert(삽입)

--정의) Insert TableName(FieldNameList,...) Values(FileldValueList,...)

 

 

 

 

--[3] Memos에데이터삽입.

Insert Memos(Name, Email, Title, PostDate)

Values('홍길동','hong@hong.com','하늘',GetDate())

Go

   -- 부연설명: 위구문에서날짜함수인GetDate() 사용: 현재시스템의날짜시간을반환.

   -- 2001-08-19 01:07:20.070식으로출력.

 

Select GetDate()   -- 현재시간을검색. : .NET에서의DateTime.Now와같은역할

Go

Select Year(GetDate()), Month(GetDate()), Day(GetDate())    -- 오늘의날짜(//)

Go

Select DateDiff(DD, GetDate(), '2010-12-25')   -- 2010년크리스마스가얼마나남았는지계산(DD는일수)

Go

 

--(퀴즈) 내가지금까지몇일살아왔는지?

Select DateDiff(dd, '1982-02-05', GetDate())

Go

 

--검색결과를'' 형태로보고싶으면[메뉴]-[쿼리]-[표형태로결과표시(Ctrl+D)]를선택한다.

--검색결과를'텍스트' 형태로보고싶으면[메뉴]-[쿼리]-[텍스트로결과표시(Ctrl+T)]를선택한다.

 

Insert Memos(Name, Email, Title, PostDate)

Values('백두산','hong@hong.com','백두산',GetDate())

Go

 

Insert Into Memos(Name, Email, Title, PostDate)

Values('한라산','hong@hong.com','하늘',GetDate())

Go

 

Insert Memos(Email, Name, PostDate, Title)

Values('nimda@nimda.com', '임꺽정', GetDate(), '님걱정')

Go

 

--해당필드이름은생략가능하다. , 필드이름순서대로데이터를삽입해야한다.

Insert Memos Values('홍길동','hong@hong.com','서울',GetDate())

Go

 

 

 

 

--[4] Title 영역에'(작은따옴표) 삽입

-- 작은따옴표두개를연속으로붙여쓰면SQL에서는'(작은따옴표) 인식한다.

Insert Memos(Name, Email, Title, PostDate)

Values('홍길동','hong@hong.com','''',GetDate())

--Select * From Memos

Select ''''   -- '늘출력

Select ''''   -- ' 출력

 

 

 

 

--[5] Memos테이블에1000건의레코드기록(참고:Declare부터~End까지실행시켜야함.)

--Declare : 변수선언

--Set : 값할당

DECLARE @i Int             --변수선언    

SET @i = 1          --변수값할당

WHILE @i <= 200

BEGIN

       Insert Memos(Name, Email, Title, PostDate) Values('백두산','hong@hong.com','백록담',GetDate())

       Insert Memos(Name, Email, Title, PostDate) Values('한라산','hong@hong.com','제주도',GetDate())

       Insert Memos(Name, Email, Title, PostDate) Values('지리산','hong@hong.com','지루함',GetDate())

       Insert Memos(Name, Email, Title, PostDate) Values('계룡산','hong@hong.com','계룡대',GetDate())

       Insert Memos(Name, Email, Title, PostDate) Values('홍길동','hong@hong.com','홍길순',GetDate())

       SET @i = @i + 1

END

GO

 


Posted by holland14
: