본문 바로가기

예제노트

예제 및 풀이 view/join/constraint(제약조건)

주안점 : view/join/constraint(제약조건)

 

문제1) 난이도(평이) (View, 온라인 도움말)

 

온라인 도움말에서 create view라는 검색어를 이용하여 검색 -> 뷰 만들기 확인(정독할 것!)하십시오. (중요하므로 모든 문구를 빠짐없이 정독하십시오.)

 

 

# (View) : 가상적인 테이블(virtual table). 필요한 부분만을 가져와서 말 그대로 보여주는  가상 테이블.

 

 

문제2) 난이도() (view의 속성) (온라인 도움말, 교안, 쿼리 분석기)

 

온라인 도움말을 정독하고 쿼리 분서기를 탐색한 후, 다음 중 view에 대한 설명 중 옳은 것은 O, 틀린 것은 X를 표기합니다.

 

1)      (view)와 테이블(table)의 이름은 동일할 수 있다. (       )

2)      default 키워드는 뷰에서 사용할 수 있다.  (      )

3)      (view)로는 조인할 수 없다. (      )

4)      (view)와 테이블(table)은 서로 조인(join)할 수 없다. (      )

5)      (view)에서도 테이블의 데이터를 수정할 수 있다. (        )

6)      (view)에서는 테이블의 데이터를 수정할 수 있으되 삭제할 수는 없다. (       )

7)      뷰의 컬럼(필드)에서 산술식 사용시 열 이름을 지정해야 한다. (        )

8)      뷰 자체를 삭제할 수 없다.

9)      쿼리 분석기를 통해서 뷰의 기본적인 SQL문 작성 형식을 파악할 수 있다. (     )

10)   쿼리 분석기에서 뷰의 열(컬럼)으로 진입하였을 때 SQL문 형식으로 뷰의 열의 형식을 볼 수 있도록 메뉴가 활성화된다. (        )

11)   뷰를 작성할 때 굳이 식별자의 규칙에 따르지 않아도 좋다. (          )  

12)   인덱스된 뷰 정의에서는 ORDER BY 키워드를 포함할 수 있습니다. (        )

13)   임시 테이블에서는 뷰를 만들 수 없다. (      )

 

)

 

1)     (view)와 테이블(table)의 이름은 동일할 수 있다. (   X   ) (도움말)

2)     default 키워드는 뷰에서 사용할 수 있다.  (  X  ) (도움말)

3)     (view)로는 조인할 수 없다. (  X  ) (교안)

4)     (view)와 테이블(table)은 서로 조인(join)할 수 없다. (  X  ) (교안)

5)     (view)에서도 테이블의 데이터를 수정할 수 있다. (  O  ) (도움말)

6)     (view)에서는 테이블의 데이터를 수정할 수 있으되 삭제할 수는 없다. (X) (도움말)

7)     뷰의 컬럼(필드)에서 산술식 사용시 열 이름을 필히 지정해야 한다. (O) (도움말)

8)     뷰 자체를 삭제할 수 없다. (   X   ) (도움말)

9)     쿼리 분석기를 통해서 뷰의 기본적인 SQL문 작성 형식을 파악할 수 있다. (  O  )

10) 쿼리 분석기에서 뷰의 열(컬럼)으로 진입하였을 때 SQL문 형식으로 뷰의 열의 형식을 볼 수 있도록 메뉴가 활성화된다. (  X  )

11) 뷰를 작성할 때 굳이 식별자의 규칙에 따르지 않아도 좋다. (  X  ) (도움말)

12) 인덱스된 뷰 정의에서는 ORDER BY 키워드를 포함할 수 있습니다.  (  X  )  
(
도움말)

13) 임시 테이블에서는 뷰를 만들 수 없다. (  O  ) (도움말)

 

뷰 만들기, 뷰 수정 이라는 검색어로 뷰의 수정 및 이름 바꾸기 기사를 찾아서 정독할 것. 참고로 위의 내용은 교과서 p.422에서 다시금 참조할 수 있습니다.

 

이미 많이 들은 얘기이지만 식별자 규칙으로 검색하여 확인합니다.

 

문제3) 난이도(평이) (view/join)

 

교과서 p.154-155에 나와 있는 inner 조인문에 대한 뷰(view)를 작성하십시오.

, view의 이름은 titles_join_view 라고 지정합니다. 또한 각 테이블에 대한 별칭(alias)

를 각각 t, p 라고 지정하고 on 이하의 절에서는 이러한 별칭을 사용하여 필드를 사용합니다.

 

)

 

create view title_join_view

as select title, price, pub_name

from titles t inner join publishers p

           on t.pub_id = p.pub_id

 

-- , 여기서 inner는 생략할 수 있습니다.

 

 

 

문제4) 난이도(평이) (view)

 

위의 뷰의 구조와 결과를 전체적으로 보는 SQL문을 작성하십시오.

 

)

sp_help title_join_view

select * from title_join_view

 

문제5) 난이도(평이) (view, 쿼리분석기, union) (p.413)

 

쿼리분석기에서 pubs 데이터베이스의 syssegments 라는 시스템 뷰의 명세를 찾아서 create SQL 구문 형식으로 데이터를 덤핑(dumping)하여 답란에 복사하십시오. , create 이외의 문장은 기재하지 않습니다.

 

)

 

CREATE VIEW syssegments (segment, name, status) AS

           SELECT  0, 'system'     , 0  UNION

           SELECT          1, 'default'    , 1  UNION

           SELECT          2, 'logsegment' , 0

 

-- 참고로 위의 내용을 덤핑한 이유는 뷰의 형식을 작성할 때 위와 같이 컬럼을 ( , , ) 형식으로 사용할 수 있다는 점과 union을 사용하여 다중 SQL문을 배열할 수 있다는 것을 보기 위해서 출제한 것입니다.

 

-- 또한 우리는 이러한 덤핑을 통해서 우리가 조작하지 않은 SQL문이 삽입됨으로써 일일이 Go 등의 명령문을 기입하지 않아도 MS SQL 서버 측에서 자동적으로 기입될 수 있도록 배려한다는 것을 알 수 있습니다.

 

문제6) 난이도() (view, 쿼리분석기)

 

문제 3에서 작성한 view를 쿼리분석기를 사용하여 데이터 덤핑하되 덤핑한 SQL구문을 사용하여 뷰를 다음 조건과 같이 교정(수정)하도록 합니다.

 

조건)

title 필드에는 t_title 이라는 별칭(alias), price에는 t_price, pub_name t_pub_name

SQL구문내의 titles 대한 별칭은 tt로 변경하고, publishers에 대한 별칭은 pp로 변경합니다.

다만 변경 구문 이외의 GO 등의 별도의 구문들은 답안에 기재하지 않아도 됩니다.

 

)

 

ALTER  view title_join_view

as select title t_title, price t_price, pub_name t_pub_name

from titles tt  join publishers pp

           on tt.pub_id = pp.pub_id

 

-- 위와 같은 문제를 통해서 뷰를 어떻게 변경할 수 있는지를 살펴보았습니다. 역시 테이블처럼 alter를 사용하는데 역시 뷰 자체가 가상적인 테이블이기 때문에 별칭을 사용하였을 때극서이 그대로 뷰의 컬럼으로 반영된다는 것이 일반적인 테이블에서의 컬럼 별칭 사용과 다른 점이라고 볼 수 있습니다.

 

문제7) 난이도() (view, 엔터프라이즈 매니저, 온라인 도움말) (p.413)

 

 

이번에는 enterprise manager에 진입하여 위에서 만든 뷰의 내용을 확인합니다.

그리고 디자인 뷰의 메뉴를 통해서 위 문제에서 변경한 부분을 다시금 아래의 조건에 맞도록 변경하여 실행한 구문(select)을 답안에 복사 기재합니다. , 두가지 변경 방법이 있는데 일단, ERD 메뉴를 사용하지 말고 텍스트 그리드(grid)를 사용합니다.

 

사용방법이 잘 이해되지 않으면 온라인 도움말에서 뷰 디자이너 창이라는 검색어를 기입한 후 해결합니다.

 

조건)

 

 pub_id view에서 볼 수 있는 필드로 추가하되 별칭(alias) t_pub_id 라고 합니다.

 , 정렬방식은 내림차순을 사용합니다.

 

)

 

SELECT   TOP 100 PERCENT tt.title AS t_title, tt.price AS t_price,

                pp.pub_name AS t_pub_name, tt.pub_id AS t_pub_id

FROM      dbo.titles tt INNER JOIN

                dbo.publishers pp ON tt.pub_id = pp.pub_id

ORDER BY tt.pub_id DESC

 

-- 위의 문제는 EM(Enterprise Manager)를 사용하여 어떻게 뷰를 조작할 수 있는지를 확인하는 문제입니다. 이렇게 메뉴를 사용하면 쉽게 뷰를 조작할 수 있습니다.

문제에서 전제한대로 온라인 도움말을 충분히 활용하면 문제없이 뷰를 수정할 수 있습니다.

 

문제8) 난이도(평이), (view, table, em/design view)

 

위의 EM(Enterprise Manager)의 디자인 뷰를 이용하여 위에서 작성된 의 데이터를 아래의 조건과 같이 변경 적용합니다. 이때 실제 테이블에서 아래의 데이터를 title 필드로 조회하는 SQL문을 작성하십시오. , 출력시 title_id와 더불어 3개의 컬럼을 출력합니다.

 

조건)

t_title : But Is It User Friendly?

t_price : 23.95

 

)

 

select title_id, title, price

from titles

where title='But Is It User Friendly?';

 

-- 위의 문제는 뷰에서도 충분히 테이블의 내용을 변경할 수 있다는 것을 보여주기 위한 문제입니다.

 

문제9) 난이도(평이), (view)

 

문제 7에서 제시된 SQL문을 title_temp_view라는 이름으로 뷰를 작성하고 전체 컬럼을조회한 후 바로 지우는 쿼리문을 작성하십시오. (작성할 총 SQL 문수 3개입니다)

 

)

 

create view title_temp_view

as SELECT   TOP 100 PERCENT tt.title AS t_title, tt.price AS t_price,

                pp.pub_name AS t_pub_name, tt.pub_id AS t_pub_id

FROM      dbo.titles tt INNER JOIN

                dbo.publishers pp ON tt.pub_id = pp.pub_id

ORDER BY tt.pub_id DESC

 

select * from title_temp_view

 

drop view title_temp_view

 

문제10) 난이도(), (constraint:제약조건)

 

먼저 아래의 조건의 테이블을 작성하는 쿼리문을 만듭니다. 테이블 작성시 PK에 해당되는 키는 제약조건(constraint) 키워드를 반드시 사용하여 작성합니다.

 

작성 후, 별도로 제시한 제약조건을 사용하여 테이블을 변경하는 쿼리문을 작성하십시오.

, 제약조건의 이름은 member_fk 라고 명명합니다.

 

테이블명 : member_temp_table

필드

자료형

기정값

null 허용

제약조건

설명

member_id

varchar(20)

 

not null

PK(primary key)

회원아이디

member_pw

varchar(20)

 

not null

 

회원비밀번호

member_intro

varchar(200)

 

 

 

회원소개

member_jumin

char(13)

 

not null

unique

회원주민번호

 

제약조건)

member_id 를 외래키로 설정합니다.

 

)

 

create table member_temp_table (

           member_id varchar(20) not null

           constraint member_id primary key,

           member_pw varchar(20) not null,

           member_intro varchar(200),

           member_jumin char(13) not null unique

)

 

 

alter table member_temp_table

add constraint member_fk

foreign key (member_id) 

references member_temp_table(member_id)