6장 데이터베이스언어 sql - 어리버리 켄신 · 2015-01-21 · cse310...
Post on 25-Feb-2020
8 Views
Preview:
TRANSCRIPT
6 : 베 스 언어 SQL
Prof. Jin Hyun Son
jhson@cse.hanyang.ac.kr
Department of Computer Science & Engineering
Hanyang University
2CSE310 베 스 By Prof. Jin Hyun Son
6 . 베 스 언어 SQL
SQL 에 단순
하나 포함하는
(subquery)
전체 다루는 연
베 스 변경
SQL 에 스키 정
뷰 정
3CSE310 베 스 By Prof. Jin Hyun Son
SQL 발전
SQL 발전 과정
Sequel
System R 프 젝트 (1970 년 반); 추후 SQL 변경
SQL-86, SQL-89
SQL-92
SQL2 라고
SQL-99
화 행 에는 SQL3 라고 었
객체- 계 특징, 타 능들
SQL4
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
5CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순
SQL 본적 형태
한 에 어 조건 만족하는 튜플들 검
본적 개 키워드: SELECT, FROM, WHERE
FROM 절: 는 하나 들
WHERE 절: 튜플 결과에 포함 해 만족해야 하는
조건
SELECT 절: 결과 생 할 애트 뷰트들 술
( ) 1990년 Disney 스튜 에 제작된 모든 화 찾아라.
SELECT *FROM MovieWHERE studioName = ‘Disney’ AND year = 1990;
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
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
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.
9CSE310 베 스 By Prof. Jin Hyun Son
참고: SQL 거나/ 하는
SELECT-FROM-WHERE
FROM 절
어 는가?
WHERE 절
튜플 어 조건 만족해야 하는가?
SELECT 절
결과는 무엇 가?
SELECT-FROM-WHERE
같 순
FROM 절, WHERE 절, SELECT 절
10CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
SQL에 택 연
WHERE 절에 택 조건 시
여 개 반적 연 : =, <>, >, >=, <=
술 연 : +, -, * 등
문 열 접합 연 (concatenation operator) ||
SQL 에 문 열 주 에 단 호 어
나타낸다.
정수 실수
값들 논 연 AND, OR, NOT 결합
가능
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는 부울 타입
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’ 다 문 열
13CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
문 열
문 열 는 전식(lexicographic) 순 에 반
( ) ‘at’ < ‘bar’
s LIKE p
간단한 합(match) 반 한 문 열
s 는 문 열 타 애트 뷰트, p 는
: 특수 문 % _ 택적 가 문 열
% : 0 가 문 열
_ : 한 문
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, . . .} */
연 개 어포스트 피는하나 어포스트 피 시
15CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
LIKE 수식에 스케 프(escape) 문
키워드 ESCAPE 하고 하는 스케 프 문
( ) s LIKE ‘x%%x%’ ESCAPE ‘x’
/* % 시 해 % 끝나는 든 문 열 */
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’
연 하여 날짜 시간 가능
17CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
널(null) 값
값 정 할 수 없는 경
알 않 값(value unknown)
값 무엇 알 수 없는 경
( ) 어 화 스타의 생일을 모
적 가능한 값(value inapplicable)
적합한 값 존 하 않는 경
( ) MovieStar 에 미혼인 화 스타의 spouse 값
NULL 값은
서로동일한값이아님
18CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
NULL에 한 연
술 연 ( , ×, + 등 )에 NULL
결과는 NULL
( ) x 값 NULL , x + 3 NULL
연 ( , = 나 >)에 NULL
결과는 UNKNOWN
( ) x 값 NULL , x > 3 UNKNOWN
NULL 값 동 한 값 아니다.
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
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
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 이 아닌 모든 튜플을 찾아라”
22CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
결과 정 (ordering)
출 순
애트 뷰트 값에 반 수
정 출
다 절 추가:
ORDER BY <애트 뷰트 스트>
폴트는 차순
키워드 DESC 내 차순
23CSE310 베 스 By Prof. Jin Hyun Son
SQL에 단순 (계 )
( ) 1990년 Disney 에 제작된 화들을,상 시간이 짧은 순 로,
상 시간이 같을 경 , 화제목의 알파 순 로 찾아라.
SELECT *FORM MovieWHERE studioName = ‘Disney’ AND year = 1990ORDER BY length, title;
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#
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 같 가능
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: 동 한 스타 가 든
결과에 포함 는 것 방 . 또한 같 주 가 스타들 단
한번만 생 하 해 다.
27CSE310 베 스 By Prof. Jin Hyun Son
포함하는 (계 )
여러 들 포함하는 해
내포 루프 (nested loop)
여러 개 튜플 변수들 ,
각 튜플 변수에 해 루프 갖는 첩 루프 생각
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.
내포된 루프에 따른
알고리
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 절 애트 뷰트에
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))
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);
32CSE310 베 스 By Prof. Jin Hyun Son
다
는 결과 생 하는 수식
WHERE 절에
FROM 절에 가능
결과가 단 수
WHERE 절에 다 애트 뷰트 접 가능
개 가 하나 형
UNION, INTERSECT, EXCEPT
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%’)
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)
35CSE310 베 스 By Prof. Jin Hyun Son
(계 )
는 조건
결과가 조건에
값 결과 생 하는 프 키트
R: , s: 스칼라 값
EXISTS R
R 에 튜플 하나라 존 하 (iff) 참
s IN R
s 가 R 에 는 값 어느 하나 치하 (iff) 참
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) 다.
37CSE310 베 스 By Prof. Jin Hyun Son
(계 )
튜플 는 조건
SQL에 하나 튜플 스칼라 값들 스트 현
(123, ‘foo’), (name,address, networth)
튜플 t R 같 들 어 ,
t R 가능
t IN R
t <> ANY R
R 원 튜플 할 ,
R 애트 뷰트에 한 순 에 라 애트 뷰트들
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) 없음
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) 체
복 발생 가능
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
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)에 주목하라.
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#;
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
44CSE310 베 스 By Prof. Jin Hyun Son
(계 )
FROM 절 조 수식
SELECT title, year, starName
FROM Movie JOIN StarsIn ON
title = movieTitle AND year = movieYear;
45CSE310 베 스 By Prof. Jin Hyun Son
(계 )
조 (outerjoin)
허 튜플 결과에 추가* 허 튜플 (dangling tuple): 조 한 튜플
조 않 경 애트 뷰트들 NULL 값 처
연 조
NATURAL [LEFT | RIGHT | FULL] OUTER JOIN
JOIN…ON 한 조
[LEFT | RIGHT | FULL] OUTER JOIN...ON
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) 사람들에 대한 정보도 함께 얻는다.
47CSE310 베 스 By Prof. Jin Hyun Son
(계 )
(예) Movie NATURAL LEFT OUTER JOIN MovieExec;
» 처 튜플 결과에 포함
» 번째 튜플 결과에 포함 않
(예) Movie NATURAL RIGHT OUTER JOIN MovieExec;
» 처 과 번째 튜플 결과에 포함
» 번째 튜플 결과에 포함 않
48CSE310 베 스 By Prof. Jin Hyun Son
(계 )
(예) Movie FULL OUTER JOIN StarsIN ON
title = movieTitle AND year = movieYear
» On 조건 만족하 않는 Movie 튜플과 StarsIn 튜플들 NULL
적절히 어 결과에 포함
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: 프 키트 같 는 정량
50CSE310 베 스 By Prof. Jin Hyun Son
전체 다루는 연
복(duplicates) 제거
SQL 시스 반적 복 제거하 않는다.
복 제거: 키워드 DISTINCT
SELECT DISTINCT name
복 제거
반적 크다.
정 (sorting) 등
DISTINCT 적 시 신 할 것
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
52CSE310 베 스 By Prof. Jin Hyun Son
전체 다루는 연 (계 )
집단값(aggregation)
집단값 연
집단화 값 생 하는 다 개 연
COUNT: 값들 개수
SUM: 한 열에 는 값들 합
AVG: 한 열에 는 값들 균
MIN: 한 열에 는 값 최 값
MAX: 한 열에 는 값 최 값
53CSE310 베 스 By Prof. Jin Hyun Son
전체 다루는 연 (계 )
( ) SELECT COUNT(*)
FROM MovieExec;
* 는 집단값 연 COUNT에만 할 수 는 법
( ) SELECT COUNT(DISTINCT name)
FROM MovieExec;
( ) SELECT AVG(netWorth)
FROM MovieExec;
* 는 튜플 전체를 나타낸다.
54CSE310 베 스 By Prof. Jin Hyun Son
전체 다루는 연 (계 )
그룹화(grouping): GROUP BY 절
어 열 값에 라 튜플들 그룹화
GROUP BY 다 에는 그룹화 애트 뷰트들 나열한다.
SELECT studioName, SUM(length)
FROM Movie
GROUP BY studioName;
집단값 가 SELECT 절에 집단값 아닌 태 술 수 는
애트 뷰트는 그룹화 애트 뷰트 ( , GROUP BY절에 나열
애트 뷰트) 뿐 다.
그룹화 애트리뷰트
그룹의 단 값
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%’
56CSE310 베 스 By Prof. Jin Hyun Son
전체 다루는 연 (계 )
SQL 에 절들 순
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY
WHERE 절: 조건 만족하는 튜플
HAVING 절: 조건 만족하는 그룹
해 순
WHERE 절 만족하는 튜플들만 택
튜플들 GROUP BY 절에 는 애트 뷰트들
그룹화
HAVING 절 만족하는 그룹들만 택
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’);
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 값이 사
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’;
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);
61CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정
정 언어 조 언어
정 언어 (DDL: Data Definition Language)
베 스에 는 정보 조 현
조 언어 (DML: Data Manipulation Language)
변경
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)
고정 또는 가변 문 열
63CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정 (계 )
BIT(n), BIT VARYING(n)
고정 또는 가변 트열
BOOLEAN
TRUE, FALSE, UNKNOWN
DATE TIME
특별한 형태 문 열
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;
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;
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’;
67CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정 (계 )
어 타 나타내는
정 : CREATE DOMAIN
CREATE DOMAIN < > AS <타 술>;
CREATE DOMAIN MovieDomain AS VARCHAR(50)
DEFAULT ‘unknown’;
애트 뷰트 타 수 다.
title MovieDomain
68CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정 (계 )
에 정 폴트 값 변경: ALTER
DOMAIN
ALTER DOMAIN MovieDomain SET DEFAULT ‘no
such title’;
제: DROP DOMAIN
DROP DOMAIN MovieDomain;
69CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정 (계 )
애트 뷰트 A 에 한
애트 뷰트 A 에 특정 값 가 는 튜플들 효과적 찾 수
원해 주는 료 조
( ) B+-tree, 해쉬
SQL (SQL-99 )에 포함 어 않다.
그러나 DBMS 가 원
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;
단점: 처 가 라 다.
그러나 , 제, 갱신 연 복 해 다.
71CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정 (계 )
택 (Selection of Indexes)
,
처 향
변경 ( , 제, 갱신) 저하
또는 변경
접근하는 스크 수
접근 + 접근
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);
73CSE310 베 스 By Prof. Jin Hyun Son
SQL에 스키 정 (계 )
(예: 계 ) 다음과 같이 가정하자.
StarsIn 10개 스크 에 저
균적 ,
한 스타는 3 화, 한 화에는 3 스타가 출연
특정 스타나 특정 화에 한 튜플들
10 개 스크 들에
, 특정 화 3 튜플들 접근: 3 스크 접근
(read): 스크 1 번 접근
변경(modification)에는 스크 번 접근
: 스크 2 번 접근
적당한 스크 찾고, 그 다시
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)
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 에 한 필
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’;
77CSE310 베 스 By Prof. Jin Hyun Son
뷰 (계 )
물 적 튜플들 존 하는
본(base) 또는 본 라 한다.
저 (stored) 또는 저 라고 한다.
뷰는 가 (virtual) 다.
처 에 시 생 는
시(temporary) 라 한다.
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 로새로운조건 추가
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#;
80CSE310 베 스 By Prof. Jin Hyun Son
뷰 (계 )
애트 뷰트 변경
뷰에 애트 뷰트들 여할 수 다.
CERATE VIEW MovieProd(movieTitle, prodName) AS
SELECT title, name
FROM Movie, MovieExec
WHERE producerC# = cert#
81CSE310 베 스 By Prof. Jin Hyun Son
뷰 (계 )
뷰 변경
뷰는 갱신 가능(updatable)할 수 , 가능하 않 수 다.
SQL 에 는, 체 하나 R 정
뷰에 해 만 변경 허 한다. 그 고,
다 만족해야 한다.
SELECT 절에는 충 한 애트 뷰트들 어야 한다.
( 1) 키 애트 뷰트들 NULL 아니어야 한다. NOT NULL
제약 반해 는 안 .
(예2) 뷰 해 튜플 그 뷰 해 볼 수 어야 함
WHERE 절에 는 는 R 포함해 는 안 .
correlated subquery 허 안 함
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’;
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;
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 값 동 하 않 에 주 하라.
85CSE310 베 스 By Prof. Jin Hyun Son
뷰 (계 )
뷰 포함하는 해
본적 개념: 뷰에 한 수식 트 본
에 한 수식 트 변환
뷰에 대한 참조를 뷰의 정의로 대체
(Q: 의, V, W: 뷰)
뷰 정의
Q
V W
뷰에 대한참조
뷰에 대한 의의수식 트리
기본 테이블에 대한의의 수식 트리
86CSE310 베 스 By Prof. Jin Hyun Son
뷰 (계 )
CREATE VIEW ParamountMovie AS
SELECT title, year
FROM Movie
WHERE studioName = ‘Paramount’;
σ studioName = ‘Paramount’
π title, year
Movie
뷰 Paramount에대한 의
이 뷰를 정의하는 의의수식 트리
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;
top related