شرکت ibm در دهه 1970 در سیستم مدیریت پایگاه داده system r برای...

108
SQL ل ص ف5

Upload: russell-scott

Post on 16-Jan-2016

229 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SQL 5فصل

Page 2: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

شرکتIBM دهه داده 1970در پایگاه مدیریت سیستم درSystem R نمود اسفاده زبان این از بار اولین برای

به نیاز شد استفاده زیادی های شرکت توسط که زمانیکرد پیدا شدن استاندارد

:استانداردها◦SQL-86◦SQL-89◦SQL-92◦SQL-99◦SQL-2003

جوی و پرس SQLزبان

Page 3: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال

sid sname rating age

22 dustin 7 45.0

31 lubber 8 55.558 rusty 10 35.0

sid sname rating age28 yuppy 9 35.031 lubber 8 55.544 guppy 5 35.058 rusty 10 35.0

sid bid day

22 101 10/10/9658 103 11/12/96

R1

S1

S2

Page 4: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ها قایقران جدول

CREATE TABLE "Sailors"( sid INTEGER NOT NULL, sname CHARACTER VARYING(30), age INTEGER, rating INTEGER, PRIMARY KEY (sid ))

Page 5: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ها قایق جدول

CREATE TABLE "Boats"( bid INTEGER NOT NULL, color CHARACTER VARYING(10), bname CHARACTER VARYING(10), PRIMARY KEY (bid ))

Page 6: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

قایقران ) ارتباط رزرو جدول) ها قایق و ها

CREATE TABLE "Reserves"( sid INTEGER NOT NULL, bid INTEGER NOT NULL, date DATE NOT NULL, PRIMARY KEY (sid , bid , date ), FOREIGN KEY (bid) REFERENCES "Boats" (bid), FOREIGN KEY (sid) REFERENCES "Sailors" (sid))

Page 7: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

relation-list: ) نظر ) مورد رابطه جداول اسامیtarget-list: نظر مورد های صفت یا ها ستون لیستqualification: انواع با خاص سطرهای انتخاب برای شرایط

یا ORیا ANDترکیبات وDISTINCT ) کار: ) به خروجی جدول رابطه در ها تکراری حذف برای

. در اما نیست، الزامی کلیدی کلمه این رود بر SQLمی عادی حالت در. کند نمی حذف را ها تکراری ای رابطه عملگرهای عکس

ساده SQLمثالSELECT [DISTINCT] target-listFROM relation-listWHERE qualification

, , , , ,

Page 8: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ساده جمله یک استراتژی SQLمفهوم یک با توان می را: نمود بیان زیر شکل به مفهومی

◦ Compute the cross-product of relation-list.◦ Discard resulting tuples if they fail qualifications.◦ Delete attributes that are not in target-list.◦ If DISTINCT is specified, eliminate duplicate rows.

. در کند نمی عمل بهینه اجرا برای استراتژی این البتهبرای هایی استراتژی از اجرا برای داده پایگاه های سیستم

. گردد می استفاده اجرا نمودن بهینه

Conceptual Evaluation Strategyمفهومی ارزیابی استراتژی

Page 9: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مفهومی ارزیابی استراتژیSELECT S.snameFROM Sailors S, Reserves RWHERE S.sid=R.sid AND R.bid=103

(sid) sname rating age (sid) bid day

22 dustin 7 45.0 22 101 10/ 10/ 96

22 dustin 7 45.0 58 103 11/ 12/ 96

31 lubber 8 55.5 22 101 10/ 10/ 96

31 lubber 8 55.5 58 103 11/ 12/ 96

58 rusty 10 35.0 22 101 10/ 10/ 96

58 rusty 10 35.0 58 103 11/ 12/ 96

Page 10: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

یا باشند داشته نام هم های صفت رابطه دو که زمانیقسمت در بار چند رابطه باشد FROMیک آمده

A Note on Range Variables

SELECT S.snameFROM Sailors S, Reserves RWHERE S.sid=R.sid AND bid=103

SELECT snameFROM Sailors, Reserves WHERE Sailors.sid=Reserves.sid AND bid=103

It is good style,however, to userange variablesalways!OR

Page 11: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Would adding DISTINCT to this query make a difference?

What is the effect of replacing S.sid by S.sname in the SELECT clause? Would adding DISTINCT to this variant of the query make a difference?

Find sailors who’ve reserved at least one boat

SELECT S.snameFROM Sailors S, Reserves RWHERE S.sid=R.sid

Page 12: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Find sid’s of sailors who’ve reserved a red or a green boat

UNION: Can be used to compute the union of any two union-compatible sets of tuples (which are themselves the result of SQL queries).

If we replace OR by AND in the first version, what do we get?

Also available: EXCEPT (What do we get if we replace UNION by EXCEPT?)

SELECT S.sidFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND (B.color=‘red’ OR B.color=‘green’)

SELECT S.sidFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’UNIONSELECT S.sidFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘green’

Page 13: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Find sid’s of sailors who’ve reserved a red and a green boat

INTERSECT: Can be used to compute the intersection of any two union-compatible sets of tuples.

Included in the SQL/92 standard, but some systems don’t support it.

Contrast symmetry of the UNION and INTERSECT queries with how much the other versions differ.

SELECT S.sidFROM Sailors S, Boats B1, Reserves R1, Boats B2, Reserves R2WHERE S.sid=R1.sid AND R1.bid=B1.bid AND S.sid=R2.sid AND R2.bid=B2.bid AND B1.color=‘red’ AND B2.color=‘green’

SELECT S.sidFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’INTERSECTSELECT S.sidFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘green’

Key field!

Page 14: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

اشتراک INTERSECTمعادل اجتماع UNIONمعادل تفاضل EXCEPTمعادل

در ای مجموعه SQLعملگرهای

Page 15: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

A very powerful feature of SQL: a WHERE clause can itself contain an SQL query! (Actually, so can FROM and HAVING clauses.)

To find sailors who’ve not reserved #103, use NOT IN. To understand semantics of nested queries, think of a

nested loops evaluation: For each Sailors tuple, check the qualification by computing the subquery.

تودرتو ) جوی و NestedپرسQuery)

SELECT S.snameFROM Sailors SWHERE S.sid IN (SELECT R.sid FROM Reserves R WHERE R.bid=103)

Find names of sailors who’ve reserved boat #103:

Page 16: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

EXISTS is another set comparison operator, like IN. If UNIQUE is used, and * is replaced by R.bid, finds

sailors with at most one reservation for boat #103. (UNIQUE checks for duplicate tuples; * denotes all attributes. Why do we have to replace * by R.bid?)

Illustrates why, in general, subquery must be re-computed for each Sailors tuple.

Nested Queries with Correlation

SELECT S.snameFROM Sailors SWHERE EXISTS (SELECT * FROM Reserves R WHERE R.bid=103 AND S.sid=R.sid)

Find names of sailors who’ve reserved boat #103:

Page 17: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

We’ve already seen IN, EXISTS and UNIQUE. Can also use NOT IN, NOT EXISTS and NOT UNIQUE.

Also available: op ANY, op ALL, op IN Find sailors whose rating is greater than that of

some sailor called Horatio:

More on Set-Comparison Operators

, , , , ,

SELECT *FROM Sailors SWHERE S.rating > ANY (SELECT S2.rating FROM Sailors S2 WHERE S2.sname=‘Horatio’)

Page 18: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Similarly, EXCEPT queries re-written using NOT IN. To find names (not sid’s) of Sailors who’ve

reserved both red and green boats, just replace S.sid by S.sname in SELECT clause. (What about INTERSECT query?)

Rewriting INTERSECT Queries Using IN

Find sid’s of sailors who’ve reserved both a red and a green boat:

SELECT S.sidFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’ AND S.sid IN (SELECT S2.sid FROM Sailors S2, Boats B2, Reserves R2 WHERE S2.sid=R2.sid AND R2.bid=B2.bid AND B2.color=‘green’)

Page 19: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Division in SQL

Let’s do it the hard way, without EXCEPT:

SELECT S.snameFROM Sailors SWHERE NOT EXISTS ((SELECT B.bid FROM Boats B) EXCEPT (SELECT R.bid FROM Reserves R WHERE R.sid=S.sid))

SELECT S.snameFROM Sailors SWHERE NOT EXISTS (SELECT B.bid FROM Boats B WHERE NOT EXISTS (SELECT R.bid FROM Reserves R WHERE R.bid=B.bid AND R.sid=S.sid))

Sailors S such that ...

there is no boat B without ...

a Reserves tuple showing S reserved B

Find sailors who’ve reserved all boats.

(1)

(2)

Page 20: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

تجمیع عمگرهایAggregate Operators

در چشمگیر افزایشای رابطه جبر قابلیت های

COUNT (*)COUNT ( [DISTINCT] A)SUM ( [DISTINCT] A)AVG ( [DISTINCT] A)MAX (A)MIN (A)

SELECT AVG (S.age)FROM Sailors SWHERE S.rating=10

SELECT COUNT (*)FROM Sailors S

SELECT AVG ( DISTINCT S.age)FROM Sailors SWHERE S.rating=10

SELECT S.snameFROM Sailors SWHERE S.rating= (SELECT MAX(S2.rating) FROM Sailors S2)

ستون یک نام فقط

SELECT COUNT (DISTINCT S.rating)FROM Sailors SWHERE S.sname=‘Bob’

Page 21: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

قایقران پیرترین سن و نام) قایقران ها)

اشتباه اول جوی و پرسبحث! ) در GROUP BYاست

) چرا که دید خواهیم دوم و سوم جوی و پرس

در و هستند هم معادلپیش SQL/92استاندارد

. از برخی ولی شده اند بینیجوی و پرس ها سیستم

. کنند نمی پشتیبانی را سوم

SELECT S.sname, MAX (S.age)FROM Sailors S

SELECT S.sname, S.ageFROM Sailors SWHERE S.age = (SELECT MAX (S2.age) FROM Sailors S2)

SELECT S.sname, S.ageFROM Sailors SWHERE (SELECT MAX (S2.age) FROM Sailors S2) = S.age

Page 22: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

برای را تجمیع توابع بخواهیم است ممکن مواردی درباشیم داشته مجزا صورت به مختلف گروه های

:ورودی هر برای داده پایگاه درس نمرات میانگین مثال( :امتیاز سطح هر برای جوانترین( rating levelمثال

. کنید پیدا را قایقران◦ : را قایقران جوانترین امتیاز سطح هر ازای به سریع حل راه

می یابیمداریم؟؟؟ ◦ امتیاز سطح چند که نمی دانیم اما

Motivation for Grouping

SELECT MIN (S.age)FROM Sailors SWHERE S.rating = i

For i = 1, 2, ... , 10:

Page 23: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

target-listنظر ◦ مورد ستون های لیستتجمیع )◦ عملیات با (MIN(S.age)ترم هایی

از زیرمجموعه یک باید ستون ها سطر grouping-listلیست و باشد . ) که ) کرد دقت باید است خاص گروه یک به مربوط پاسخ خروجی

در که مقدار target-listمواردی یک باید گروه هر ازای به آید می . باشد داشته

از یک هر می تواند می آید تجمیع عملیات یک داخل که ستونی ناماز که نیست الزامی باشد جدول باشد. grouping-listستون های

A group is a set of tuples that have the same value for all attributes in grouping-list.

با HAVINGو GROUP BYپرس وجو

SELECT [DISTINCT] target-listFROM relation-listWHERE qualificationGROUP BY grouping-listHAVING group-qualification

Page 24: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

The cross-product of relation-list is computed, tuples that fail qualification are discarded, `unnecessary’ fields are deleted, and the remaining tuples are partitioned into groups by the value of attributes in grouping-list.

The group-qualification is then applied to eliminate some groups. Expressions in group-qualification must have a single value per group!◦ In effect, an attribute in group-qualification that is not

an argument of an aggregate op also appears in grouping-list. (SQL does not exploit primary key semantics here!)

One answer tuple is generated per qualifying group.

Conceptual Evaluation

Page 25: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

rating minage 3 25.5 7 35.0 8 25.5

قایقران جوان گروه های قایقران ترینحداقل 18باالی که هم 2سال آنها نفر

هستند امتیاز

SELECT S.rating, MIN (S.age) AS minage

FROM Sailors SWHERE S.age >= 18GROUP BY S.ratingHAVING COUNT (*) > 1

sid sname rating age

22 dustin 7 45.0

29 brutus 1 33.0

31 lubber 8 55.5

32 andy 8 25.5

58 rusty 10 35.0

64 horatio 7 35.0

71 zorba 10 16.0

74 horatio 9 35.0

85 art 3 25.5

95 bob 3 63.5

96 frodo 3 25.5

Answer relation:

Sailors instance:

Page 26: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

rating minage 3 25.5 7 35.0 8 25.5

Find age of the youngest sailor with age>=18, for each rating with at

least 2 such sailors.rating age

7 45.0

1 33.0

8 55.5

8 25.5

10 35.0

7 35.0

10 16.0

9 35.0

3 25.5

3 63.5

3 25.5

rating age

1 33.0

3 25.5

3 63.5

3 25.5

7 45.0

7 35.0

8 55.5

8 25.5

9 35.0

10 35.0

Page 27: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

rating minage 7 35.0 8 25.5

Find age of the youngest sailor with age>=18, for each rating with at least 2 such sailors and with

every sailor under 60.

rating age

7 45.0

1 33.0

8 55.5

8 25.5

10 35.0

7 35.0

10 16.0

9 35.0

3 25.5

3 63.5

3 25.5

rating age

1 33.0

3 25.5

3 63.5

3 25.5

7 45.0

7 35.0

8 55.5

8 25.5

9 35.0

10 35.0

HAVING COUNT (*) > 1 AND EVERY (S.age <=60)

What is the result of changing EVERY toANY?

Page 28: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

rating minage 3 25.5 7 35.0 8 25.5

Find age of the youngest sailor with age>=18, for each rating with at least 2

sailors between 18 and 60.

SELECT S.rating, MIN (S.age) AS minage

FROM Sailors SWHERE S.age >= 18 AND S.age <= 60GROUP BY S.ratingHAVING COUNT (*) > 1

sid sname rating age

22 dustin 7 45.0

29 brutus 1 33.0

31 lubber 8 55.5

32 andy 8 25.5

58 rusty 10 35.0

64 horatio 7 35.0

71 zorba 10 16.0

74 horatio 9 35.0

85 art 3 25.5

95 bob 3 63.5

96 frodo 3 25.5

Answer relation:

Sailors instance:

Page 29: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Grouping over a join of three relations. What do we get if we remove

B.color=‘red’ from the WHERE clause and add a HAVING clause with this condition?

What if we drop Sailors and the condition involving S.sid?

For each red boat, find the number of reservations for

this boatSELECT B.bid, COUNT (*) AS scountFROM Sailors S, Boats B, Reserves RWHERE S.sid=R.sid AND R.bid=B.bid AND B.color=‘red’GROUP BY B.bid

Page 30: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

قسمتHAVING( پرس وجو زیر شامل تواند ( subqueryمیشود

قسمت اتفاق HAVINGاگر چه کنیم جایگزین زیر عبارت با را: افتاد خواهد

◦HAVING COUNT(*) >1

Find age of the youngest sailor with age > 18, for each rating with at least 2

sailors (of any age)SELECT S.rating, MIN (S.age)FROM Sailors SWHERE S.age > 18GROUP BY S.ratingHAVING 1 < (SELECT COUNT (*) FROM Sailors S2 WHERE S.rating=S2.rating)

Page 31: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

. گردد استفاده تو در تو نمی تواند تجمیع اشتباه:عملیات

Find those ratings for which the average age is the minimum

over all ratings

SELECT S.ratingFROM Sailors SWHERE S.age = (SELECT MIN (AVG (S2.age)) FROM Sailors S2)

SELECT Temp.rating, Temp.avgageFROM (SELECT S.rating, AVG (S.age) AS avgage FROM Sailors S GROUP BY S.rating) AS TempWHERE Temp.avgage = (SELECT MIN (Temp.avgage) FROM Temp)

Correct solution (in SQL/92):

Page 32: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SELECT * FROM "Sailors" JOIN "Reserves" ON "Sailors".sid = "Reserves".sid ;

SELECT COUNT(*),sname FROM "Sailors" JOIN "Reserves" ON "Sailors".sid = "Reserves".sid GROUP BY "Sailors".sid;

SELECT COUNT(*),sname FROM "Sailors" JOIN "Reserves" ON "Sailors".sid = "Reserves".sid GROUP BY "Sailors".sid;

JOIN

Page 33: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Equi-Join: A special case of condition join where the condition c contains only equalities.

Natural Join: Equijoin on all common fields.

SELECT * FROM "Sailors" NATURAL JOIN "Reserves" ;

Equi or Natural Join

S Rsid

1 1

11 RS

Page 34: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SELECT * FROM "Sailors" LEFT OUTER JOIN "Reserves" ON "Sailors".sid = "Reserves".sid ;

SELECT COUNT(*),sname FROM "Sailors" LEFT OUTER JOIN "Reserves" ON "Sailors".sid = "Reserves".sid GROUP BY "Sailors".sid;

LEFT OUTER JOIN

Page 35: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Field values in a tuple are sometimes unknown (e.g., a rating has not been assigned) or inapplicable (e.g., no spouse’s name). ◦ SQL provides a special value null for such situations.

The presence of null complicates many issues. E.g.:◦ Special operators needed to check if value is/is not null. ◦ Is rating>8 true or false when rating is equal to null?

What about AND, OR and NOT connectives?◦ We need a 3-valued logic (true, false and unknown).◦ Meaning of constructs must be defined carefully. (e.g.,

WHERE clause eliminates rows that don’t evaluate to true.)

◦ New operators (in particular, outer joins) possible/needed.

Null Values

Page 36: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

An IC describes conditions that every legal instance of a relation must satisfy.◦ Inserts/deletes/updates that violate IC’s are

disallowed.◦ Can be used to ensure application semantics (e.g., sid

is a key), or prevent inconsistencies (e.g., sname has to be a string, age must be < 200)

Types of IC’s: Domain constraints, primary key constraints, foreign key constraints, general constraints.◦ Domain constraints: Field values must be of right

type. Always enforced.

Integrity Constraints (Review)

Page 37: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

محدودیت های عمومی

General Constraints

بیان برایمحدودیت های

بر عالوه جامعیتیکار به کلیدها

می رود محدودیت ها برای

نیز queryاز استفاده می توان

نمود

CREATE TABLE Sailors( sid INTEGER,sname CHAR(10),rating INTEGER,age REAL,PRIMARY KEY (sid),CHECK ( rating >= 1

AND rating <= 10 ) CREATE TABLE Reserves

( sname CHAR(10),bid INTEGER,day DATE,PRIMARY KEY (bid,day),CONSTRAINT noInterlakeResCHECK (`Interlake’ <>

( SELECT B.bnameFROM Boats BWHERE B.bid=bid)))

Page 38: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: CHECK

Syntax: CHECK conditional-expression. The conditional expression captures more

general ICs than keys. The conditional expressions can use queries. The conditional expressions required to hold

only if the associated table is nonempty. A CHECK constraint may be expressed over

several tables; however, it is often expressed over one single table.

باشد داشته نیز نام می تواند محدودیت هر◦ CONSTRAINT MyConstraint

CHECK conditional-expression

Page 39: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

CHECK Constraints: Examples

Constraint: Rating must be in the range 1 to 10

CREATE TABLE Sailors( sid INTEGER,sname CHAR(10),rating INTEGER,age REAL,PRIMARY KEY (sid),CHECK ( rating >= 1 AND rating <= 10 ))

Page 40: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

CHECK Constraints: Examples

CREATE TABLE Reserves( sname CHAR(10),bid INTEGER,day DATE,PRIMARY KEY (bid,day),CONSTRAINT noInterlakeResCHECK (`Interlake’ <>

( SELECT B.bnameFROM Boats BWHERE B.bid=bid)))

Constraint: Interlake boats cannot be reserved

Page 41: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Constraints Over Multiple Relations

CREATE TABLE Sailors( sid INTEGER,sname CHAR(10),rating INTEGER,age REAL,PRIMARY KEY (sid),CHECK ( (SELECT COUNT (S.sid) FROM Sailors S)+ (SELECT COUNT (B.bid) FROM Boats B) < 100 )

CREATE ASSERTION smallClubCHECK ( (SELECT COUNT (S.sid) FROM Sailors S)+ (SELECT COUNT (B.bid) FROM Boats B) < 100 )

ها به عالوه ‌تعداد قایقها باید ‌ران‌تعداد قایق

باشد100کمتر از

Page 42: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: ASSERTION

This solution is awkward and wrong:◦ It is wrongfully associated only with Sailors, though it

involves both Sailors and Boats.◦ If Sailors is empty, the number of Boats tuples can be

anything, since the conditional expression is not required to hold in such case!

CREATE TABLE Sailors( sid INTEGER,sname CHAR(10),rating INTEGER,age REAL,PRIMARY KEY (sid),CHECK ( (SELECT COUNT (S.sid) FROM Sailors S)+ (SELECT COUNT (B.bid) FROM Boats B) < 100 )

Constraint: Number of boats plus number of sailors is < 100

Page 43: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: ASSERTION

The assertion is not associated with any one of the tables involved.

ASSERTION is the right solution; not associated with either table.

CREATE ASSERTION smallClubCHECK ( (SELECT COUNT (S.sid) FROM Sailors S)+ (SELECT COUNT (B.bid) FROM Boats B) < 100 )

Constraint: Number of boats plus number of sailors is < 100

Page 44: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: Further Examples

Write SQL integrity constraints (domain, key, foreign key, or CHECK constraints; or assertions) for given requirements:◦ Students must have a minimum cgpa of 5.◦ Every TA must also be a student.◦ The total percentage of all assignments to projects for a

given student must be at most 100%.◦ A TA must have a cgpa higher than any student that she

coaches.

Schema: Students(sid: int, sname: string, age: int, cgpa: real)

Works(sid: int, pid: int, pct_time: int) Projects(did: int, budget: real, ta: int)

Page 45: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: Further Examples (1)

Constraint: Students must have a minimum cgpa of 5. CREATE TABLE Students

( sid INTEGER,sname CHAR(10),age REAL,

cgpa REAL,PRIMARY KEY (sid),CHECK ( cgpa >= 5))

Constraint: Every TA must also be a student.

CREATE ASSERTION TAisStudentCHECK ( (SELECT COUNT (*) FROM Projects P WHERE P.ta_id NOT IN (SELECT sid

FROM Students)) =0 )

Page 46: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: Further Examples (2)

Constraint: The total percentage of all assignments to

projects for a student must be at most 100%.

CREATE TABLE Works( sid INTEGER,pid INTEGER,pct_time INTEGER,PRIMARY KEY (sid,pid),

FOREIGN KEY (sid) REFERENCES Students, FOREIGN KEY (pid) REFERENCES Projects,

CHECK ((SELECT COUNT (W.stid) FROM Works W

GROUP BY W.stid HAVING SUM(pct_time) > 100) = 0)

Page 47: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

General Constraints: Further Examples (3)

CREATE ASSERTION TAHigherCGPACHECK ((SELECT COUNT(S.stid) FROM Students S, Students TA, Works W, Projects P WHERE S.sid=W.sid AND W.pid=P.pid AND P.ta=TA.sid AND S.cgpa > TA.cgpa) =0)

Constraint: A TA must have a cgpa higher than any student that she coaches.

Page 48: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

Trigger :) زمانی ) که عملیات از مجموعه ای تفنگ ماشهدر مشخصی تغییر که شود می .DBMSاجرا شود ایجاد

: اصلی قسمت سه◦Event : ) ( که سازد Triggerواقعه ای می فعال را◦Condition :)( باشد قرار بر .Triggerاگر می گردد اجرا◦Action :)( شوند اجرا باید که عملیاتی

Triggers

Page 49: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

BEFORE :داخل از triggerعملیات eventاجرای قبلمی شود اجرا اصلی

AFTER :داخل از triggerعملیات اصلی eventاجرای بعدمی شود اجرا

INSTEAD :داخل جای triggerعملیات eventاجرای به . یعنی می شود اجرا و Eventاصلی نمی شود اجرای اصلی

داخل می شود triggerعملیات اجرا Row-level trigger: executed once per modified

row (that satisfies the trigger condition). Statement-level trigger: executed once per

modifying statement. Transition variables: NEW, OLD, NEW TABLE, OLD

TABLE.

Triggers

Page 50: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

CREATE TRIGGER incr_count AFTER INSERT ON Sailors

WHEN (new.age < 18)FOR EACH ROWBEGIN

count:=count+1;END

Triggers: Example (SQL:92)

برای دسترسی با داده های اضافه شده NEWاز یک رابطه شود اخیر یا مقادیر جدید به روز شده استفاده می

Increment a count for each newly inserted sailor whose age < 18.

Page 51: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

CREATE TRIGGER youngSailorsUpdateAFTER INSERT ON Sailors

REFERENCING NEW TABLE AS NewSailorsFOR EACH STATEMENT /* This is the default */

INSERTINTO YoungSailors(sid, name, age, rating)SELECT sid, name, age, ratingFROM NewSailors NWHERE N.age <= 18

Triggers: Example (SQL:1999)

Save newly inserted sailors aged < 18 in a special table.

Illustrates use of NEW TABLE to refer to a set of newly inserted tuples Exists since SQL:1999

Page 52: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

CREATE TRIGGER bumpTAcgpaAFTER UPDATE ON Students

WHEN OLD.cgpa < NEW.cgpaFOR EACH ROWBEGIN UPDATE Students S SET S.cgpa = NEW.cgpa WHERE S.cgpa < NEW.cgpa AND S.sid IN (SELECT P.ta

FROM STudents S1, Works W, Projects P WHERE S1.sid = NEW.sid

AND S1.sid = W.sid AND W.sid = P.sid);END

Triggers: More Elaborated Example

Whenever a student is given a (bonus) raise on his cgpa, the TA’s cgpa must be increased to be at least as high.

Illustrates use of Oracle PL/SQL syntax in the action part.

Page 53: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

آشنايي با يک زبان رابطه SQLاي :

انواع زبانهاي رابطه اي

SQUARESEQUELSQLQUELQBEDATALOG

Page 54: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SQLامكانات مهم زبان

دستورات تعريف داده ها• دستورات مجازشماري• دستورات پردازش داده ها• دستورات پردازش داده ها به طور ادغام شدني• دستورات نوشتن ماژول و رويه• دستورات كنترل جامعيت• دستورات كنترل تراكنشها•

Page 55: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

دستورات تعريف 1.داده ها

- تعريف شما :1- 1

CREATE SCHEMA

AUTHORIZATION USER

{base – table definition , view definition , grant-operation }

Page 56: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

دستورات تعريف 1.داده ها

- انواع داده اي:2- 1CHARACTER[(length)]

INTEGER

DECIMAL [(precision[,scale])]

SMALLINT

DOUBLE PRECISION

REAL

FLOAT [(precision)]

NUMERIC [(precision[,scale])]

Page 57: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

- دستور ايجاد جدول :3- 1

CREATE SCHEMA

AUTHORIZATION …

CREATE TABLE …

دستورات تعريف 1.داده ها

Page 58: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

- دستور حذف جدول:4- 1

DROP TABLE table-name

دستورات تعريف 1.داده ها

Page 59: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

- دستور ايجاد و حذف ديد:5- 1

CREATE VIEW …

DROP VIEW …

دستورات تعريف 1.داده ها

Page 60: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

- دستور مجاز شماري:6- 1GRANT , REVOKE

با اين دستور حق انجام يك يا بيش از يك عمل به كاربر (كاربراني) داده مي شود.

دستورات تعريف 1.داده ها

Page 61: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

- دستورات پردازش 2داده ها

):SELECT - دستور بازيابي (1- 2

SELECT [ALL | DISTINCT] item(s)-list

FROM table(s)-name

[WHERE condition(s)]

[GROUP BY column(s)]

[HAVING conditions(s)]

Page 62: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

توابع جمعي (گروهي)

• COUNT.تعداد مقادير اسكالر را به دست مي دهد :

• SUM حاصل جمع مقادير اسكالر در يك ستون را :به دست مي دهد.

• AVG ميانگين مقادير اسكالر در يك ستون را به :دست مي دهد.

• MAX بيشترين مقدار اسكالر در يك ستون را به :دست مي دهد.

• MIN كمترين مقدار اسكالر در يك ستون را به :دست مي دهد.

Page 63: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

يك مثال در مورد استفاده از توابع جمعي

SELECT MIN(GRADE) , MAX(GRADE)

FROM STCOT

WHERE TR=‘2’

AND

YRYR=’78-79’

AND

COID=‘COM222’;

در ترم COM222باالترين و پايين ترين نمره در درس را بازيابي مي كند.79-80دوم

Page 64: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

و LIKEامكان NOTLIKE

با اين دو امكان مي توان داده هاي مورد نظر را با دادن يك رشته كاراكتري به عنوان نشانوند جستجو و بيان شرايط مورد نظر، بازيابي كرد.

Page 65: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SELECT‌*

FROM‌PROF

WHERE‌PRNAME‌LIKE‌‘AR%’;

مثال: مشخصات استاداني را بدهيد كه نام آنها با AR.شروع شده باشد

Page 66: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

آزمون تست وجود هيچمقدار در يك ستون

وجود هيچ IS‌‌NULLمي توان با امكان مقدار در يك ستون را تست كرد.

Page 67: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال: شماره دانشجوياني را بدهيد كه نمره آنها در درس SOC333 هنوز اعالم نشده است؟78-79 در ترم دوم

SELECT STID

FROM STCOT

WHERE COID=‘SOC333’

AND

TR=‘2’

AND

YRYR=’78-79’

AND

GRADE IS NULL

Page 68: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

UNION و UNIONامكان ALL

با اين امكان، مي توان عملكرد عملگر UNION جبري را برنامه سازي كرد. حاصل

اين عملكرد، جدولي است كه سطرهاي استفاده ALLتكراري ندارد. اگر از گزيدار

شود، سيستم ديگر سطرهاي تكراري را در صورت وجود، حذف نمي كند.

Page 69: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

: GROUP BYامكان (گروه بندي)

با اين امكان مي توان سطرهاي جدول را حسب مقادير يك ستون ساده گروه بندي كرد به نحوي كه در هر گروه، مقدار آن ستون يكسان باشد.

Page 70: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

را برحسب مقادير ستون STCOTمثال: جدول COID.منطقا گروه بندي كنيد

SELECT‌COID,‌AVG(GRADE)‌AS‌AVGGR

FROM‌STCOT

GROUP‌‌BY‌‌COID;

Page 71: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

HAVINGامكان

با اين امكان مي توان شرط (شرايطي) ناظر به گروه سطرها اعالن كرد. نقش اين امكان

در سطر است. WHEREدر واقع همان نقش هميشه با HAVINGتوجه داشته باشيد كه

GROUP‌BY.مي آيد

Page 72: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

-79مثال: شماره درسهايي را بدهيد كه در ترم دوم دانشجو در آنها ثبت نام كرده باشند.10 كمتر از 78

SELECT‌STCOT.COID

FROM‌‌STCOT

WHERE‌TR=‘2’

‌‌‌‌‌AND

‌‌‌‌‌YRYR=’78-79’

GROUP‌‌BY‌‌COID

HAVING‌‌COUNT(*)<10

Page 73: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

BETWEENامكان

شكل كلي اين امكان چنين است:Scalar-expression‌[NOT]‌BETWEEN‌Scalar-expression‌AND‌Scalar-expression

Page 74: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال: شماره دانشجوياني را بدهيد كه نمره آنها در 19 و 15 بين 77-78 در ترم اول HIS444درس SELECT‌‌STCOT.STIDباشد.

FROM‌‌STCOT

‌‌‌WHERE‌TR=‘1’

AND

YRYR=’78’79’

AND

GRADE‌BETWEEN‌’15’‌‌AND‌‌’19’

Page 75: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

- دستورات پردازش 2داده ها

- دستورات عمليات 2- 2ذخيره سازي :

براي انجام عمليات سه گانه ذخيره سازي سه وجود UPDATE و DELETE، INSERTدستور

دارد.

Page 76: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

دستور UPDATE

شكل كلي اين دستور چنين UPDATE‌‌table-nameاست:

SET‌assignment-commalist

[WHERE‌Condition(s)]

Page 77: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال: تعداد واحد درسهاي عملي را يك واحد UPDATE‌‌COTكاهش دهيد.

SET‌‌CREDIT=CREDIT-1

WHERE‌‌COTYPE=‘p’;

Page 78: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

دستور DELETE

شكل كلي اين دستور چنين DELETEاست:

FROM‌‌table-name

[WHERE‌Cond(s)]

Page 79: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

را در 78110555مثال: درسهاي دانشجوي با شماره حذف كنيد78-79ترم دوم سال

DELETE

FROM‌STCOT

‌‌‌‌WHERE‌‌STID=‘78110555’

AND

TR=‘2’

AND

YRYR=’78-79’;

Page 80: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

دستور INSERT

اين دستور دو شكل كلي INSERT‌‌INTO‌table-nameدارد:

Values(one‌row);

INSERT‌‌INTO‌table-name

Subquery;

در شكل دوم، تعدادي سطر در جدول درج مي شوند.

Page 81: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال: اطالعات درسي زير را در <COM888,2,78-79,12,78110888>جدول درج نمائيد.

INSERT‌‌INTO‌‌STCOT

VALUES‌‌<‘78110888’,‌‘COM888’,‌2,‌78-79,‌12>;

Page 82: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

جمع بندي در مورد امكانات SQL1نسخه

- نارويه اي است.1

- داراي كمال ساختاري است.2

- زبان استانده سيستم هاي رابطه اي موجود 3است.

- تمام انواع داده اي ساده را دارد.4

- عملگرهاي بسيار قوي دارد.5

- يادگيري آن ساده است.6

- استقالل داده اي را تامين مي كند.7

- هم به صورت مستقل و هم به صورت 8ادغام شده قابل استفاده است.

Page 83: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SQL2دستوراتي كه در نسخه تغيير كردند يا به آن اضافه

شدند: دستور تعريف 1.

داده ها

دستور تعريف 2.ميدان

انواع داده اي3.

دستور تغيير 4.ميدان

دستور حذف 5.ميدان

دستور ايجاد 6.جدول

دستور تغيير 7.جدول

. دستور حذف جدول8

. تعريف جدول موقت9

. دستور بازيابي10

امكانات جامعيتي11.

امكانات ايمني12.

.13 SQLپويا

Page 84: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

امكانات جامعيتي

كاربر مي تواند زمان وارسي جامعيت پايگاه را (براساس محدوديتها و قواعد داده شده) خود مشخص كند. مي تواند درخواست كند كه اين وارسي بالفاصله باشد يا با تاخير. براي اين

SET‌‌‌CONSTRAINTS‌‌(constraint-name)منظور از امكان زير استفاده مي شود:

{DEFERRED‌‌|‌‌IMMEDIATE}

Page 85: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

امكانات ايمني

كاربر مي تواند امتياز دستيابي به اشياء تعريف شده در شما را به منظور انجام عمل

مشخص، به كاربر ديگري بدهد. و براي GRANTبراي اعطاي امتياز از دستور

استفاده مي شود.REVOKEلغو آن از دستور

Page 86: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

امتيازهايي كه يك كاربر مي تواند به يك كاربر ديگر بدهد:

• USAGEاجازه استفاده از يك ميدان :• SELECTاجازه دستيابي به تمام ستونهاي يك جدول :• INSERT(X) اجازه درج يك مقدار در ستون :Xاز يك جدول • INSERTاجازه درج تمام ستونهاي يك جدول :• UPDATE(X) اجازه بهنگام سازي ستون :Xاز يك جدول • UPDATEاجازه بهنگام سازي تمام ستونهاي يك جدول :• DELETEاجازه حذف سطر(ها) از يك جدول :• REFRENCES(X) اجازه ارجاع به ستون :X از يك جدول در

تعريف محدوديتهاي جامعيتي

امتيازها

Page 87: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SQL3دستوراتي كه در نسخه تغيير كردند يا به آن اضافه

شدند: تعريف نوع داده مجرد1.تعريف زيرنوع2.امكان تعريف زيرجدول و زبرجدول3.امكان ارث بري ستونهاي جدول جديد از ستونهاي 4.

جدول نامدار موجودرويه اي شدن زبان5.رهانا6.نوشتن رويه7..8SQLادغام شده واسط درخواست فراخوان9.

دستورات كنترل تراكنشها10.

Page 88: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

هدفهاي كلي: آشنايي با ديد در مدل رابطه اي

هدفهاي رفتاري: دانشجو در پايان اين جلسه مي تواند:

مرتبت با آن را SQL ديد را تعريف كند و دستورات •بكار برد.

مزاياي استفاده از ديد را برشمارد.•

عمليات قابل انجام روي ديد را شرح دهد.•

انواع ديد از لحاظ پذيرا و ناپذيرا را نام ببرد.•

Page 89: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديدهاي رابطه اي

ديد در مدل رابطه اي نوعي رابطه است، بنابراين مي توان آن را به كمك

يك عبارت جبر رابطه اي يا حساب رابطه اي به شكل زير تعريف كرد:

View‌name=‌Relational‌expression

Page 90: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديد در SQL

دستور ايجاد CREATE‌VIEW‌Viewname‌[(Column-name(s))]ديد

AS‌Subquery

.

.

.

[WITH‌[CASCADE|LOCAL]‌‌CHECK‌‌OPTION];

Page 91: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثالCREATE‌VIEW‌MAPHSTUD(‌STNUM,‌STLEV,‌STAREA)

AS‌‌SELECT‌‌STID,‌STDEG,‌STMJR

FROM‌‌STT

WHERE‌‌STMJR=‘Math’‌OR‌STMJR=‘Phys’

WITH‌LOCAL‌CHECK‌OPTION;

Page 92: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

SQLديد در

دستور حذف ديد

DROP‌VIEW‌Viewname‌{restrict‌|‌cascade}

Page 93: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال:

DROP‌VIEW‌MAPHSTUD‌CASCADE;

Page 94: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مزاياي ديد

تامين كننده محيط انتزاعي براي كاربران سطح 1.خارجي

تامين كننده پويايي باال در تعريف پايگاه توسط 2.كاربر

تسهيل كننده واسط كاربر برنامه ساز با پايگاه3.

امكاني است براي كوتاه نويسي يا ماكرونويسي 4.پرسشها

تامين كننده اشتراك داده اي5.

تامين كننده نوعي مكانيسم خودكار ايمني داده ها6.

تامين كننده استقالل داده اي فيزيكي و منطقي7.

امكان تعريف شيئ با اندازه هاي مختلف8.

Page 95: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

معايب ديد

ايجاد فزونكاري در سيستم براي انجام 1.تبديل خارجي/ادراكي و احيانا

خارجي/خارجي

عدم امكان انجام عمليات ذخيره سازي 2.در بسياري از گونه هاي ديد و در نتيجه

ايجاد محدوديت براي كاربر

Page 96: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

عمليات در ديدهاي رابطه اي

بازيابي از ديد رابطه اي

چون ديد خود نوعي رابطه است، پس براي بازيابي از ديد هم يك عبارت

جبري يا حسابي مي نويسيم

Page 97: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مثال بازيابي از يك ديد با استفاده از SQLCREATE‌VIEWدستورات

AS‌‌SELECT‌STID,‌STDEG

FROM‌‌STT

WHERE‌‌STPROG=‘Math’‌

1V

SELECT‌‌STID

FROM

WHERE‌‌STDEG=‘bs’;1V

Page 98: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

عمليات در ديدهاي رابطه اي

عمليات ذخيره سازي در ديدهاي رابطه اي

براي انجام عمليات ذخيره سازي در ديد از INSERT، UPDATEهمان دستورات سه گانه

استفاده مي شود.DELETEو

Page 99: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديدها از نظر پذيرش عمليات ذخيره سازي

ديدهاي 1.پذيرا

ديدهاي 2.ناپذيرا

Page 100: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديدهاي پذيرا

ديدهاي گزينشي1.

ديد گزينش – پرتوي داراي كليد 2.رابطه مبنا

CK-CKديد پيوندي 3.

CK-FKديد پيوندي 4.

ديد حاصل اجتماع، اشتراك و 5.تفاضل دو رابطه

Page 101: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديد گزينشي حاصل عملگر گزينش در يك رابطه است.

Page 102: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

در ديد ”گزينش-پرتوي داراي كليد رابطه مبنا“ عالوه بر گزينش

تاپلهايي از رابطه مبنا، عملگر پرتو نيز اعمال شده است. اين نوع ديد

را اصطالحا ديد داراي كليد با تاپلهاي ناقص مي گوئيم.

Page 103: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

، حاصل پيوند CK-CKديد پيوندي دو رابطه روي كليد كانديد مشترك

آنها است و در عمليات ذخيره سازي مشكلي ندارد

Page 104: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

، حاصل پيوند روي CK-FKديد پيوندي كليد كانديد يك رابطه و كليد خارجي رابطه ديگر است. اين ديد در حذف

مشكل دارد، زيرا با حذف يك تاپل از اين ديد، در هريك از دو رابطه مبنا، يك تاپل حذف مي شود و چنانچه كاربر بخواهد

محتواي ديد خود را نمايش دهد، تاپلهاي ديگر هم از ديد او حذف مي شوند كه

درخواست نكرده است.

Page 105: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديد حاصل اجتماع، اشتراك و تفاضل دو رابطه در عمليات

ذخيره سازي مشكلي ندارد، به شرط آنكه سيستم بتواند تشخيص دهد كه عمل درخواست شده، در كداميك از دو رابطه مبنا انجام

شود.

Page 106: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

مشكالت مهمتر ديدهاي پذيرا

بروز عارضه جانبي در خود •ديد

بروز عارضه جانبي در ديدهاي •ديگر

نقض قاعده جامعيت•

بروز فزونكاري در سيستم•

تغيير ماهيت عمل درخواست •شده

تعدد تبديالت و مشكل •تصميم گيري

Page 107: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ديدهاي ناپذيرا

ديد پرتوي يا گزينشي فاقد كليد 1.رابطه مبنا

NK-NK ديد پيوندي 2.

FK-FK ديد پيوندي 3.

ديد حاوي صفت مجازي4.

ديد حاصل تقسيم5.

Page 108: شرکت IBM در دهه 1970 در سیستم مدیریت پایگاه داده System R برای اولین بار از این زبان اسفاده نمود زمانی که توسط

ويژگيهاي ديدهاي قابل بهنگام سازي

SELECTعبارت تعريف كننده محدوده ديد، يك عبارت معتبر 1.باشد.

، فقط يك جدول وجود داشته SELECT، عبارت FROMدر كالز 2.باشد.

، يك جدول مبنا يا يك ديد قابل FROMجدول قيدشده در كالز 3.بهنگام سازي باشد.

، ستونهاي مورد نظر بايد در جدول SELECT عبارت item-listدر 4.مبنا متناظر باشد.

و گزينه HAVING و GROUP‌BY نبايد كالز SELECTدر عبارت 5.DISTINCT.وجود داشته باشد

FROM نبايد عبارتي حاوي كالز SELECT عبارت WHEREدر كالز 6.باشد، به گونه اي كه در آن به همان جدولي ارجاع داده شده

قبلي به آن ارجاع شده است.FROMباشد كه در كالز