6장 데이터베이스언어 sql - 어리버리 켄신 · 2015-01-21 · cse310...

87
6: 데이터베이스 언어 SQL Prof. Jin Hyun Son [email protected] Department of Computer Science & Engineering Hanyang University

Upload: others

Post on 25-Feb-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

6 : 베 스 언어 SQL

Prof. Jin Hyun Son

[email protected]

Department of Computer Science & Engineering

Hanyang University

Page 2: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

2CSE310 베 스 By Prof. Jin Hyun Son

6 . 베 스 언어 SQL

SQL 에 단순

하나 포함하는

(subquery)

전체 다루는 연

베 스 변경

SQL 에 스키 정

뷰 정

Page 3: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

3CSE310 베 스 By Prof. Jin Hyun Son

SQL 발전

SQL 발전 과정

Sequel

System R 프 젝트 (1970 년 반); 추후 SQL 변경

SQL-86, SQL-89

SQL-92

SQL2 라고

SQL-99

화 행 에는 SQL3 라고 었

객체- 계 특징, 타 능들

SQL4

Page 4: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

4CSE310 베 스 By Prof. Jin Hyun Son

Example Schema

Movie (title, year, length, inColor, studioName, producerC#)

StarsIn (movietitle, movieyear, starname)

MovieStar (name, address, gender, birthdate)

MovieExec (name, address, cert#, netWorth)

Studio (name, address, presC#)

Movie Database Schema

Page 5: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

5CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순

SQL 본적 형태

한 에 어 조건 만족하는 튜플들 검

본적 개 키워드: SELECT, FROM, WHERE

FROM 절: 는 하나 들

WHERE 절: 튜플 결과에 포함 해 만족해야 하는

조건

SELECT 절: 결과 생 할 애트 뷰트들 술

( ) 1990년 Disney 스튜 에 제작된 모든 화 찾아라.

SELECT *FROM MovieWHERE studioName = ‘Disney’ AND year = 1990;

Page 6: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

6CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

SQL에 프 젝

애트 뷰트들 만 프 젝

( ) 1990년 에 Disney 스튜 에 제작된 모든 화들의 제목과

상 시간을 찾아라.

SELECT title, length

FROM Movie

WHERE studioName = ‘Disney’ AND year = 1990;

title length

Pretty Woman 119

Page 7: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

7CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

다 애트 뷰트

SELECT title AS name, length AS duration

FROM Movie

WHERE studioName = ‘Disney’ AND year = 1990;

SQL 키워드 애트 뷰트 에 해 는 문

별하 않는다. 단 호 안에 만 문 문

한다.

Pretty Woman 119

name duration

Page 8: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

8CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

SELECT 절 항

술 연 적 가능

수 가능

SELECT title,length*0.0167 AS duration, ‘hrs.’ AS inHours

FROM Movie

WHERE studioName = ‘Disney’ AND year = 1990;

title duration inHours

Pretty Woman 1.98334 hrs.

Page 9: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

9CSE310 베 스 By Prof. Jin Hyun Son

참고: SQL 거나/ 하는

SELECT-FROM-WHERE

FROM 절

어 는가?

WHERE 절

튜플 어 조건 만족해야 하는가?

SELECT 절

결과는 무엇 가?

SELECT-FROM-WHERE

같 순

FROM 절, WHERE 절, SELECT 절

Page 10: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

10CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

SQL에 택 연

WHERE 절에 택 조건 시

여 개 반적 연 : =, <>, >, >=, <=

술 연 : +, -, * 등

문 열 접합 연 (concatenation operator) ||

SQL 에 문 열 주 에 단 호 어

나타낸다.

정수 실수

값들 논 연 AND, OR, NOT 결합

가능

Page 11: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

11CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

( ) 1970년 이후에 들어 모든 흑 화의 제목을 찾아라.

SELECT title

FROM Movie

WHERE year > 1970 AND NOT inColor

( )MGM 스튜 에 제작된 화 1970년 이후의 것이거나

상 시간이 90 이 안 되는 화의 제목을 찾아라.

SELECT title

FROM Movie

WHERE (year > 1970 OR length < 90) AND studioName = ‘MGM’

inColor는 부울 타입

Page 12: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

12CSE310 베 스 By Prof. Jin Hyun Son

참고 항

SQL 계 수

SELECT L

FROM R Þ p L (s C (R))

WHERE C

Keyword 문

SQL에 keyword는 문 별 없

FROM, from, FrOm: O.K.

호 내에 는 별

‘FROM’ 과 ‘from’ 다 문 열

Page 13: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

13CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

문 열

문 열 는 전식(lexicographic) 순 에 반

( ) ‘at’ < ‘bar’

s LIKE p

간단한 합(match) 반 한 문 열

s 는 문 열 타 애트 뷰트, p 는

: 특수 문 % _ 택적 가 문 열

% : 0 가 문 열

_ : 한 문

Page 14: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

14CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

( ) 제목이 “Star”로 시작하는 화 모두 찾아라.

SELECT title

FROM Movie

WHERE title LIKE ‘Star%’

/* 결과: {Star Wars, . . .} */

( ) 제목에 유격(‘s)을 갖는 모든 화 찾아라.

SELECT title

FROM Movie

WHERE title LIKE ‘%’’s%’

/* 결과: {Rogan’s Run, . . .} */

연 개 어포스트 피는하나 어포스트 피 시

Page 15: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

15CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

LIKE 수식에 스케 프(escape) 문

키워드 ESCAPE 하고 하는 스케 프 문

( ) s LIKE ‘x%%x%’ ESCAPE ‘x’

/* % 시 해 % 끝나는 든 문 열 */

Page 16: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

16CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

날짜 시간

날짜 시간 특수한 타 원

날짜 타 : DATE

( )날짜 상수: DATE ‘1948-05-14’

시간 타 : TIME

( )시간 상수: TIME ‘15:00:02.5’

날짜+시간 타 : TIMESTAMP

( )날짜+시간 상수: TIMESTAMP ‘1945-05-14 12:00:00’

연 하여 날짜 시간 가능

Page 17: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

17CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

널(null) 값

값 정 할 수 없는 경

알 않 값(value unknown)

값 무엇 알 수 없는 경

( ) 어 화 스타의 생일을 모

적 가능한 값(value inapplicable)

적합한 값 존 하 않는 경

( ) MovieStar 에 미혼인 화 스타의 spouse 값

NULL 값은

서로동일한값이아님

Page 18: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

18CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

NULL에 한 연

술 연 ( , ×, + 등 )에 NULL

결과는 NULL

( ) x 값 NULL , x + 3 NULL

연 ( , = 나 >)에 NULL

결과는 UNKNOWN

( ) x 값 NULL , x > 3 UNKNOWN

NULL 값 동 한 값 아니다.

Page 19: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

19CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

NULL 수가 아니다.

NULL 피연 할 수 없

(예) NULL + 3, NULL = 5 : 허 안

NULL과 한 프 키트

IS NULL, IS NOT NULL

(예) 변수 x의 값이 NULL 인지 아닌지 확인

» x IS NULL

» x IS NOT NULL

Page 20: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

20CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

NULL 값

X y x AND y x OR y NOT x

TRUE UNKNOWN UNKNOWN TRUE FALSE

UNKNOWN TRUE UNKNOWN TRUE UNKNOWN

UNKNOWN UNKNOWN UNKNOWN UNKNOWN UNKNOWN

UNKNOWN FALSE FALSE UNKNOWN UNKNOWN

FALSE UNKNOWN FALSE UNKNOWN TRUE

Page 21: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

21CSE310 베 스 By Prof. Jin Hyun Son

참고: NULL과 해 주 할 점

NULL 값 가 튜플 결과

WHERE 조건 TRUE 튜플만 결과에 포함

(예) 다음 질의를 생각해 보자.

SELECT *FROM MovieWHERE length <= 120 OR length > 120

든 Movie 튜플 결과에 포함 는 것 아님

length 값 NULL 튜플

» WHERE 조건 UNKNOWN

» 라 , 결과에 포함 않

, “length 가 NULL 이 아닌 모든 튜플을 찾아라”

Page 22: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

22CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

결과 정 (ordering)

출 순

애트 뷰트 값에 반 수

정 출

다 절 추가:

ORDER BY <애트 뷰트 스트>

폴트는 차순

키워드 DESC 내 차순

Page 23: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

23CSE310 베 스 By Prof. Jin Hyun Son

SQL에 단순 (계 )

( ) 1990년 Disney 에 제작된 화들을,상 시간이 짧은 순 로,

상 시간이 같을 경 , 화제목의 알파 순 로 찾아라.

SELECT *FORM MovieWHERE studioName = ‘Disney’ AND year = 1990ORDER BY length, title;

Page 24: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

24CSE310 베 스 By Prof. Jin Hyun Son

포함하는

SQL 에 카티 프 트 조

결합하는 간단한 방법

FROM 절에 각 나열

( ) Movie (title, year, length, inColor, studioName, producerC#),

MovieExec (name, address, cert#, netWorth)

¡ 영화 Star Wars 의 제작자의 이 과 주 찾아라.

SELECT name, address

FROM Movie, MovieExec

WHERE title = ‘Star Wars’ AND producerC# = cert#

Page 25: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

25CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

애트 뷰트 호 (disambiguity) 제거

여러 들 포함하는

애트 뷰트가 같 가 수 다.

R.A 호 (R; , A; 애트 뷰트)

( ) 주 가 같은 스타 제작자의 을 찾아라.

SELECT MovieStar.name, MovieExec.name

FROM MovieStar, MovieExec

WHERE MovieStar.address = MovieExec.address

호 없는 경 에 R.A 같 가능

Page 26: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

26CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

튜플 변수

한 에 다 튜플들 정하고 할

별 (alias) 튜플 변수(tuple variable)

( ) 같은 주 가 스타들을 찾아라.

SELECT Star1.name, Star2.name

FROM MovieStar AS Star1, MovieStar AS Star2

WHERE Star1.address = Star2.address

AND Star1.name < Star2.name

star1.name < star2.name: 동 한 스타 가 든

결과에 포함 는 것 방 . 또한 같 주 가 스타들 단

한번만 생 하 해 다.

Page 27: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

27CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

여러 들 포함하는 해

내포 루프 (nested loop)

여러 개 튜플 변수들 ,

각 튜플 변수에 해 루프 갖는 첩 루프 생각

Page 28: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

28CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

LET the tuple variables in the FROM clause range over

relations R1, R2, … , Rn;

FOR each tuple t1 in relation R1 DO

FOR each tuple t2 in relation R2 DO

. . .

FOR each tuple tn in relation Rn DO

IF the where clause is satisfied when the values

from t1, t2, … , tn are substituted for all

attribute references THEN

evaluate the attributes of the select clause

according to t1, t2, … , tn and produce the

tuple of values that results.

내포된 루프에 따른

알고리

Page 29: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

29CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

(예) 영화 Star Wars 의 제작자의 이 을 찾아라.

SELECT name

FROM Movie, MovieExec

WHERE title = ‘Star Wars’ AND producerC# = cert#

병 배정 (parallel assignments)

에 는 튜플들 든 가능한 배정 고

, ( 순 ) 병 적 배정 다고 생각

각 배정에 해, WHERE 절 true 단

WHERE 절 true 배정 결과 고

, SELECT 절 애트 뷰트에

Page 30: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

30CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

계 수 변환

FROM 절 들 카티 프 트

WHERE 절 조건 택 연 적

SELECT 절 애트 뷰트들 프 젝

SELECT name, address

FROM Movie, MovieExec

WHERE title = ‘Star Wars’ AND producerC# = cert#

p name, address (s title = ‘Star Wars’ AND producerC# = cert# (Movie ×

MovieExec))

Page 31: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

31CSE310 베 스 By Prof. Jin Hyun Son

포함하는 (계 )

들 합집합, 집합, 차집합

키워드: UNION, INTERSECT, EXCEPT

( ) 재산이 $10,000,000 보다 고 화 임 인 모든

여자 스타들의 이 과 주 찾아라.

(SELECT name, address

FROM MovieStar

WHERE gender = ‘F’ )

INTERSECT

(SELECT name, addressFROM MovieExec

WHERE netWorth > 10000000);

Page 32: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

32CSE310 베 스 By Prof. Jin Hyun Son

는 결과 생 하는 수식

WHERE 절에

FROM 절에 가능

결과가 단 수

WHERE 절에 다 애트 뷰트 접 가능

개 가 하나 형

UNION, INTERSECT, EXCEPT

Page 33: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

33CSE310 베 스 By Prof. Jin Hyun Son

(계 )

( ) Los Angeles 에 위치한 화회사의 사장이 제작한

화의 이 과 제작연 찾아라.

Movie (title, year, length, inColor, studioName, producerC#)

Studio (name, address, presC#)

SELECT title, year

FROM Movie

WHERE producerC# IN

(SELECT presC#FROM StudioWHERE address LIKE ‘%Los Angeles%’)

Page 34: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

34CSE310 베 스 By Prof. Jin Hyun Son

(계 )

스칼라 값 생 하는

select-from-where 문에 해 하나 값만 생

그 문 하나 수처럼 수 다.

( ) Star Wars 의 제작자 찾아라.

SELECT name

FROM MovieExec

WHERE cert# =

(SELECT producerC#

FROM Movie

WHERE title = ‘Star Wars’);

single-row SELECT

(singleton SELECT)

Page 35: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

35CSE310 베 스 By Prof. Jin Hyun Son

(계 )

는 조건

결과가 조건에

값 결과 생 하는 프 키트

R: , s: 스칼라 값

EXISTS R

R 에 튜플 하나라 존 하 (iff) 참

s IN R

s 가 R 에 는 값 어느 하나 치하 (iff) 참

Page 36: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

36CSE310 베 스 By Prof. Jin Hyun Son

(계 )

s > ALL R

s 가 단항(unary) R 든 값보다 크 (iff) 참

“>” 연 신 다 연 가능

s > ANY R

s 가 단항 R 값 적어 하나보다 크 (iff) 참

“>” 연 신 다 연 가능

EXIST IN 프 키트 반 ALL과 ANY(또는 SOME)

정량 (quantifier) 다.

Page 37: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

37CSE310 베 스 By Prof. Jin Hyun Son

(계 )

튜플 는 조건

SQL에 하나 튜플 스칼라 값들 스트 현

(123, ‘foo’), (name,address, networth)

튜플 t R 같 들 어 ,

t R 가능

t IN R

t <> ANY R

R 원 튜플 할 ,

R 애트 뷰트에 한 순 에 라 애트 뷰트들

Page 38: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

38CSE310 베 스 By Prof. Jin Hyun Son

(계 )

( ) Movie(title, year, length, inColor, studioName, producerC#)

StarsIn(movieTitle, movieYear, starName)

MovieExec(name, address, cert#, netWorth)

Harrisonford 가 출연한 화 제작자의 이 을 찾아라.

SELECT name

FROM MovieExec

WHERE cert# IN

(SELECT producerC#

FROM Movie

WHERE (title, year) IN

(SELECT movieTitle, movieYear

FROM StarsIn

WHERE starName = ‘Harrison Ford’));

중복(duplicates) 없음

Page 39: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

39CSE310 베 스 By Prof. Jin Hyun Son

(계 )

( – 계 )

내포 는 하나 select-from-where 문 변환 가능

SELECT name

FROM MovieExex, Movie, StarsIn

WHERE cert# = producerC# AND

title = movieTitle AND

year = movieYear AND

starName = ‘Harrison Ford’;

FROM 절: 주 나 에 들

WHERE 절: IN 조 (Join) 체

복 발생 가능

Page 40: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

40CSE310 베 스 By Prof. Jin Hyun Son

(계 )

( – 계 ) 복 생

(H.F., t1, y1)

(H.F., t2, y2)

(t1, y1, c1)

(t2, y2, c1)

(c1, n1)

StarsIn Movie MovieExec

Harrison Ford - - - Star Wars - - - Steven Spielberg

Harrison Ford - - - Indiana Jones - - - Steven Spielberg

Page 41: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

41CSE310 베 스 By Prof. Jin Hyun Son

(계 )

호 (correlated subquery)

에 언 튜플 변수 ,

그 내 에 하는

( ) Movie(title, year, length, inColor, studioName, producerC#)

둘 이상의 화에 사 된 화 제목을 찾아라.» 제목은 같으면 제작연 가 다 튜플들

SELECT titleFROM Movie AS OldWHERE year < ANY

(SELECT yearFROM MOVIEWHERE title = Old.title)

애트리뷰트 이름에 대한영역 규칙(scoping rules)에 주목하라.

Page 42: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

42CSE310 베 스 By Prof. Jin Hyun Son

(계 )

FROM 절에

결과 튜플 변수 언

튜플 변수 WHERE 절 조건에

(예) Harrisonford 가 출연한 화의 제작자 이 을 찾아라.

SELECT Name

FROM MovieExec, (SELECT producerC#

FROM Movie, StarsIn

WHERE title = movieTitle AND

year = movieYear AND

starname = ‘Harrison Ford’) Prod

WHERE cert# = Prod.producerC#;

Page 43: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

43CSE310 베 스 By Prof. Jin Hyun Son

(계 )

SQL 조 수식 (Join expressions)

조 수식 그 체가 수 고, 또는

수 다.

CROSS JOIN: 카티 프 트

Movie CROSS JOIN StarsIn

JOIN … ON: 타 조

Movie JOIN StarsIn ON

title = movieTitle AND year = movieYear;

NATURAL JOIN: 연 조

MovieStar NATURAL JOIN MovieExec

Page 44: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

44CSE310 베 스 By Prof. Jin Hyun Son

(계 )

FROM 절 조 수식

SELECT title, year, starName

FROM Movie JOIN StarsIn ON

title = movieTitle AND year = movieYear;

Page 45: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

45CSE310 베 스 By Prof. Jin Hyun Son

(계 )

조 (outerjoin)

허 튜플 결과에 추가* 허 튜플 (dangling tuple): 조 한 튜플

조 않 경 애트 뷰트들 NULL 값 처

연 조

NATURAL [LEFT | RIGHT | FULL] OUTER JOIN

JOIN…ON 한 조

[LEFT | RIGHT | FULL] OUTER JOIN...ON

Page 46: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

46CSE310 베 스 By Prof. Jin Hyun Son

(계 )

(예) MovieStar(name, address, gender, birthdate)

MovieExec(name, address, cert#, netWorth)

MovieStar NATURAL FULL OUTER JOIN MovieExec;

name

Mary T. Moore

Tom hanks

George Lucas

address

Maple St.

Cherry Ln.

Oak Rd.

gender

‘F’

‘M’

NULL

birthdate

9/9/99

8/8/88

NULL

cert#

12345

NULL

23456

networth

$100…

NULL

$200…

스타 만 임원이 아닌 (예: Tom hanks), 또는

임원이 만 스타가 아닌(예: George Lucas) 사람들에 대한 정보도 함께 얻는다.

Page 47: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

47CSE310 베 스 By Prof. Jin Hyun Son

(계 )

(예) Movie NATURAL LEFT OUTER JOIN MovieExec;

» 처 튜플 결과에 포함

» 번째 튜플 결과에 포함 않

(예) Movie NATURAL RIGHT OUTER JOIN MovieExec;

» 처 과 번째 튜플 결과에 포함

» 번째 튜플 결과에 포함 않

Page 48: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

48CSE310 베 스 By Prof. Jin Hyun Son

(계 )

(예) Movie FULL OUTER JOIN StarsIN ON

title = movieTitle AND year = movieYear

» On 조건 만족하 않는 Movie 튜플과 StarsIn 튜플들 NULL

적절히 어 결과에 포함

Page 49: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

49CSE310 베 스 By Prof. Jin Hyun Son

참고: SQL 수식에 는 프 키트

본적 프 키트: =, <>, <, >, <=, >=

LIKE 프 키트

title LIKE ‘%love%’

IN 프 키트

튜플값 IN [ | (값1,값2,…,값n)]

IS NULL, IS NOT NULL, IS TRUE, IS FALSE, IS UNKNOWN 단항

프 키트

studioName IS NULL; cost = 100 IS TRUE

EXISTS UNIQUE 단항 프 키트

EXISTS subquery, UNIQUE subquery

ANY(또는 SOME) ALL: 프 키트 같 는 정량

Page 50: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

50CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연

복(duplicates) 제거

SQL 시스 반적 복 제거하 않는다.

복 제거: 키워드 DISTINCT

SELECT DISTINCT name

복 제거

반적 크다.

정 (sorting) 등

DISTINCT 적 시 신 할 것

Page 51: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

51CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연 (계 )

합집합, 집합, 차집합에 복

합집합, 집합, 차집합 연 들 본적 복 제거

복 제거 방 : 키워드 ALL

R UNION ALL S

(SELECT title, year FROM Movie)

UNION ALL

(SELECT movieTitle AS title, movieYear AS year

FROM StarsIn);

R INTERSECT ALL S

R EXCEPT ALL S

Page 52: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

52CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연 (계 )

집단값(aggregation)

집단값 연

집단화 값 생 하는 다 개 연

COUNT: 값들 개수

SUM: 한 열에 는 값들 합

AVG: 한 열에 는 값들 균

MIN: 한 열에 는 값 최 값

MAX: 한 열에 는 값 최 값

Page 53: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

53CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연 (계 )

( ) SELECT COUNT(*)

FROM MovieExec;

* 는 집단값 연 COUNT에만 할 수 는 법

( ) SELECT COUNT(DISTINCT name)

FROM MovieExec;

( ) SELECT AVG(netWorth)

FROM MovieExec;

* 는 튜플 전체를 나타낸다.

Page 54: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

54CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연 (계 )

그룹화(grouping): GROUP BY 절

어 열 값에 라 튜플들 그룹화

GROUP BY 다 에는 그룹화 애트 뷰트들 나열한다.

SELECT studioName, SUM(length)

FROM Movie

GROUP BY studioName;

집단값 가 SELECT 절에 집단값 아닌 태 술 수 는

애트 뷰트는 그룹화 애트 뷰트 ( , GROUP BY절에 나열

애트 뷰트) 뿐 다.

그룹화 애트리뷰트

그룹의 단 값

Page 55: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

55CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연 (계 )

그룹에 한 조건: HAVING 절

그룹에 한 조건 술

집단값 특

(예) 1930년 이전에 적어 하나의 화 제작한 적이

있는 제작자에 해, 제작자의 이 과 그 제작자가

제작한 화 상 시간의 합계 하라.

SELECT name, SUM(length)

FROM MovieExec, Movie

WHERE producerC# = cert#

GROUP BY name

HAVING MIN(year) < 1930;

그룹화 애트리뷰트는

HAVING 절에

단값이 아닌

상태로도 사용 가능

( ) name LIKE ‘John%’

Page 56: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

56CSE310 베 스 By Prof. Jin Hyun Son

전체 다루는 연 (계 )

SQL 에 절들 순

SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY

WHERE 절: 조건 만족하는 튜플

HAVING 절: 조건 만족하는 그룹

해 순

WHERE 절 만족하는 튜플들만 택

튜플들 GROUP BY 절에 는 애트 뷰트들

그룹화

HAVING 절 만족하는 그룹들만 택

Page 57: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

57CSE310 베 스 By Prof. Jin Hyun Son

베 스 변경

베 스 변경(modification)

INSERT, DELETE, UPDATE

INSERT INTO R(A1, … , An) VALUES (v1, … , vn);

키워드 INSERT INTO,

R, 호 묶 애트 뷰트들 스트

키워드 VALUES, 그 고 튜플 수식

( ) INSERT INTO StarIn(movieTitle, movieYear, starName)

VALUES(‘The Maltese Falcon’, 1942,‘Sydney Greenstreet’);

Page 58: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

58CSE310 베 스 By Prof. Jin Hyun Son

베 스 변경 (계 )

( ) INSERT INTO StarsIn

VALUES(‘The Maltese Falcon’,1942,‘Sydney Greenstreet’);

( ) Movie 레이 에는 언 되고 있 , Studio 레이 에는

나타나 않은 모든 스튜 Studio(name, address, presC#)

레이 에 추가하라.

INSERT INTO studio(name)

SELECT DISTINCT studioName

FROM Movie

WHERE studioName NOT IN(SELECT name FROM Studio);

F 추가된 튜플의 address presC# 애트 뷰트에는 NULL 값이 사

Page 59: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

59CSE310 베 스 By Prof. Jin Hyun Son

베 스 변경 (계 )

DELETE FROM R WHERE <조건>;

키워드 DELETE FROM

, 들어 R,

키워드 WHERE, 그 고 조건

( ) DELETE FROM StarsIn

WHERE movieTitle = ‘The Maltese Falcon’ AND

movieYear = 1942 AND starName = ‘Sydney Greenstreet’;

Page 60: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

60CSE310 베 스 By Prof. Jin Hyun Son

베 스 변경 (계 )

갱신

UPDATE R SET < 값> WHERE <조건>;

키워드 UPDATE, , 들어 R,

키워드 SET, 식(formula)들 스트,

키워드 WHERE, 그 고 조건

( ) 화 임 이 스튜 사장인 경 ‘Pres.’ 라는 함을

이 앞에 여라.

UPDATE MovieExec

SET name = ‘Pres. ‘ || name

WHERE cert# IN (SELECT presC# FROM Studio);

Page 61: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

61CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정

정 언어 조 언어

정 언어 (DDL: Data Definition Language)

베 스에 는 정보 조 현

조 언어 (DML: Data Manipulation Language)

변경

Page 62: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

62CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

SQL 시스 에 는 주 타

INT, INTEGER, SHORTINT

FLOAT (or REAL), DOUBLE PRECISION, DECIMAL

DECIMAL(n,d)

십 수 n 개, d 치에 수점

(예) DECIMAL(6, 2): 0123.45

NUMERIC: DECIMAL 과

CHAR(n), VARCHAR(n)

고정 또는 가변 문 열

Page 63: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

63CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

BIT(n), BIT VARYING(n)

고정 또는 가변 트열

BOOLEAN

TRUE, FALSE, UNKNOWN

DATE TIME

특별한 형태 문 열

Page 64: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

64CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

언: CREATE TABLE table-name

CREATE TABLE

; 애트 뷰트, 애트 뷰트 타 들 스트

CREATE TABLE MovieStar (

name CHAR(30),

address VARCHAR(255),

gender CHAR(1),

birthdate DATE );

제: DROP TABLE table-name

DROP TABLE R;

Page 65: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

65CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

스카 변경: ALTER TABLE table-name

ALTER TABLE

, 키워드 ADD, 애트 뷰트 과 타

, 키워드 DROP, 애트 뷰트

ALTER TABLE MovieStar ADD phone CHAR(16);

ALTER TABLE MovieStar DROP birthdate;

Page 66: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

66CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

폴트 값

체적 값 주어 않았 는 NULL 값

키워드 DEFAULT 특정 값 술 가능

gender CHAR(1) DEFAULT ‘?’,

birthdate DATE DEFAULT DATE ‘0000-00-00’

ALTER TABLE MovieStar ADD phone CHAR(16)

DEFAULT ‘unlisted’;

Page 67: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

67CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

어 타 나타내는

정 : CREATE DOMAIN

CREATE DOMAIN < > AS <타 술>;

CREATE DOMAIN MovieDomain AS VARCHAR(50)

DEFAULT ‘unknown’;

애트 뷰트 타 수 다.

title MovieDomain

Page 68: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

68CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

에 정 폴트 값 변경: ALTER

DOMAIN

ALTER DOMAIN MovieDomain SET DEFAULT ‘no

such title’;

제: DROP DOMAIN

DROP DOMAIN MovieDomain;

Page 69: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

69CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

애트 뷰트 A 에 한

애트 뷰트 A 에 특정 값 가 는 튜플들 효과적 찾 수

원해 주는 료 조

( ) B+-tree, 해쉬

SQL (SQL-99 )에 포함 어 않다.

그러나 DBMS 가 원

Page 70: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

70CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

생 : CREATE INDEX

CREATE INDEX < 스 > ON < (애트 뷰트 스트)>

CREATE INDEX YearIndex ON Movie(year);

CREATE INDEX KeyIndex ON Movie(title, year);

제: DROP INDEX

DROP INDEX YearIndex;

단점: 처 가 라 다.

그러나 , 제, 갱신 연 복 해 다.

Page 71: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

71CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

택 (Selection of Indexes)

,

처 향

변경 ( , 제, 갱신) 저하

또는 변경

접근하는 스크 수

접근 + 접근

Page 72: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

72CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

(예) StarsIn(movieTitle, movieYear, starName)

(Q1) SELECT movieTitle, movieYear

FROM StarsIn

WHERE starName = s;

(Q2) SELECT starName

FROM StarsIn

WHERE movieTitle = t AND movieYear = y;

(I1) INSERT INTO StarsIn VALUES(t, y, s);

Page 73: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

73CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

(예: 계 ) 다음과 같이 가정하자.

StarsIn 10개 스크 에 저

균적 ,

한 스타는 3 화, 한 화에는 3 스타가 출연

특정 스타나 특정 화에 한 튜플들

10 개 스크 들에

, 특정 화 3 튜플들 접근: 3 스크 접근

(read): 스크 1 번 접근

변경(modification)에는 스크 번 접근

: 스크 2 번 접근

적당한 스크 찾고, 그 다시

Page 74: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

74CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

(예: 계 ) Q1, Q2, I1 의 빈

Q1: 전체 p1 %

Q2: 전체 p2 %

I1: 전체 1-p1-p2 %

Action

Q1

Q2

I1

No Index

10

10

2

2+8p1+8p2

Star Index

4

10

4

4+6p2

Movie Index

10

4

4

4+6p1

Both Indexes

4

4

6

6-2p1-2p2

질의 및 삽입에 따른 비용

색인: 디스크블록 1 번데이 : 디스크블록 3 번

색인: 디스크블록 2 번데이 : 디스크블록 2 번

평균 비용f1(Q1)+ f2(Q2)+

f3(I1)10p1+4p2+4(1-p1-p2)

Page 75: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

75CSE310 베 스 By Prof. Jin Hyun Son

SQL에 스키 정 (계 )

(예: 계 ) p1, p2 의 값에 따른 비용

p1 = p2 = 0.1 : 삽입이 많 경우

2 + 8p1 + 8p2 가 최

필 없

p1 = p2 = 0.4 : 질 Q1과 Q2가 많 경우

6 - 2p1 - 2p2 가 최

p1 = 0.5, p2 = 0.1 : 질 Q1 이 많 경우

4 + 6p2 가 최

starName 에 한 필

Page 76: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

76CSE310 베 스 By Prof. Jin Hyun Son

CREATE TABLE 문 하여 정 실제

DB 내에 존 하는 반 , 뷰(view)는 물 적 존 하

않는다.

뷰 언

CREATE VIEW <뷰 > AS <뷰 정 >

<뷰 정 >는 하나 간주 수 다.

CREATE VIEW ParamountMovie AS

SELECT title, year

FROM Movie

WHERE studioName = ‘Paramount’;

Page 77: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

77CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

물 적 튜플들 존 하는

본(base) 또는 본 라 한다.

저 (stored) 또는 저 라고 한다.

뷰는 가 (virtual) 다.

처 에 시 생 는

시(temporary) 라 한다.

Page 78: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

78CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

뷰에 한해당 튜플들 본 가져 다.

뷰에 한 본 에 한 변환

SELECT title

FROM ParamountMovie

WHERE year = 1979;

SELECT title

FROM Movie

WHERE studioName = ‘Paramount’ AND year = 1979;

기본 테이블

ð

의 변경(query modification)

뷰 정의의에

AND 로새로운조건 추가

Page 79: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

79CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

본 과 뷰 포함한

( ) Paramount 에 제작한 화에 출연한 스타들을 찾아라.

SELECT DISTINCT starName

FROM ParamountMovie, StarsIn

WHERE title = movieTitle AND year = movieYear;

여러 들 정 뷰

( ) 화 제목과 그 화의 제작자로 이루어 뷰.

CREATE VIEW MovieProd AS

SELECT title, name

FROM Movie, MovieExec

WHERE producerC# = cert#;

Page 80: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

80CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

애트 뷰트 변경

뷰에 애트 뷰트들 여할 수 다.

CERATE VIEW MovieProd(movieTitle, prodName) AS

SELECT title, name

FROM Movie, MovieExec

WHERE producerC# = cert#

Page 81: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

81CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

뷰 변경

뷰는 갱신 가능(updatable)할 수 , 가능하 않 수 다.

SQL 에 는, 체 하나 R 정

뷰에 해 만 변경 허 한다. 그 고,

다 만족해야 한다.

SELECT 절에는 충 한 애트 뷰트들 어야 한다.

( 1) 키 애트 뷰트들 NULL 아니어야 한다. NOT NULL

제약 반해 는 안 .

(예2) 뷰 해 튜플 그 뷰 해 볼 수 어야 함

WHERE 절에 는 는 R 포함해 는 안 .

correlated subquery 허 안 함

Page 82: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

82CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

( ) 뷰 ParamountMovie에 다음과 같은 튜플을 삽입한다고 하자.

INSERT INTO ParamountMovie

VALUES(‘Star Trek’, 1979)

studioName 애트 뷰트가 뷰 애트 뷰트에 포함 어 않 므 , 뷰에

는 튜플 Movie 에 반 studioName값에는 NULL

들어간다. 튜플 ParamountMovie 조건 만족하 않는다. ,

ParamountMovie 뷰에 나타나 않는다.

라 뷰 ParamountMovie는 다 과 같 수정 어야 한다:

CREATE VIEW ParamountMovie AS

SELECT studioName, title, year

FROM Movie

WHERE studioName = ‘Paramount’;

Page 83: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

83CSE310 베 스 By Prof. Jin Hyun Son

뷰 정 (계 )

( ) 갱신가능 뷰로 터 튜플을 삭제

DELETE FROM ParamountMovie

WHERE title LIKE ‘%Trek%’;

( ) 갱신가능 뷰에 한 갱신

UPDATE ParamountMovie

SET year = 1979

WHERE title = ‘Star Trek the Movie’;

뷰 제

DROP VIEW ParamountMovie;

Page 84: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

84CSE310 베 스 By Prof. Jin Hyun Son

참고: 뷰 갱신 가능

Movie(title, year, length, inColor, studioName, producerC#)

MovieExec(name, address, cert#, netWorth)

CREATE VIEW MovieProd AS

SELECT title, name

FROM Movie, MovieExec

WHERE producerC# = cert#;

다 과 같 튜플 뷰 MovieProd에 하 한다고 하 :

(‘Greatest Show on Earth’, ‘cecil B. DeMille’)

Movie MovieExec 키는 NULL 안 다.

조 루어 는 애트 뷰트들에 NULL 값 들어간다.

NULL 값 동 하 않 에 주 하라.

Page 85: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

85CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

뷰 포함하는 해

본적 개념: 뷰에 한 수식 트 본

에 한 수식 트 변환

뷰에 대한 참조를 뷰의 정의로 대체

(Q: 의, V, W: 뷰)

뷰 정의

Q

V W

뷰에 대한참조

뷰에 대한 의의수식 트리

기본 테이블에 대한의의 수식 트리

Page 86: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

86CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

CREATE VIEW ParamountMovie AS

SELECT title, year

FROM Movie

WHERE studioName = ‘Paramount’;

σ studioName = ‘Paramount’

π title, year

Movie

뷰 Paramount에대한 의

이 뷰를 정의하는 의의수식 트리

Page 87: 6장 데이터베이스언어 SQL - 어리버리 켄신 · 2015-01-21 · CSE310 데이터베이스By Prof. Jin Hyun Son 3 SQL의발전 SQL 발전과정 Sequel System R 프로젝트(1970

87CSE310 베 스 By Prof. Jin Hyun Son

뷰 (계 )

기본 테이블을 사용한 질의의 수식 트리

π title, year

σ studioName = ‘Paramount’

Movie

π title

ó year=1979

π title

σ year=1979

질의에 한 수식 트리

ParamountMovie

Movie

단순화된 질의

π title

σ year=1979 AND studioName = ‘Paramount’

SELECT title

FROM ParamountMovie

WHERE year = 1979;