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

Post on 16-Jan-2016

228 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SQL 5فصل

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

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

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

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

مثال

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

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

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

ها قایق جدول

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

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

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))

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

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

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

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

, , , , ,

ساده جمله یک استراتژی 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مفهومی ارزیابی استراتژی

مفهومی ارزیابی استراتژی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

یا باشند داشته نام هم های صفت رابطه دو که زمانیقسمت در بار چند رابطه باشد 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

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

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’

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!

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

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

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:

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:

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’)

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’)

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)

تجمیع عمگرهای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’

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

اشتباه اول جوی و پرسبحث! ) در 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

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

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

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

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

Motivation for Grouping

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

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

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

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

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:

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

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?

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:

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

قسمت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)

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

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):

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

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

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

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

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)

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

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)))

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

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 ))

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

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کمتر از

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

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

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)

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 )

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)

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.

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

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

Triggers

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

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.

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

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.

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

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

SQUARESEQUELSQLQUELQBEDATALOG

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

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

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

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

CREATE SCHEMA

AUTHORIZATION USER

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

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

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

INTEGER

DECIMAL [(precision[,scale])]

SMALLINT

DOUBLE PRECISION

REAL

FLOAT [(precision)]

NUMERIC [(precision[,scale])]

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

CREATE SCHEMA

AUTHORIZATION …

CREATE TABLE …

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

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

DROP TABLE table-name

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

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

CREATE VIEW …

DROP VIEW …

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

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

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

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

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

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

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

FROM table(s)-name

[WHERE condition(s)]

[GROUP BY column(s)]

[HAVING conditions(s)]

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

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

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

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

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

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

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

SELECT MIN(GRADE) , MAX(GRADE)

FROM STCOT

WHERE TR=‘2’

AND

YRYR=’78-79’

AND

COID=‘COM222’;

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

و LIKEامكان NOTLIKE

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

SELECT‌*

FROM‌PROF

WHERE‌PRNAME‌LIKE‌‘AR%’;

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

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

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

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

SELECT STID

FROM STCOT

WHERE COID=‘SOC333’

AND

TR=‘2’

AND

YRYR=’78-79’

AND

GRADE IS NULL

UNION و UNIONامكان ALL

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

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

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

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

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

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

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

FROM‌STCOT

GROUP‌‌BY‌‌COID;

HAVINGامكان

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

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

GROUP‌BY.مي آيد

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

SELECT‌STCOT.COID

FROM‌‌STCOT

WHERE‌TR=‘2’

‌‌‌‌‌AND

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

GROUP‌‌BY‌‌COID

HAVING‌‌COUNT(*)<10

BETWEENامكان

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

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

FROM‌‌STCOT

‌‌‌WHERE‌TR=‘1’

AND

YRYR=’78’79’

AND

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

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

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

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

دارد.

دستور UPDATE

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

SET‌assignment-commalist

[WHERE‌Condition(s)]

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

SET‌‌CREDIT=CREDIT-1

WHERE‌‌COTYPE=‘p’;

دستور DELETE

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

FROM‌‌table-name

[WHERE‌Cond(s)]

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

DELETE

FROM‌STCOT

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

AND

TR=‘2’

AND

YRYR=’78-79’;

دستور INSERT

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

Values(one‌row);

INSERT‌‌INTO‌table-name

Subquery;

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

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

INSERT‌‌INTO‌‌STCOT

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

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

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

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

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

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

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

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

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

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

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

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

داده ها

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

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

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

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

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

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

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

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

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

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

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

.13 SQLپويا

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

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

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

{DEFERRED‌‌|‌‌IMMEDIATE}

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

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

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

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

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

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

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

امتيازها

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

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

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

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

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

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

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

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

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

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

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

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

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

View‌name=‌Relational‌expression

ديد در SQL

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

AS‌Subquery

.

.

.

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

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

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

FROM‌‌STT

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

WITH‌LOCAL‌CHECK‌OPTION;

SQLديد در

دستور حذف ديد

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

مثال:

DROP‌VIEW‌MAPHSTUD‌CASCADE;

مزاياي ديد

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

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

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

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

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

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

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

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

معايب ديد

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

خارجي/خارجي

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

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

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

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

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

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

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

AS‌‌SELECT‌STID,‌STDEG

FROM‌‌STT

WHERE‌‌STPROG=‘Math’‌

1V

SELECT‌‌STID

FROM

WHERE‌‌STDEG=‘bs’;1V

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

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

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

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

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

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

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

ديدهاي پذيرا

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

شود.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

top related