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 정보를 제공
같은 카탈로그안에 있는 릴레이션들간의 제약 조건 정의 가능
같은 카탈로그 안에 있는 스키마들은 도메인 공유도 가능