7. sql(structured query language) -...

42
7. SQL(Structured Query Language)

Upload: others

Post on 07-Feb-2021

10 views

Category:

Documents


0 download

TRANSCRIPT

  • 7. SQL(Structured Query Language)

  • 2

    이 장의 주요 내용

    SQL 개요

    SQL에서 기본적인 검색 질의

    SELECT ..... FROM ..... WHERE 절

    SQL로 데이타베이스의 내용을 변경하는 방법

    Insert, Update, Delete 문

    릴레이션 스키마를 명시하는 SQL 데이터 정의 언어

    Create 문

    제약 조건 명시

    스키마 변경

  • 3

    SQL(Structured Query Language)

    관계 데이타베이스를 기반으로 한 포괄적인 표준 언어

    SQL 기능

    데이터 정의어(DDL) :

    스키마(테이블,뷰)를 정의하고 제약조건을 명시

    DCL: 보안과 권한 관리, 트리거 등

    TCL(Transaction Control Language): commit, rollback 등

    데이터 조작어(DML) : select, insert, delete, update

    “S-Q-L”이라 발음, “sequel”이라 발음되기도 함

    IBM의 System R 프로젝트에서 개발된 Sequel(Structured

    English QUEry Language)가 전신

  • SQL 발전

    ANSI와 ISO에서 표준 버전 ANSI 1986인 SQL-86(SQL1)을

    발표

    기능이 더욱 확장된 SQL-92 (SQL2) 개발

    세 번째 수정된 SQL-1999 (SQL3) 개발

    그 외 SQL:2003 개발

    기존 기능을 몇 가지 변경하고 XML 기능을 추가

    SQL:2008에는 SQL내에 더 많은 객체 데이타베이스 기능

    을 포함

    2011년은 Temporal 데이타베이스에 대한 지원 향상

    4

  • 5

    SQL select 문장을 이용한 질의 작성

    select 문장은 select 절, from 절, where 절과 같은 3가

    지 절로 구성

    select

    from

    where

    select 절은 결과 릴레이션이 가져야 할 애트리뷰트들을 지정

    from 절은 이 SQL 문장의 입력으로 사용할 테이블을 지정

    where절은 질의를 통해 검색되는 투플들을 명시하는 조건식을

    지정 –

  • 6

    accountId lastName firstName street city state zipcode balance

    101 Block Jane 345 Randolph Circle Apopka FL 30458- $0.00

    102 Hamilton Cherry 3230 Dade St. Dade City FL 30555- $3.00

    103 Harrison Katherine 103 Landis Hall Bratt FL 30457- $31.00

    104 Breaux Carroll 76 Main St. Apopka FL 30458- $35.00

    106 Morehouse Anita 9501 Lafayette St. Houma LA 44099- $0.00

    111 Doe Jane 123 Main St. Apopka FL 30458- $0.00

    201 Greaves Joseph 14325 N. Bankside St. Godfrey IL 43580- $0.00

    444 Doe Jane Cawthon Dorm, room 142 Tallahassee FL 32306. $10.55

    videoId dateAcquired movieId storeId

    101 1/25/98 101 3

    111 2/5/97 123 3

    112 12/31/95 123 5

    113 4/5/98 123 5

    114 4/5/98 189 5

    123 3/25/86 123 3

    145 5/12/95 145 5

    77564 4/29/91 189 3

    90987 3/25/99 450 3

    99787 10/10/97 987 5

    movieId title genre length rating

    101 The Thirty-Nine Steps mystery 101 R

    123 Annie Hall romantic comedy 110 R

    145 Lady and the Tramp animated comedy 93 PG

    189 Animal House comedy 87 PG-13

    450 Elizabeth costume drama 123 PG-13

    553 Stagecoach western 130 R

    987 Duck Soup comedy 99 PG-13

    Customer

    VideotapeMovie

    그림 6.1 BigHit 비디오예제 테이블의 스키마와 내용

  • 7

    accountId videoId dateRented dateDue cost

    103 101 1/3/99 1/4/99 $1.59

    101 113 2/22/99 2/25/99 $3.00

    101 114 2/22/99 2/25/99 $3.00

    103 123 12/1/98 12/31/98 $10.99

    101 145 2/14/99 2/16/99 $1.99

    101 90987 1/1/99 1/8/99 $2.99

    101 99787 1/1/99 1/4/99 $3.49

    accountId videoId dateRented dateReturned cost

    101 101 12/9/98 12/10/98 $2.49

    101 112 1/13/98 1/4/98 $1.99

    101 113 1/15/99 1/15/99 $0.99

    102 113 12/1/98 12/3/98 $2.49

    111 101 12/4/98 12/6/98 $2.49

    111 99787 1/1/99 1/4/99 $3.95

    201 113 12/9/98 12/14/98 $3.99

    201 77564 1/14/99 1/24/99 $3.35

    ssn lastName firstName

    145-09-0967 Uno Jane

    245-11-4554 Toulouse Jie

    376-77-0099 Threat Ayisha

    479-98-0098 Fortune Bruce

    588-99-0093 Fivozinsky Bruce

    Rental

    PreviousRental

    Employee

    TimeCard

    ssn date startTime endTime storeId pai

    d

    1 4 5 - 0 9 -

    0967

    01/14/

    99

    8:15 12:00 3 no

    2 4 5 - 1 1 -

    4554

    01/14/

    99

    8:15 12:00 3 no

    3 7 6 . 7 7 -

    0099

    02/23/

    99

    14:00 22:00 5 no

    1 4 5 - 0 9 -

    0967

    01/16/

    99

    8:15 12:00 3 no

    3 7 6 . 7 7 -

    0099

    01/03/

    99

    10:00 14:00 5 no

    3 7 6 . 7 7 -

    0099

    01/03/

    99

    15:00 19:00 5 no

  • 8

    간단한 SQL 질의 예 1

    질의 : Doe’라는 성을 가진 고객을 찾아라.

    Select * from Customer where lastName=‘Doe’

    표 6.1. select * from Customer where lastName=‘Doe’의 결과

    select 절에서 별표(*)는 입력 테이블의 모든 애트리뷰트를 명세

    문자열은 작은 따옴표(‘)로 둘러 싸 표시

    만일 Where 절이 없으면, From 절에 명시한 릴레이션의 모든튜플이 질의 결과로 검색됨

    accountId firstName lastName street city State zipcode balance

    111 Jane Doe 123 Main St. Apopka FL 34331 0.00

    444 Jane Doe Cawthon Dorm, room 142

    Tallahassee FL 32306 10.55

  • 9

    간단한 SQL 질의 예 2

    검색될 튜퓰이 만족해야 하는 불리언 조건(AND)와 비교

    연산자(=, >)를 명시한 예

    질의 : ‘01-03-1999’ 날짜 이후에 직원 ‘376-77-0099’

    의 근무 일지를 모두 검색하라.

    select *

    from TimeCard

    where ssn=‘376-77-0099’ and date>’01-mar-1999’

    표 6.2 select TimeCard Where ssn=‘376-77-0099’ and date > ‘01-mar-1999’의결과

  • 10

    간단한 SQL 질의 예 3

    선택된 애트리뷰트만을 가지는 릴레이션을 생성하는 예

    질의 : Customer 테이블에서 모든 고객의 성과 이름을 검

    색하라.

    select lastName, firstName

    from Customer

    표 6.3 project Customer onto (firstName, lastName)의결과

    LastName firstName

    Morehouse Anita

    Block Jane

    Breaux Carroll

    Hamilton Cherry

    Harrison Catherine

    Doe Jane

    Greaves Joseph

    Doe Jane

  • 간단한 SQL 질의 예 4

    결과에서 중복된 투플을 삭제한 예

    select distinct lastName, firstName

    from Customer

    11

    lastName firstName

    Morehouse Anita

    Block Jane

    Breaux Carroll

    Hamilton Cherry

    Harrison Catherine

    Doe Jane

    Greaves Joseph

  • 간단한 SQL 질의 예 5: 조인 질의

    두 개의 테이블들을 이용한 질의 예

    질의 : 모든 직원들의 정보와 근무 시간표를 검색하여라.

    select *

    from Employee, TimeCard (입력 테이블)where Employee.ssn = TimeCard.ssn (조인 조건 or 선택 조건)

    또는

    select *

    from Employee join TimeCard

    on Employee.ssn = TimeCard.ssn (조인된 테이블)

    조인 연산을 위해 명시적인 연산자 ->join 키워드

    조인 조건은 where 절 대신에 on절로 표시

    12

  • 간단한 SQL 질의 예 5: 조인 질의 결과

    Employee.ssn lastName firstName TimeCard.ssn Datestart Time

    storeId paidend Time

    145-09-0967 Uno Jane 145-09-0967 01/14/99 8:15 3 no 12:00

    145-09-0967Uno Jane 145-09-0967 01/16/99 8:15 3 no 12:00

    245-11-4554 Toulouse Jie 245-11-4554 01/14/99 8:15 3 no 12:00

    376-77-0099 Threat Ayisha 376-77-0099 02/23/99 14:00 5 no 22:00

    376-77-0099 Threat Ayisha 376-77-0099 01/03/99 10:00 5 no 14:00

    376-77-0099 Threat Ayisha 376-77-0099 01/03/99 15:00 5 no 19:00

    13

  • 14

    부분 문자열 패턴 비교 – 1/2

    Like 비교 연산자 셀랙션 조건으로 패턴 매칭(pattern matching)을 위해 사용

    퍼센트(%) : 임의의 가변 길이 문자열을 대표

    언더스코어(_) :한 문자를 대표

    패턴은 대소문자를 구분함

    Not Like : 일치하지 않는 문자열에 대한 검색

    질의 : 장르가 ‘comedy’로 끝나는 모든 영화들을 검색하여라

    select *

    from Movie

    where genre like ‘%comedy’

  • 부분 문자열 패턴 비교 – 2/2

    질의 : SSN의 가운데 두 가지가 44인 모든 직원을 검색하여라.

    select *

    from Employee

    where ssn like ‘_ _ _-44-_ _ _ _’

    15

  • 16

    select 질의 결과 정렬 – 1/2

    Order by 절

    출력 테이블의 튜플들이 특정 순서로 반환될 수 있도록 지정

    기본 값은 오름차순 정렬(asc)

    질의 : 모든 고객 정보를 검색하여, 고객의 성과 이름을 기

    준으로 오름차순으로 정렬하여라.

    select *

    from Customer

    order by lastName, firstName

  • select 질의 결과 정렬 – 2/2

    질의 : 모든 고객 정보를 검색하여, accountId의 값에 따

    라 내림차순으로 정렬하여라.

    select *

    from Customer

    order by accountId desc

    질의 : 모든 고객 정보를 검색하여, lastName은 내림차순,

    zipcode는 오름차순으로 정렬하여라.

    select *

    from Customer

    order by lastName desc, zipcode asc

    17

  • 18

    SQL 질의에서 표현식 : 산술 적용

    표현식으로 문자열, 숫자, 애트리뷰트 값, 산술식, 함수 호출이 올 수 있음

    select lastName, firstName, Employee.ssn, date,(endTime-startTime) * 24 as hoursWorked

    from Employee, TimeCardwhere Employee.ssn = TimeCard.ssn

    * as 절을 이용 질의 결과 내에 있는 애트리뷰트에 새로운 이름 부여

    lastName firstName ssn date hoursWorked

    Uno Jane 145-09-0967 1/14/99 3.75

    Uno Jane 145-09-0967 1/16/99 3.75

    Toulouse Jie 245-11-4554 1/14/99 3.75

    Threat Ayisha 376-77-0099 2/23/99 8

    Threat Ayisha 376-77-0099 1/3/99 4

    Threat Ayisha 376-77-0099 2/23/99 4

  • 19

    SQL 질의에서 표현식 : 집단화 함수

    집단 함수 : 여러 튜플의 정보를 요약하여 하나의 튜플로 요약하는데 사용

    count, avg, sum, min, max, ….

    select 절이나 having절에 사용

    질의 : 고객 번호 101인 고객이 현재 대여 횟수를 검색하여라.

    select count(*)

    from Rental

    where accountId =101

    질의 : 고객의 성(last name)의 개수를 검색하여라.

    select count (distinct lastName)

    from Customer

    질의 : 직원들의 평균 근무 시간을 계산하여라.

    select avg((endTime-startTime) *24) as hoursWorked

    from TimeCard

  • 20

    group by 절과 having 절

    Group by 절 같은 컬럼 값에 대하여 튜플들의 그룹을 구성

    그룹핑 애트리뷰트(grouping attribute)를 명시하기 위한 절

    Select절은 그룹핑 애트리뷰트와 튜플들의 각 그룹에 적용할 집단 함수들만 포함

    Having 절 그룹에 적용되는 셀렉션 연산

    having 절의 조건을 만족하는 그룹만 질의 결과 테이블에 반영

    having절에 나타날 수 있는 애트리뷰트들은 위의 Select 절에서가능한 애트리뷰트들과 동일

  • group by 절 예

    질의 : 이전 대여 기록에서 각 비디오에 대한 평균 대여 비용과 대여 수를 검색하여라.

    select videoId, avg(cost) as averageCost,count(*) as numRentals

    from PreviousRental

    group by videoId

    21

    videoId averageCost numRentals

    101 $2.49 2

    112 $1.99 1

    113 $2.49 3

    77564 $3.35 1

    99787 $3.95 1

    accountId videoId dateRented Cost

    101 101 12/9/98 … $2.49

    111 101 12/4/98 … $2.49

    101 112 1/13/98 …. $1.99

    101 113 1/15/99 …. $0.99

    102 113 12/1/98 …. $2.49

    201 113 12/9/98 …. $3.99

    201 77564 1/14/99 …. $3.35

    111 99787 1/1/99 …. $2.49

    ① videoId값으로 PreviousRental을 그룹화 ② 집단함수 avg와 count를적용

  • group by 절과 having 절 예 -1/2

    질의 : 두 번 이상 대여된 모든 비디오에 대한 제목, 장르, 평균 대여 비용, 총 대여비를 검색하여라. select title, genre, count(*) as numRentals,

    avg(cost) as average, sum(cost) as sumfrom Movie, Videotape, PreviousRentalwhere Movie.movieId = Videotape.movieId

    and Videotape.videoId = PreviousRental.videoIdgroup by Movie.movieId, title, genrehaving count(*) >=2

    22

    Movie.

    movieId

    title genre … videoId dateAcquired Videotape

    .movieId

    .. accountId Previous.

    videoId

    … cost

    101 The Thirty.. mystery 101 1/25/98 101 101 101 $2.49

    101 The Thirty.. mystery 101 1/25/98 101 111 101 $2.49

    123 Annie Hall romantic 112 12/31/95 123 101 123 $1.99

    123 Annie Hall romantic 113 4/5/98 123 101 123 $0.99

    123 Annie Hall romantic 113 4/5/98 123 102 123 $2.49

    123 Annie Hall romantic 113 4/5/98 123 201 123 $3.99

    189 Animal House comedy 77564 4/29/91 189 201 189 $3.35

    987 Duck Soup comedy 99787 10/10/97 987 111 987 $3.95

    ① WHERE절을 적용한 후

  • group by 절과 having 절 예 -2/2

    23

    ② Having 절 조건을 적용한 후

    Movie.

    movieId

    title genre … videoId dateAcquired Videotape

    .movieId

    .. accountId Previous.

    videoId

    … cost

    101 The Thirty.. mystery 101 1/25/98 101 101 101 $2.49

    101 The Thirty.. mystery 101 1/25/98 101 111 101 $2.49

    123 Annie Hall romantic 112 12/31/95 123 101 123 $1.99

    123 Annie Hall romantic 113 4/5/98 123 101 123 $0.99

    123 Annie Hall romantic 113 4/5/98 123 102 123 $2.49

    123 Annie Hall romantic 113 4/5/98 123 201 123 $3.99

    title genre numRentals average Sum

    The Thirty… Mystery 2 $2.49 $4.98

    Annie Hall romantic 4 $2.37 $9.46

    ③ count, avg, sum 함수를 적용 한 후

  • 24

    중첩 질의(Nested Query)

    중첩 질의

    where 절에 또 다른 select 문장이 있는 질의

    비교 연산자 IN을 사용 (어떤 원소가 주어진 집합에 있는지 검사)

    질의 : 1998년 12월동안 비디오테이프를 대여했던 모든 고객정보를 검색하여라.

    select * from Customer where accountId in

    (select accountId from PreviousRentalwhere dateRented >= ‘dec/1/1998’

    and dateRented< ‘1/1/99’)

    select * from Customer, PreviousRental where Customer.accountId=PreviousRental.accountId

    and dateRented >= ‘dec/1/1998’ and dateRented< ‘1/1/99’)

    중첩 질의 표현

    단일 SQL 질의 표현

  • 25

    중첩 질의 : Exists 함수

    Exists Exists 다음에 오는 Select 문장의 실행 결과가 존재하는지 검사

    Exists 함수의 결과 (참 : 한 튜플이라도 있을 경우, 거짓 : 한 튜플도갖지 못할 경우)

    질의 : 이전 대여에서 어떠한 비디오테이프도 대여하지 않은 고객정보를 검색하여라.select *

    from Customer C

    where not exists (select *

    from PreviousRental Pwhere C.accountId = P.accountId)

    그 외 중첩 Select 문에 사용되는 연산자 All, unique, contains, not

  • 26

    집합 연산자 : Union, Intersect, Except

    집합 연산 합집합(union), 교집합(intersect), 차집합(Except)

    호환성이 있는, 즉 열의 수가 같고 열들이 순서대로 같은 타입을가지는 경우 어떠한 두 개의 테이블에 대해서 사용가능

    중복된 튜플들이 결과에서 제거됨

    질의 : 이전 대여와 현재 대여 정보를 모두 검색하여라.

    select *, ‘Rental’ as sourceTable

    from Rental

    union

    select *, ‘PreviousRental’ as sourceTable

    from PreviousRental

  • 집합 연산자 : Union 질의 결과 예

    27

    accountId videoId dateRented dateDue cost sourceTable

    101 101 12/9/98 12/10/98 $2.49 PreviousRental

    101 112 1/13/98 1/4/98 $1.99 PreviousRental

    101 113 1/15/99 1/15/99 $0.99 PreviousRental

    102 113 12/1/98 12/3/98 $2.49 PreviousRental

    111 101 12/4/98 12/6/98 $2.49 PreviousRental

    111 77564 1/1/99 1/4/99 $3.95 PreviousRental

    201 113 12/9/98 12/14/98 $3.99 PreviousRental

    201 77564 1/14/99 1/24/99 $3.35 PreviousRental

    101 90987 1/1/99 1/8/99 $2.99 Rental

    101 99787 1/1/99 1/4/99 $3.49 Rental

    103 101 1/3/99 1/4/99 $1.59 Rental

  • 28

    SQL로 데이터베이스 내용 변경 : insert문

    INSERT, DELETE, UPDATE SQL에서 데이타베이스 내용을 갱신하기 위해 사용되는 명령

    Insert 문 각 애트리뷰트에 대해 지정된 값을 가지고 테이블에 새로 행을

    추가할 때 사용

    애트리뷰트값들의 순서는 CREATE TABLE 명령에서 명시한 애트리뷰트들의 순서와 같아야 함

    INSERT INTO [()]VALUES ()

    orINSERT INTO [()]select statement

  • 29

    Insert문 예 – 1/2

    예 1 :

    insert into Customer

    values (555, ‘Yu’ ‘Jia’, ‘540 Magnolia Hall’, ‘Tallahassee’, ‘FL’,

    ‘32306’ , 0.00)

    예 2 : Insert 명령에서 명시한 값에 대응하는 애트리뷰트이름들을 명시적으로 나타내는 경우

    insert into Customer (firstName, lastName, accountId)values (‘Jia’, ‘Yu’, 555)

    누락된 애트리뷰트에 대해서는 기본값(default value)이 입력

    정의된 기본값이 없는 경우 null 값이 입력

    non-null이면서 기본값이 정의되지 않은 경우에는 입력 불가

  • Insert문 예 – 2/2

    예 3: 한 질의의 결과로 검색되는 다수의 튜플을 생성된릴레이션에 삽입하는 경우

    insert into PayStatement (ssn, hourlyRate, numHours,

    amountPaid, datePaid)

    select TimeCard.ssn, hourlyRate, sum((endTime-startTime)*24)

    as hoursWorked, sum((endTime-startTime)*24*

    hourlyRate) as amountPaid, today

    from TimeCard, HourlyEmployee

    where TimeCard.ssn=HourlyEmployee.ssn and paid = false

    group by TimeCard.ssn, hourlyRate

    30

  • 31

    SQL로 데이터베이스 내용 변경 : update 문

    선택된 하나 이상의 튜플에서 애트리뷰트 값들을 수정하기 위해 Update 명령 사용

    UPDATE SET = , …where

    예 1 : 급여 지급 작업이 종료되었을 때, 지급 사실을 기록하기 위하여 TimeCard 내용을 변경하여라.

    update TimeCard

    set paid = truewhere paid = false

  • Update 문 예

    예 2 : 직원번호가 ‘145-09-0967’인 직원의 시간당 급여를 10% 인상하여라.

    update HourlyEmployee

    set hourlyRate = hourlyRate * 1.1

    where ssn = ‘145-09-0967’

    32

  • 33

    SQL로 데이터베이스 내용 변경 : delete 문

    한 테이블에서 튜플들을 삭제하기 위해 delete 문 사용

    DELETE FROM WHERE

    예 : 시간제 직원이 아닌 직원에 대해 정보를 TimeCard테이블에서 모두 삭제하여라.

    delete from TimeCardwhere not exists (select *

    from HourlyEmployee

    where TimeCard.ssn = HourlyEmployee.ssn)

  • 34

    SQL을 이용한 스키마 생성

    Create Table 명령 테이블 이름과 테이블이 가지는 애트리뷰트들을 지정

    각 애트리뷰트는 이름과 데이터 타입을 가짐

    초기 제약 조건들을 명시

    create table Customer (

    accountId int, 정수형

    lastName varchar(32), 가변 길이의 텍스트 필드

    firstName varchar(32), 가변 길이의 텍스트 필드

    street varchar(100), 가변 길이의 텍스트 필드

    city varchar(32), 가변 길이의 텍스트 필드

    state char(2), 문자형

    zipcode varchar(9), 가변 길이의 텍스트 필드

    balance real 부동소수점형 )

  • 35

    SQL에서 애트리뷰트 데이터 타입

    산술형 정수형 integer, int, smallint, long

    부동소수점형 float, real, double precision

    형식정의형 decimal(i,j), dec(i,j)

    문자형 고정길이 char(n), character(n)

    가변길이 varchar(n), char varying(n), character varying(n)

    비트형 고정길이 bit(n)

    가변길이 bit varying(n)

    날짜관련타입 date, time, datetime, timestamp, time with timezone, interval

    대용량데이타타입 문자열 long varchar(n), clob(character large object) ,text

    바이너리 blob(binary large object)

  • 키와 외래 키 제약조건 - 1/2

    create table Store

    ( storeId int primary key, /주 키 명세/street varchar(100),city varchar(32),state char(2),zipcode varchar(9)manager int references Employee) /외래 키 명세/

    create table Movie ( movieId varchar(10) primary key,

    title varchar(100) unique, /후보 키 명세/genre varchar(32),rating varchar(5),accountId int, )

    36

  • 37

    키와 외래 키 제약조건- 2/2create table Rental

    ( accountId int, …primary key (accountId, videoId),foreign key (accountId) references Customer(accountId)

    on delete cascade on update cascade,foreign key (videoId) references Videotape(videoId)

    on delete set null on update cascade )

    참조 무결성 제약 조건이 위반된 경우에 취할 다른 동작을 명시 예) 만일 참조되는 Customer의 accountId가 삭제/갱신할 경우

    Cascade : 참조하는 튜플이나 값을 연쇄적으로 삭제/변경

    On delete : 참조하는 모든 튜플들을 삭제

    On update : 참조하는 모든 Rental튜플의 accountId를 새로운 값으로 변경

    Set Null : 참조하는 Rental 테이블의 accountId 값을 Null로 명시

    Set Default : 참조하는 Rental 테이블의 accountld값을 default 값으로 명시

  • 38

    애트리뷰트 제약조건과 기본값 명시

    애트리뷰트 제약 조건

    not null 제약조건 : 어떤 애트리뷰트에 널 값을 허용하지 않음

    널이 아닌 값을 요구하는 애트리뷰트와 기본키 애트리뷰트에 명시

    Default : 애트리뷰트에 명시적으로 값을 주지 않으면, 새로운 튜

    플을 삽입할 때 이 애트리뷰트의 디폴트값이 들어감

    create table VideoTape (

    videoId varchar(10) primary key,

    movieId varchar(10) not null default ‘000-00-000’

    references Movie,

    storeId int references Store )

  • 도메인 제약 조건 명시– Check절

    애트리뷰트나 도메인의 값을 제한할 수 있음.

    create table Movie ( movieId varchar(10) primary key,

    title varchar(100) unique,genre varchar(32),rating varchar(5), check (rating in

    (‘G’, ‘PG’, ‘PG-13’, ‘R’, ‘NC-17’)…)

    create table Rental ( accountId int,

    videoId varchar(10),dateRented datetime,dateDue datetime,…

    check (dateRented

  • 40

    SQL을 이용한 스키마 변경 : Drop 문

    Drop문 테이블, 도메인 또는 제약 조건과 같이 이름을 가진 스키마 요소

    들을 제거하는데 사용

    DROP RESTRICT | CASCADE

    Cascade : 테이블 삭제 시, 해당 테이블 뿐만 아니라, 이 테이블을 참조하는 제약조건, 뷰, 여러 다른 요소들을 자동적으로 제거

    Restrict : 뷰, 제약 조건, 다른 요소들에 의해 참조되지 않을 경우에 제거 가능

  • 41

    SQL을 이용한 스키마 변경 : Alter 문

    Alter문 : 기본 테이블이나 다른 이름을 가진 스키마 요소들의 정의를 변경

    예 1: phone 애트리뷰트 추가

    alter table customer add phone int;

    예 2 : zipcode 애트리뷰트 제거

    alter table customer drop zipcode cascade;

    예 3 : movieId의 default절의 제거

    alter table VideoTape alter movieId drop default;

    예 4 : movieId의 새로운 디폴트 절 정의

    alter table VideoTape alter movieId set default “1111”;

  • 42

    스키마와 카탈로그(catalog)

    스키마 하나의 응용(사용자)에 속하는 테이블과 기타 구성 요소들을 그

    룹화하기 위해 사용

    스키마 이름, 스키마 소유자나 허가권자, 스키마 원소(테이블, 제약조건, 뷰, 도메인, 등)에 대한 기술자(descriptor)를 포함

    Create Schema 문을 이용하여 스키마 생성

    CREATE SCHEMA BigHitVideo AUTHORIZATION ‘kclee’;

    카탈로그 (또는 ‘데이타베이스’라는 용어를 사용) 한 SQL 환경에서 있는 스키마들의 집합

    Information_Schema를 포함

    모든 스키마들과 모든 구성요소에 대한 description 정보를 제공

    같은 카탈로그안에 있는 릴레이션들간의 제약 조건 정의 가능

    같은 카탈로그 안에 있는 스키마들은 도메인 공유도 가능