a. bob 새 데이터베이스 생성

b. bob 새 로그인 생성

c .bob데이터베이스 선택 후 새 쿼리 생성


-- 사람

Create Table Members

(

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

       Name VarChar(25) Not Null                     -- 이름

)

Go

 

 

 

-- 메뉴

Create Table Menu

(

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

       MenuName VarChar(50) Not Null,                -- 메뉴명

       Price Int Not Null                            -- 가격

)

Go

 

 

 

-- 주문

Create Table Orders

(

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

       MemberID Int References Members(MemberID),           -- 회원번호

       MenuID Int References Menu(MenuID),                  -- 메뉴번호

       Status TinyInt Default(0),             -- 옵션: 0(기본), 1(곱빼기)

       Quantity TinyInt,                                    -- 수량

       OrderedDate SmallDateTIme Default(GetDate()),        -- 주문일시

       Etc VarChar(4000) Null                               -- 기타

)

Go

 

 

-- 6개예시문연습

Insert Members Values('홍길동')

Go

Insert Members Values('백두산')

Go

Insert Members Values('한라산')

Go

Select * From Members Order By MemberID Desc

Go

Select * From Members Where MemberID = 1

Go

Update Members Set Name = '임꺽정' Where Name = '홍길동'

Go

Delete Members Where MemberID = 1 And (1 <> 1)

Go

Select * From Members Where Name Like '%'

Go

 

--[!] 메뉴

Insert Into Menu Values('돈까스', '3000')

Go

Insert Into Menu Values('돈까스, 밥빼기', '2500')

Go

Insert Into Menu Values('돈까스, 반찬추가', '3500')

Go

 

--[!] 주문

Insert Into Orders Values(2, 1, 0, 1, GETDATE(), '빨리가져다주세요.')

Go

Insert Into Orders Values(1, 3, 0, 1, GETDATE(), '빨리가져다주세요.')

Go

Insert Into Orders Values(3, 1, 0, 1, GETDATE(), '빨리가져다주세요.')

Go

 

 

 

--[] : 주문자목록

-- 홍길동, 돈까스, 3000, 1, 2009-09-21

Create View [주문자목록]

       With Encryption

As

       SELECT    

             Members.Name, Menu.MenuName, Menu.Price, Orders.Quantity,

             Orders.OrderedDate, Orders.Etc

       FROM

             Members INNER JOIN Orders

                    ON Members.MemberID = Orders.MemberID

                           INNER JOIN Menu

                                 ON Orders.MenuID = Menu.MenuID

       --Order By OrderedDate Desc

Go

Select * From [주문자목록] Order By OrderedDate Desc

Go

 

-- 주문서작성: 전화걸어서

-- 돈까스, 10, 30000

-- 돈까스스, 2, 7000

-- 치킨마요, 1, 2500

Select m.MenuName, Sum(o.Quantity), Sum(m.Price)

From Menu m, Orders o

Where m.MenuID = o.MenuID

       And YEAR(o.OrderedDate) = YEAR(GetDate())

       And Month(o.OrderedDate) = Month(GetDate())

       And Day(o.OrderedDate) = Day(GetDate())

Group By m.MenuName

Go

 

--[1] 저장프로시저

-- 18개저장프로시저만드세요~~~

-- 입력(Add, Insert, Write), 출력, 상세, 수정, 삭제, 검색

 

-- 입력저장프로시저

Create Proc AddMember

       @Name VarChar(25)

As

       Insert Members Values(@Name)

Go

 

-- 출력저장프로시저

Create Proc GetMembers

As

       Select * From Members Order By MemberID Desc

Go

 

-- 상세저장프로시저

Create Proc GetMemberByMemberID

       @MemberID Int

As

       Select * From Members Where MemberID = @MemberID

Go

 

-- 수정저장프로시저

Create Proc UpdateMember

       @Name VarChar(25),

       @MemberID Int

As

       Update Members Set Name = @Name Where MemberID = @MemberID

Go

 

-- 삭제저장프로시저

Create Proc DeleteMember

       @MemberID Int

As

       Delete Members Where MemberID = @MemberID

Go

 

-- 검색저장프로시저

Create Proc SearchMember

       @SearchQuery VarChar(50)

As    

       Declare @sql VarChar(500) -- -> ' + 변수+ '

       Set @sql = 'Select * From Members Where Name Like ''' + @SearchQuery + '%'''

       Exec(@sql)

Go

SearchMember '한라'

Go

 

 

--[!] 메뉴관련저장프로시저6개만들어보세요...

 

-- 입력저장프로시저

Create Proc AddMenu

       @MenuName VarChar(25),

       @Price Int

As

       Insert Menu Values(@MenuName, @Price)

Go

 

-- 출력저장프로시저

Create Proc GetMenus

As

       Select * From Menu Order By MenuID Desc

Go

 

-- 상세저장프로시저

Create Proc GetMenuByMenuID

       @MenuID Int

As

       Select * From Menu Where MenuID = @MenuID

Go

 

-- 수정저장프로시저

Create Proc UpdateMenu

       @MenuName VarChar(25),

       @Price Int,

       @MenuID Int

As

       Update Menu Set MenuName = @MenuName, Price = @Price Where MenuID = @MenuID

Go

 

-- 삭제저장프로시저

Create Proc DeleteMenu

       @MenuID Int

As

       Delete Menu Where MenuID = @MenuID

Go

 

-- 검색저장프로시저

Create Proc SearchMenu

       @SearchQuery VarChar(50)

As    

       Declare @sql VarChar(500) -- -> ' + 변수+ '

       Set @sql = 'Select * From Menu Where MenuName Like ''' + @SearchQuery + '%'''

       Exec(@sql)

Go

 

 

--[!] 주문관련저장프로시저6

 

-- 입력저장프로시저

Create Proc AddOrder

       @MemberID Int,

       @MenuID Int,

       @Status TinyInt,

       @Quantity TinyInt,

       @Etc VarChar(4000)

As

       Insert Into Orders(MemberID, MenuID, Status, Quantity, Etc)

       Values(@MemberID, @MenuID, @Status, @Quantity, @Etc)

Go

 

-- 출력저장프로시저

Create Proc GetOrders

As

       Select * From Orders Order By OrderedDate Desc

Go

 

-- 상세저장프로시저

Create Proc GetOrder

       @ItemID Int

As

       Select * From Orders Where ItemID = @ItemID

Go

 

-- 일별주문상세저장프로시저

Create Proc GetOrdersByDate

       @Year Int,

       @Month Int,

       @Day Int

As

       Select m.MenuName, Sum(o.Quantity), SUM(o.Quantity * m.Price)

       From Menu m, Orders o

       Where m.MenuID = o.MenuID

             And @Year = YEAR(GetDate())

             And @Month = Month(GetDate())

             And @Day = Day(GetDate())

       Group By m.MenuName

Go

GetOrdersByDate 2009, 09, 21

Go

 

-- 수정저장프로시저

Create Proc UpdateOrder

       @MemberID Int,

       @MenuID Int,

       @Status Bit,

       @Quantity TinyInt,

       @OrderedDate SmallDateTime,

       @Etc VarChar(4000),

       @ItemID Int

As

       Update Orders

       Set MemberID = @MemberID, MenuID = @MenuID, Status = @Status,

              Quantity = @Quantity, OrderedDate = @OrderedDate, Etc = @Etc

       Where ItemID = @ItemID          

Go

 

 

 

 

 

Posted by holland14
:
 

데이터베이스 모델링(설계)

 

식별관계 : 부모의 기본키가 자식의 기본키 영역으로

비식별관계 : 부모의 기본키가 자식의 일반컬럼 영역으로





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



--> "ERWIN 프로그램" 설치 및 간단한 실습예제.



ㄱ. 데이터베이스 모델링을 설계하는 도구인 "ERWIN"프로그램을 설치한다.


ㄴ. ERWIN프로그램 설치 후 실습.

[ERwin Data Modeler]에서 새 창을 열고 메뉴바에서 - [Model]탭에서 [Model Properties]클릭 -->




--> 아래그림과 같이 [Model Properties]창 - [Notation]탭에서 "Logical Notation" "Physical Notion"에서 "IE"로 라디오버튼을 체크한 후 [ERwin Data Modeler]에서 그림그리기(설계)를 시작하면 된다.



--> 도구상자 그림이 있는 탭에서 "T"로 그려져 있는 Text를 클릭하고 "한 줄 메모장 테이블 설계"라고 텍스트를 입력해보았고,  Entity를 클릭한 후 창에 클릭하여 "한줄메모장", "Memos"라는 이름의 테이블을 그려보았다. 아래그림은 테이블 설계 후 "Physical(물리적)"로 속성을 설정했을 때의 화면이다.



--> 아래그림은 위의 그림과 똑같은 결과를 "Logical(논리적)"로 속성만 바꾼 화면이다.





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



--> 식별관계선/비식별관계선을 이용해서 테이블을 연결하여 설계한 예제 2개('식별관계선'과 '비식별관계선'을 이용하여 테이블들을 연결한 "상품관리"에 관련된 테이블 설계예제(그림왼쪽) 및 / '부서테이블'과 '사원테이블'을 "다 대 다 식별관계선"으로 연결한 예제(그림오른쪽))







Posted by holland14
:

-- 트리거(방아쇠) : 구매(주문),재고테이블: 한명하나의상품을구매하면, 재고테이블에서

-- 해당재고량을1감소를자동처리해주는시스템: 주로저장프로시저쓴다.

 

--[0] 트리거연습용테이블생성

--Drop Table dbo.[구매테이블]

Create Table dbo.[구매테이블]

(

       CustomerID Int, --고객번호

       ProductID Int,  --상품번호

       Quantity Int, --주문수량

)

Go

 

--Drop Table dbo.[재고테이블]

Create Table dbo.[재고테이블]

(

       ProductID Int,      --상품번호

       Quantity Int, --재고수량

)

Go

 

 

--[1] 재고테이블에1, 2번제품을10개넣어놓음(가상)

Insert [재고테이블] Values(1, 10)

Insert [재고테이블] Values(2, 10)

Select * From [재고테이블]

 

 

--[2] 구매가한번이루어지면자동으로재고테이블에서감소시키는트리거작성

Create Trigger [자동재고감소]

On [구매테이블]

For Insert -- 구매테이블에데이터가입력되는순간

As

       Update [재고테이블]

       Set Quantity = Quantity - 1

      

       Print '재고테이블에서1개감소했습니다.'

Go

 

 

--[3] 구매테이블에Insert문을실행시켜본다.

Insert [구매테이블] Values (1, 1, 1)

 

 

--[4] 트리거에의해재고테이블의모든필드값이자동으로감소됨을알수있다.

Select * From [재고테이블]

 

 

--[5] 트리거를수정해보자: 구매개수만큼줄이도록수정

Alter Trigger [자동재고감소]

On [구매테이블]

For Insert

As

       Declare @ProductID Int

       Declare @Quantity Int

      

       Set @ProductID = 0

       Set @Quantity = 0

      

       --Select * From [구매테이블]

      

       Select

             @ProductID = ProductID,

             @Quantity = Quantity

       From Inserted --Inserted에의해서입력된데이터받아옴(Inserted라는 임시테이블에서 ProductID값을 변수인 @ProductID에 대입하고, Quantity값을 변수인 @Quantity에 대입한다.)

      

       Update [재고테이블]

       Set Quantity = Quantity - @Quantity

       Where ProductID = @ProductID

Go

 

 

--[6] 1번제품만을1개감소

Insert [구매테이블] Values(1, 1, 1)

Select * From [재고테이블]

 

 

--[7] 2번제품만을3개감소

Insert [구매테이블] Values(1, 2, 3)

Select * From [재고테이블]

 

 

--[8] 트리거삭제

Drop Trigger [자동재고감소]

--[!] [자동재고감소]와동일한기능을하는입력저장프로시저

Create Procedure dbo.[자동재고감소프로시저]

       @CustomerID Int,

       @ProductID Int,

       @Quantity Int,

As

       Begin Tran

             Insert [구매테이블]

             Values(@CustomerID, @ProductID, @Quantity)

 

             Update [재고테이블]

             Set Quantity = Quantity - @Quantity

             Where ProductID = @ProductID

 

             Select * From [재고테이블]

       Commit Tran

Go

Exec [자동재고감소프로시저] 1, 2, 3

Go

      

 

Posted by holland14
:

--[1] 트랜잭션관련샘플테이블

Create Table dbo.TranTest

(

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

       Name VarChar(25) Not Null,

       PostDate SmallDateTime Default(GetDate())

)

Go

 

 

--[2] 샘플데이터입력

Insert Into TranTest(Name) Values('홍길동')

Go

Insert Into TranTest(Name) Values('한라산')

Go

Insert Into TranTest(Name) Values('백두산')

Go

 

 

--[3] 출력

Select * From TranTest

Go

 

 

--[4] 트랜잭션테스트(롤백) : Begin Tran ~ RollBack Tran

--[a] 트랜잭션시작

Begin Tran

 

--[b] SQL 구문실행

Delete TranTest Where Num = 2

 

--[c] 트랜잭션롤백: 트랜잭션이전으로상태돌리기(구문취소...)

RollBack Tran

 

 

--[5] 트랜잭션처리: Begin Tran ~ Commit Tran

Begin Tran

       Delete TranTest Where Num = 2    -- 성공

       --Select aaa From aaaa           -- 실패

       --Delete TranTest Where Num = 3  -- 실행되지않는다.

       If @@Error > 0

             RollBack Tran

Commit Tran

 

 

--[6] 트랜잭션에별칭부여

Begin Tran DeleteData

       Delete TranTest Where Num = 3

       Select * From TranTest

RollBack Tran DeleteData

 

 

--[7] 다중트랜잭션처리

Begin Tran

       Delete TranTest Where Num = 6

       Begin Tran

             Delete TranTest Where Num = 7

             Select @@TranCount -- 2

RollBack Tran -- 전체트랜잭션을되돌린다.

Commit Tran

 

Select * From TranTest

 

 

--[8] 트랜잭션단계확인

Begin Tran

       Update TranTest Set Neme = '트랜잭션' Where Num = 8

       Begin Tran

       Update TranTest Set Name = '트랜잭션' Where Num = 9

             Select @@TranCount -- 2

RollBack Tran -- 전체트랜잭션을되돌린다.

Commit Tran

 

 

--[9] 트랜잭션의주요사용

Begin Tran

 

       Insert Into TranTest(Name) Values('홍길동')

      

       Update TranTest Set Name = '트랜잭션' Where Num = 14

      

       Insert Into TranTest(Name) Values('홍길동')

      

       If @@Error > 0             -- 명시적으로트랜잭션되돌리기

       Begin

             RollBack Tran

       End

      

Commit Tran

 

Select * From TranTest

 

 

--[10] 한번처리에여러개의구문처리시트랜잭션을반드시적용

Begin Tran

       Insert

       Update

       Delete

Commit Tran


Posted by holland14
:

--[!] OutputReturn 키워드

 

--[1] 샘플테이블생성

Create Table dbo.Products

(

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

       ModelName VarChar(25) Not Null,                 -- 상품명

       SellPrice Int Null                                     -- 판매가

)

Go

 

 

--[2] 예시문입력

Insert Into Products Values('좋은책', 5000);

Insert Into Products Values('좋은컴퓨터', 10000);

Insert Into Products Values('좋은냉장고', 9000);

 

 

--[3] 상품의가격을2배로업데이트, 업데이트된레코드의개수를반환

Create Proc UpdateSellPrice

       @ProductID Int,

       @RecordCount Int Output -- 결과값을리턴, 초기화하지않은채변수값만전달

As

       Update Products Set SellPrice = SellPrice * 2 Where ProductID > @ProductID     

       Set @RecordCount = (Select @@RowCount) -- 현재프로시저내에서업데이트된레코드개수를나타낸다.

Go

--Exec UpdateSellPrice 1, 1

--Go

Select * From Products

Go

Declare @RecordCount Int

-- Set @RecordCount = 0    -> OutputSet키워드로초기화하지않는다. C#에서의Out과동일한역할을한다.

Exec UpdateSellPrice 1, @RecordCount Output

Select @RecordCount

Go

 

 

--[4] Products 테이블에있는모든레코드의개수반환

--[a]

Select Count(*) From Products;

 

--[b]

Create Proc GetProductCount

As

       Select Count(*) From Products;

Go

Execute GetProductCount -- 결과값을레코드셋, 스칼라값(집계함수)

Go

 

--[c]

Create Proc GetProductCountUp

       @RecordCount Int Output

As

       Select @RecordCount = Count(*) From Products;

Go

 

Declare @RecordCount Int

Exec GetProductCountUp @RecordCount Output

Select @RecordCount

Go

 

 

--[5] 상품의가격을반값으로조정한후영향받은레코드수반환(Return)

Create Proc UpdateSellPriceHalf

       @ProductID Int

As

       Update Products Set SellPrice = SellPrice / 2 Where ProductID > @ProductID

      

       --Select @@RowCount

       Return @@RowCount

Go

Declare @RecordCount Int

Exec @RecordCount = UpdateSellPriceHalf 1

Select @RecordCount

Go

 

 

Posted by holland14
:

--[1] 테이블생성: 고객, 나중에여러분들이무엇인가를만든다면???

Create Table dbo.Customers

(

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

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

       Age TinyInt Null, -- 나이

       Address VarChar(100) -- 주소

)

Go

 

 

--[2] 샘플데이터입력

Insert Customers Values('홍길동', 21, '서울')

Insert Customers Values('백두산', 31, '서울')

Insert Customers Values('한라산', 41, '부산')

Insert Customers Values('지리산', 21, '부산')

Insert Customers Values('설악산', 31, '대전')

 

 

-- Select문주요기능확인

 

-- 전체고객리스트

Select * From Customers

 

--[1] 중복제거(Distinct) : 고객들이사는지역을중복없이출력하시오.

Select Distinct Address From Customers

 

 

--[2] Group By : 집계함수그룹화: 같은지역고객의나이의평균

Select Address, Avg(Age) As [지역별평균나이] From Customers

Group By Address

 

 

--[3] 조건이있는집계함수그룹화:

-- 같은지역고객중나이가40이상인고객의나이의평균

Select Address, Avg(Age) From Customers

Where Age >= 40

Group By Address

 

-- Group By All : 위쿼리문중조건에맞지않아도지역리스트출력

Select Address, Avg(Age) From Customers

Where Age >= 40

Group By All Address

 

 

--[4] Having : 집계함수에대한조건처리

-- 같은지역고객의나이의평균이30 이상인데이터만출력

Select Address, Avg(Age) As 나이평균 From Customers

Group By Address

Having Avg(Age) >= 30

 

 

--[5] RollUp : 소계: 지역별나이를출력후나이소계(중간합계)

Select Address, Avg(Age) From Customers

Group By Address With RollUp

 

--[6] Cube : 소계: 지역별나이를출력후나이소계(중간합계)

Select Address, Avg(Age) From Customers

Group By Address With Cube

 

--[7] Grouping() 함수:

-- RollUp/Cube 사용시그룹화된항목인지표시(:1, 아니요:0)

Select Address, Avg(Age), Grouping(Address) As 그룹화여부

From Customers

Group By Address With Cube

 

--[8] Compute : 출력결과에대한집계

Select Address, Age From Customers

Compute Sum(Age), Avg(Age)

 

--[9] Compute By : 출력결과에대한집계에대한정렬

Select Address, Age From Customers Order By Address

Compute Sum(Age), Avg(Age) By Address

 

 

 

--[10] Case : 문장대체

Select Name, Age, Address From Customers

Select Name, Age,

       Address =

       Case Address

             When '서울' Then 'Seoul'

              When '부산' Then 'Busan'

             Else '다른지역'

       End

From Customers

 

 

--[!] 테이블삭제

Drop Table dbo.Customers

Go

 

--[1]번부터[10]번까지다시연습해보세요...

 

 

Posted by holland14
:

 

백업 복원

    1. 물리적인 MDF/LDF/NDF파일을 안전한 곳에 복사
      1. 서비스를 중지
        1. 작은 규모에서 10분정도의 중지시간 허용 가능한 상태라면
      1. 주의
        1. 기존에 등록된 사용자가 있으면 제거 다시 로그인 사용자 지정
          1. 해당 데이터베이스의 [보안-사용자-전에 사용하던 사용자] 제거
      1. 주로 개발환경에서 사용
    1. 백업 마법사를 사용해서 *.bak파일로 백업
      1. 서비스 가동(백업시 속도 저하 -> 새벽시간대)
        1. 규모에서 실시간 서비스 유지
      1. 종류
        1. 백업
        2. 차등 백업
        3. 스케줄링 가능
      1. 주로 서버 환경에서 사용


    1. 명령어 백업(책이나 MSDN온라인으로 검색해서 하면 된다.)
      1. Backup Database
      2. Restore Database

  

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

 

 --> 이전에 만들었던 데이터베이스인 "zip"이라는 이름의 데이터베이스를 백업하고 삭제한 후 다시 복원하는 과정을 아래 그림과 같이 순서대로 나타냈다.


백업하기


1.



2.



3. 백업시 필요한 부분에 따라 옵션을 줘서 백업하면 됨("백업 유형"에서 '전체,차등,트랜젝션 로그' 중 선택 / "백업 구성 요소"에서 '데이터베이스' 또는 '파일 및 파일 그룹" 중 해당되는 백업자료의 데이터유형 선택 / "백업 세트"에서 이름 변경여부 및 스케줄링 기능으로 백업예약 여부 /  "대상"에서 백업할 위치 지정 또는 변경 / 백업할 데이터 추가 및 제거 등등...)



4. 백업완료



5. "zip"데이터베이스의 데이터가 백업된 경로인 C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup폴더로 들어가보면 "zip.bak"이라는 이름으로 데이터가 백업된 것을 볼 수 있다.





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




복원하기



1. 위에서 "zip"데이터베이스를 백업한 후 "zip"데이터베이스의 [테이블]에 존재하는 [dbo.zipcode_20090623]테이블을 삭제해본다.




2. "zip"데이터베이스의 [테이블]에서 [dbo.zipcode_20090623]테이블이 제거된 것을 볼 수 있다.



3. [데이터베이스] - [zip]데이터베이스에 마우스 우클릭하여 아래그림과 같이 복원과정 시작



4. 데이터베이스 복원 마법사 창의 "옵션"에서 "기존 데이터베이스 덮어쓰기(WITH REPLACE)"체크박스에 체크한 후 '확인'버튼 클릭



5. 복원완료



6. 개체탐색기에서 [데이터베이스] - [zip] - [테이블]에 [dbo.zipcode_20090623]테이블이 복원되어 다시 생성된 것을 볼 수 있다.




Posted by holland14
:

Use tempdb

Go

--[0] 테스트용임시테이블작성

--Drop Table FrontBoard1

Create Table dbo.FrontBoard1

(

       ItemID Int Identity(1,1),  -- Primary Key Not Null -- 넌클러스터드인덱스

       Title VarChar(150) Null          -- 클러스터드인덱스

)

Go

 

Create Table dbo.FrontBoard2

(

       ItemID Int Identity(1,1),  -- Primary Key Not Null

       Title VarChar(150) Null

)

Go

 

 

--[!] 실행속도비교: 아래2개구문을블록씌우고Ctrl + L

Select * From FrontBoard1 Where Title Like '제목%'

Select * From FrontBoard2 Where Title Like '제목%'

 

--[!] 데이터입력

Declare @i Int

Set @i = 1

While @i <= 100000

Begin

       Insert FrontBoard1 Values('제목' + Cast(@i As VarChar))

       Insert FrontBoard2 Values('제목' + Cast(@i As VarChar))

       Set @i = @i + 1

End

Go

 

 

--[1] FrontBoardItemID필드에idxFrontBoard란넌클러스터인덱스생성

Create Index idxFrontBoard

On FrontBoard1(ItemID)

Go

 

 

--[2] sp_helpindex 시스템저장프로시저를이용해서인덱스정보확인

Exec sp_helpindex FrontBoard1

Go

 

 

--[3] 인덱스지우기

Drop Index FrontBoard1.idxFrontBoard

Go

 

 

--[4] Title필드에유니크한클러스터인덱스생성

Create Unique Clustered Index idxFrontBoard1

On FrontBoard1(Title)

Go

 

 

--[5] sp_helpindex 시스템저장프로시저를이용해서인덱스정보확인

Exec sp_helpindex FrontBoard1

 

 

--[6] 인덱스지우기

Drop Index FrontBoard1.idxFrontBoard1   --인덱스지우기

Go

 

 /* Clustered는 생략가능하다.
(Index키워드 앞에 Clustered라는 키워드를 붙여주지 않으면, 넌클러스터 인덱스로 생성된다.)
*/



Posted by holland14
:

--[1] 전체레코드출력

Select Count(*) From Zip

Go

 

--[2] 아래두코드를블록잡고Ctrl + L : 예상실행계획--> 성능(비용)비교

-- 비용(성능)은적게들수록좋다.(= 성능이좋다.)

-- Full Scan : 모두훑어보기

Select * From Zip Where Dong Like '%역삼%' -- 50%

Go

Select * From Zip Where Dong Like '역삼%' -- 50%

Go

 

 

--[3] SQL Server에서최고의성능향상: 인덱스

-- Dong 필드는자주검색에사용되더라... 그러면, 인덱스를걸자.

Create Index idxZip On Zip(Dong) -- 기본: NonClustered Index : 책의찾아보기(뒷부분)

Go

 

 

--[4] 아래두코드를블록잡고Ctrl + L : 예상실행계획--> 성능(비용)비교

-- %로시작해서Like절사용하면인덱스의영향을받지않는다.

Select * From Zip Where Dong Like '%역삼%' -- 60%

Go

Select * From Zip Where Dong Like '역삼%' -- 40%

Go

 

 

--[5] 인덱스를삭제

Drop Index idxZip On Zip

Go

 

 

--[6] Clustered Index로다시생성

Create Clustered Index idxZip On Zip(Dong) -- Clustered Index : 책의차례/목차()

Go

 

 

--[7] 아래두코드를블록잡고Ctrl + L : 예상실행계획--> 성능(비용)비교

Select * From Zip Where Dong Like '%역삼%' -- 99%, Index Scan(모두훑어보기)

Go

Select * From Zip Where Dong Like '역삼%' -- 1%, Index Seek(한번에찾아가기(=목차))

Go

 

 

Posted by holland14
:

--> 아래그림과 같이 http://www.zipfinder.co.kr/에서 ZipCode(우편번호) 다운로드





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


--> 다운받은 ZipCode(우편번호)파일을 저장하여 압축푼 다음 엑셀로 열어보고, 확장자명을 .xlsx 형식인 zipcode_20090623.xlsx으로 저장하기.



--> zipcode_20090623.xlsx으로 저장 후 [SQL Server] - [개체 탐색기]- [DTS] - [태스크] - [데이터 가져오기]를 클릭하여 엑셀파일인 zipcode_20090623.xlsx를 SQL Server의 "DTS"데이터베이스로 가져와서 "dbo.zipcode_20090623"이라는 테이블을 생성한다. 실행과정은 아래그림과 같이 한다.




--> "zipcode_20090623.xlsx"파일이 있는 저장경로로 지정하고 [첫 행은 열 이름으로]체크박스에 체크표시 후 '다음'버튼 클릭



--> "SQL Server"의 사용자 이름(여기서는 "sa")과 해당패스워드 입력후 '다음'버튼 클릭





--> 원본 테이블이 있는 아래쪽 체크박스에 표시하고, 오른쪽의 [대상]쪽에서 괄호안에 해당 엑셀파일의 이름(zipcode_20090623.xlsx)으로 정확하게 수정한 후 '다음'버튼 클릭('다음' 버튼 위에 있는 "매핑편집"버튼이나 "미리보기"버튼클릭해서 해당 엑셀파일(zipcode_20090623.xlsx)을 잘 가져왔는지 확인해봐도 된다.)



--> '다음'버튼 클릭



--> '마침'버튼 클릭



--> 아래에서 모든 항목이 성공해야 됨. 그렇지 않으면 "SQL Server"의 "DTS"데이터베이스에 해당 엑셀파일(zipcode_20090623.xlsx)을 가져와서 [dbo.zipcode_20090623]이라는 테이블을 만들 수 없다.



--> [개체 탐색기]에서 [데이터베이스] - [DTS] - [테이블]을 "새로 고침"해보면 [dbo.zipcode_20090623]테이블이 생성된 것을 볼 수 있다.



--> 작성한 코드 중 아래그림부분을 블록잡고 실행하면  아래그림과 같이 우편번호(zipcode) 데이터가 출력된다.





--> 아래쪽에 있는 코드(Select ~ Into문)를 블록잡고 실행하면 "zipcode_20090623"테이블에서 복사하여 "ZipTable"이라는 테이블이 생성되며 테이블형식(컬럼명)도 수정된다.



[개체 탐색기]에서 [데이터베이스] - [DTS] - [테이블]을 "새로 고침"해보면 [dbo.ZipTable]테이블이 생성된 것을 볼 수 있다.



--> 아래 그림과 같이 [dbo.ZipTable]테이블에 마우스 우클릭하여 "상위 1000개 행 선택"을 클릭하면...



--> 아래 그림과 같이 "dbo.ZipTable"의 상위 1000개 행에 대한 코드와 우편번호(zipcode) 데이터가 출력된다.






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




--> 위의 과정에서 아래의 코드(Select ~ Into문)를 작성하여 "zipcode_20090623"테이블에서 이름이 "ZipTable"인 테이블을 복사하고 테이블형식(컬럼명)을 수정한 것이다.


--[1] Temp 테이블가져오기

Select * From zipcode_20090623

Go

 

--[2]

Select

       [ZipCode] As ZipCode,

       [Sido] As Si,

       [GuGun] As Gu,

       [Dong] As Dong,

       [Bunji] As PostEtc

Into ZipTable

From zipcode_20090623

Go

 


Posted by holland14
: