معرفیSQL
زبان ) SQL(Structured Query Languageپیاده سازی آزادی از جبر
رابطه ای است که البته بعضی از عملگر های ان مثل تقسیم را نمی پوشاند
ولی در عوض عملگر های کاربردی زیاد دیگری تعریف می کند که کار
کردن با جداول را اسان می کند.
این زبان اولین بار در سال 6791 پدید آمده و ده سال بعد توسط ANSIاستاندارد
شد. SQLیک زبان بیانی) (Declarativeاست. بدین معنا که کاربر تنها می
گوید ”چه می خواهد“ ولی چگونگی بدست آوردن آن را مشخص نمی کند . در
واقع تبدیل دستورات SQLبه عملگر های جبر رابطه ای توسط خود سیستم
SQLانجام می پذیرد.
ً SQLبه دو صورت مستقل و ادغام شدنی به کار می رود. در دنیای PCها ُ
عموما SQLرا تحت یک نرم افزار دیگر مثل دلفی، ویژوال بیسیک
،ویژوال cیا Accessبه کار می بریم
1
در این حالت برای انواع متغیرها و همچنین برای دستورات کنترلی و
توابع ریاضی رشته ای از زبان میزبان استفاده می شود .
معمولترین نسخه این نرم افزار در حال حاضر 2 SQLمی باشد. البته
در حال حاضر زبانی به نام OSQLپدید آمده و ANSIنسخه
جدیدی به نام 3 SQLرا اعالم کرده که شی گرایی را پشتیبانی می
کند. ما در این بحث 2 SQLرا شرح می دهیم.
تذکر: تعدادی از زبان های رابطه ای موجود عبارتند از : --SQL
QUEL-QBE-DATALOG
SQLدر ابتدا یک زبان داده ها ) (DSLبود. در استاندارد سال
6991 , SQLاز نظر محاسبات نیز کامل شد و اکنون حاوی
دستوراتی مثل
CALL,Return,If,Set,Case,Loop,While,Repeatو
ویژگی هایی مثل متغیر ها و پردازش استثنا ها می باشد.
2
در نتیجه در حال حاضر الزم نیست SQLرا با زبان دیگری به نام میزبان
ترکیب کنیم تا برنامه کاربردی کاملی ایجاد شود.
- SQLبه جای دو اصطالح رابطه و متغیر رابطه ای از جدول استفاده می
کند. SQLاز اصطالحات عنوان و بدنه استفاده نمی کند.
- SQLبا زبان رابطه ای فاصله دارد با این حال استاندارد است و اغلب
محصوالت موجود در بازار آن را پشتیبانی می کنند
انواع داده ای در 2SQL
تعدادی از انواع متغیر ها در 2 SQLعبارتند از:
3
INTEGERعدد صحیح
SMALLINTعدد صحیح کوچک
FLOATبرای اعداد اعشاری با نقطه شناور
) NUMERIC(p,dعدد ممیز ثابت با دقت معین که شامل pرقم و dرقم، در
سمت راست ممیز قرار دارد.مثال )1,3( numericاجازه می دهد 5.44 دقیقا
ذخیره شود ولی 5.444 یا 23.0 دقیقا در این فیلد ذخیره نمی شود.
) CHARACTER(nیا) CHAR(nرشته ای کاراکتری به طول
(1= ، => ، 1 AND Qty ALTERیا Modifyمی توان جلوی
Alter tableتعریف یک ستون را تغییر داد.
مثال :
Alter table SP
;))01( Modify (S# char
31
این مثال در واقع نوع داده را تغییر نمی دهد بلکه طول # Sرا از 5 به 01
افزایش می دهد. اگر بخواهیم نوع داده را به کلی عوض کنیم
ج(DROP TABLE
برای از بین بردن یک جدول استفاده می شوند مثل Drop table S
با اجرای این دستور تمام شاخصها و دیدهای تعریف شده روی جدول و همچنین
تمام کلید های خارجی جدول به طور خودکاراز آیین می رود.
دستور Dropبه صورت فیزیکی جدول مذکور را با تمام اطالعات موجود در آن
حذف می کند. اگر بخواهیم خود جدول باقی مانده و فقط داده های درون آن از
بین رود از دستور Deleteاستفاده می کنیم.
41
اگر جلوی این دستور از کلمه کلیدی Restrictاستفاده گردد،
در صورت خذف جدول ، اشیایی که به آن جدول وابسته
اند، حذف نخواهند شد. ولی اگر از کامه کلیدی
Cascadeاستفاده کنیم با حذف این جدول تمام اشیاء
وابسته به آن نیز حذف می گردند که البته این حالت توصیه
نمی گردد.
د(Create Index
شاخص Indexجدولی است که براساس فیلدی از یک جدول
پایه ،به صورت مرتب شده ساخته می شود و باعث می
شود عمل جست و جو بر اساس آن فیلد باسرعت باالیی
انجام پذیرد.
51
مثال : با دستور زیر:
)Create Index SN on S (sname , city
شاخصی به نام اختیاری SNروی جدول Sایجاد می شود و
نظم اصلی روی مقادیر صعودی Snameو سپس روی
مقادیر صعودی Cityمی باشد. اگر بخواهیم بر اساس
نزولی باشد بغد از نام فیلد عبارت DESCرا می اوریم.
مثال:
)Create Index On S (Sname DESC
61
ه (Drop Index
با این دستور شاخص شده حذف می گردد. مثل :Drop Index Sn
تذکر:در SQLمی توان کار طراحی و ایجاد بانک را به طور تدریجی انجام داد.
یعنی ابتدا تعداد محدودی جدول ایجاد شده و بالفاصله داده های بانک را وارد
کرد. سپس به تدریج بانک را گسترش داد. در SQLبرای کار با داده ها چهار
دستور وجود دارد:DELETE,UPDATE,INSERT,SELECT
در ادامه این دستورات را شرح می دهیم و برای این کار از جداول بانک
اطالعاتی تهیه کنندگان و قطعات )جداول Sو Pو ( SPاستفاده می کنیم. که
جهت سادگی رجوع،این جداول را در صفحه ای مجزا در انتهای فصل اورده
ایم.
دستور SELECT
مهمترین دستور SQLبوده و برای بازیابی اطالعات خاص استفاده می شود. سه
عمل σو∞,Лجبر رابطه ای را می توان با این دستور به راحتی انجام داد.
71
ساده ترین شکل این دستور به صورت زیر است:
نام فیلد ها Select
نام جدول From
شرط جست و جوWhere
مثال :
Select S# , status خروجی S# status
From 1S 02
’2Where city = ‘C 3S 03
4S 02
81
مثال :
Select S.S# ,S.status
From S
’2Where city =‘C
می توان نام جدول را همراه نام فیلد ها به کار برد.
دستورات باال دقیقا مانند مثال قبل عمل می کنند.
هر چند که در مثال فوق استفاده از نام جدول اختیاری است ولی در بعضی موارد
که جلو تر خواهیم گفت الزامی میشود. در مثال فوق selectیک زیر
مجموعه افقی عمودی از جدول Sرا داد.
فرمت کلی دستور selectبه صورت زیر است:
)SELECT [DISTINCT ] item (s
)FROM table (s
] شرط ] [HAVINGفیلد )ها( ] [GROUP BYشرط [WHERE
] فیلد )ها( [ORDER BY
91
select P# from SP مثال :دستور روبرو:
تمام مقادیر ستون # Pاز جدول SPرا می دهد)حتی به صورت تکراری (
)البته زیر هم نوشته می شوند(
5P1,P2,P3,P4,P5,P6,P1,P2,P2,P2,P4,P
Select Distinct P# from SP مثال:دستور روبرو:
به علت استفاده از Distinctمقادیر #Pاز جدول SPرا با حذف تکراری ها می
دهد یعنی خروجی به صورت زیر می شود:
6P1,P2,P3,P4,P5,P )البته زیر هم نوشته می شود(
اگر به جای Distinctازعبارت ALLاستفاده شود آنگاه تکراری ها نوشته می
شوند)البته ALLحالت پیش فرض است( از آنجا که حذف تکراری ها وقت
گیر است ، پیش فرض را در SQLعبارت ALLگرفته اند.
مثال : شماره تمام قطعات و وزن هر یک رابر حسب گرم بدهید.فرض کنید وزن
ها برحسب پوند در جدول Pباشند.
02
Select P# ,’weight in gram=‘,WEIGHT *454
From P
P#
P1 weight in gram = 5448
P2 weight in gram = 7718
خروجی
P3 weight in gram = 7718
)هر پوند 454 گرم می
(باشد P4 weight in gram = 6356
P5 weight in gram = 5448
P6 weight in gram = 8626
21
مثال: دستور زیر کل جدول Sرا چاپ می کند:
* Select
From S
وجود* به معنای تمام دستور ها می باشد. دستور فوق معادل دستور زیر است:
Select S# ,Sname , status , city from S
مثال: شماره تهیه کنندگانی را بیابید که ساکن 2 Cبوده و وضغیت انها از 02
بیشتر باشد:
خروجی:
#Select S
#S
From S
3S
02 =16
مثال : خروجی این دستور چیست؟
Select P# ,weight
From P
Where weight in (12,16,17)
P# weight
P1 12
P2 17
P3 17
P5 12
26
می توان از not inنیز استفاده کرد.
عملگر Likeدرselect
عالمت درصد % به جای مجموعه ای از کاراکتر ها و عالمت زیر خط )ـ( به
جای یک کاراکتر می آید.
مثال 22: مشخصات قطعاتی را بیابید که اسم آنها با حرف Cشروع شده باشد.
* Select
From P
Where pname like ‘c%’ P# pname color weight city
5P Cam Blue 21 3C
6P Cog Red 91 2C
72
مثال : دستور زیر نام قطعاتی را می دهد که 3 حرفی بوده و با حرف Cشروع
می شوند:
’- -Select pname from p where pname like ‘C
مثال : دستور زیر نام قطعاتی را نشان می دهد که حاوی کاراکتر’ ‘ Eنمی باشند.
’%Select pname from P where pname not like ‘%E
مثال: ” like ” A %Bاسامی را می دهد که حرف دوم آنها Aبوده و مختوم به
Bمی باشند
تذکر : برای بررسی مقدار NULLبودن یک فیلد باید از عبارت IS NULL
استفاده کنیم و برای بررسی عدم NULLبودن از عبارت NOT NULLیا
IS NOT NULLاستفاده می کنیم.
select S# from S where status is NULL مثال:
تذکر: عملگر likeنسبت به بزرگی و کوچکی حساس است.
82
پرس و جو های مبتنی برپیوند جدولها
پیوند نوعی پرس و جو است که طی آن عمل بازیابی از بیش از یک جدول انجام
می پذیرد.
مثال:خروجی دستور زیر چیست؟
Select S.S# , S.city , P.P#,P.city
From S,P where S.city =P.city
خروجی در زیر ترسیم شده است.
برای اجتناب از ابهام ، دو ستون ، cityبه صوررت S.cityو P.cityباید نوشته
شوند . ولی # S.Sرا می توانستیم به صورت# Sهم بنویسیم
92
S.S# S.city P.P# P.city
S1 C2 P1 C2
S1 C2 P4 C2
S1 C2 P6 C2
S2 C3 P2 C3
S2 C3 P5 C3
S3 C2 P1 C2
S3 C2 P4 C2
S3 C2 P6 C2
S4 C2 P1 C2
S4 C2 P4 C2
S4 C2 P6 C2 30
مثال:
*.Select S.*,P
From S,P
Where S.city =P.city
دستور فوق تمام فیلد های دو جدول را در صورت برقراری شرط می نویسد.
خروجی آن را ترسیم کنید.
عمل پیوند به شرط تساوی طبق تعریف باید جدولی را بدهد حاوی دو ستون
یکسان.اگر یکی از دو ستون را از جدول جواب حذف کنیم ، جدول حاصله را
پیوند طبیعی می نامیم .
تذکر: در بعضی از نسخه های SQLمی توان تا61 جدول را با همدیگر پیوند داد.
نکته : دستور *.select S.*P
form S,P
عمل کارتزین دو رابطه Sو Pرا در SQLانجام میدهد.
13
مثال )پیوند یک جدول با خودش(تمام جفت شماره تهیه کنندگانی را بیابید که از
یک شهر باشند
#Select First .S# , Second . S
From S First , S Second
Where First .city= Second.city
23
First. S# Second.#
S1 S1
S1 S3
S1 S4
S2 S2
S3 S1
S3 S3
S3 S4
S4 S1
S4 S3
S4 S4
S4 S5 33
:مثال :برای حذف زوائد در مثال قبل باید دستور زیر را بنویسیم
Select First .S# ,Second .S#
From S First .S Second
Where First.City = second. City
AND First .S#)*( Having Count #P
1P
2P
4P
5P
24
توابع تجمعی فقط درلیست selectویا havingمی توانند ظاهر شوند .
تذکر: Group byو havingافزونه هستند یعنی هر پرسشی که با این دو تنظیم
شود،با امکانات دیگر موجود در SQLنیز قابل تنظیم هستند.
عملگر های مجموعه ای در select
عملگر های مجموعه ای تعریف شده در جبر رابطه ای در SQLپیاده سازی شده
اند.عمل اجتماع با دستور ، UNIONعمل اشتراک با INTERSECTو عمل
تفاضل با EXCEPTپیاده سازی شده اند.در اینجا هم باید همتایی داده ها
رعایت شودویعنی باید تعداد ستون ها و همچنین دامنه های ستون های دو
جدول با هم برابر باشند.
به عالوه عملگر دیگری به نام CONTAINSوجود دارد که مشابه عملگر )ﮯ(
عمل می کند مجموعه سمت راست زیر مجموعه سمت چپ می باشد یعنی:
Bﮯ A CONTAINS A
34
دستورCONTAINSغالبا نیاز به گروه بندی داده ها )( Group byدارد که جلو
تر کاربرد آن را شرح می دهیم
مثال :شماره قطعاتی را بیابید که یا وزن آنها بیش از 61باشد یا توسط 2 Sتهیه
شده باشند یا هر دو شرط را دارا باشند.
Select P# from P
61> Where weight
#P
UNION
2P
Select P# From SP
2Where S# =S 3P
مربوط به قسمت اول
6P
مربوط به قسمت دوم
1P
44
عناصر تکراری فقط یک بار در خروجی نوشته می شوند مگر اینکه به جای
UNIONعبارت UNION ALLرا بنویسیم که در این صورت در مثال فوق
2 Pدوبار در خروجی ظاهر می شود
در INTERSECTو EXCEPTنیز به صورت پیش فرض تکراری ها حذف
می شوند.
عملگر های ALLوANY
عملگر ALLبرای مقایسه ”همه مقادیر“و عملگر) ANYکه در بعضی از نسخه
های SQLنام SOMEدارد (برای “هر یک از مقادیر“ استفاده می شوند.
نتیجه هر دو عملگر TRUEیا FALSEاست.این دو عملگر را می توان با
توابع و عملگر های دیگر معادل سازی کرد.
مثال:نام قطعاتی را بدهید که وزن آنها عددی فرد مابین 01تا 02 باشد
Select Pname from P
)91,71,51,31,11( Where weight =ANY
54
Pname
Bolt خروجی:
Screw
Cog
تذکر: =ANYمعادل inمی باشد
مثال :نام تهیه کنندگانی را بدهید که وضعیت آنها از همه ساکنان شهر2 Cبیشتر
باشد
Select Sname from S
)’2Where status نام جدول )…]ثابت 2 , [ثابت 1( Values
فرم اول=وارد کردن سطر به سطر که با هر دستور یک سطر به جدول اضافه
می شود.
فرم دوم=وارد کردن چند سطر که با برداشتن از جدولی دیگر انجام می شود
84
در فرم اول یک سطر با مقادیر مشخص برای فیلد ها،در یک جدول درج می شود
وثابت iام در لیست فیلد ها می باشد
در فرم دوم ، پرس و جویی فرعی ارزیابی می شود و جواب آنکه معموال چند
سطر است در جدول درج می شود
در هر دو شکل ننوشتن لیست فیلد ها به معنای این است که تمام فیلد های جدول
مورد نظر است
مثال : قطعه 7) Pشهر1 Cووزن 42،اسم و رنگ در حال حاضر ناشناخته (را
در جدول Pدرج کنید
)Insert Into P (P#,City ,weight
)42,’1Values (‘P7’.’C
مقدار فیلد های اسم و رنگ برابر NULLمی شود.
94
تذکر:نظم از چپ به راست فیلد ها در جلوی دستور Insertلزوما مشابه
Createنیست
مثال: قطعه 8 Pرا با مشخصات )’8(P8,Pn8,’pink’,14,’Cرا در جدولP
درج کنید
Insert Into P
)’8Values (P8,Pn8,’pink’,14,’C
چون لیست فیلد ها نوشته نشده است ،منظور تمام فیلد ها است ،با همان نظم
دستورCreate
تذکر :بهتر است همیشه نام فیلد ها ذکر شود
مثال :برای هر قطعه تهیه شده ،شماره قطعه و کل تعداد تهیه شده از آن را بدست
آورده و نتیجه را در بانک ذخیره کنید
05
P# TOTQTY
Temp
Create Table Temp P1 600
(P# CHAR (6)NOT NULL ,
P2 1000
TOTQTY Int,
P3 400
PRIMARY KEY (P#))
P4 500
Insert Into Temp (P#,TOTQTY ) P5 500
Select P#,SUM(Qty) P6 100
From SP
Group By P#
51
نتیجه insertدر جدول tempذخیره می شود.کاربر می تواند با این جدول کار
کند و هرگاه که خواست آن را با دستور drop table tempحذف کند
2(دستورUpdate
تغییر داده در جدول یا این دستور انجام می شود
شکل کلی این دستور به صورت زیر است:
Update
... ] = ,[ = set
]>مقدارشرط شرط [whereنام جدول > delete From
مثال :تهیه کننده 5 Sرا حذف کنید
’5Delete From S where S# =‘S
مثال :تمام محموله هایی که تعداد آنها از 003 بیشتر است را حذف کنید
003> Delete From SP where Qty
مثال :تمام محموله ها را حذف کنید )یعنی تمام سطرهای جدول SPرا (
Delete From SP
جدول SPهنوز وجود دارد ولی خالی است
مثال :تمام محموله های تهیه کنندگان ساکن 3 Cرا حذف کنید
45
Delete From SP
)’3Where S# in (select S# from S where city =‘C
تذکر :اگر در دستورات , ,insert update deleteیک پرس و جوی داخلی
داشته باشیم ،در اینصورت در جلوی Fromدر پرس و جوی داخلی نباید به
جدولی ارجاع کرد که قرار است عملیات درج،حذف یا تغییر در آن صورت
گیرد.
مثال :حذف تهیه کنندگانی که وضعیت آنها از میانگین وضعیتها کمتر است
Delete From S
)Where status ])…] فیلد2 ،[ فیلد 1 ([
:مثال
Create View Redpart (P#,WT,City)
As Select P# ,weight ,city
From P where Color =‘Red’ P# Redpart
WT City
P1 12 C2
P4 14 C2
P6 19 C2
پدید می آوردRedpart دستور فوق یک دید به نام
56
:مثال
Create View PQ (P#,TOTQTY)
AS Select P# ,SUM (QTY)
From SP
P# TOTQTY
Group By P# دید
PQ P1 600
P2 1000
P3 400
P4 500
P5 500
P6 100
57
برای از بین بردن یک دید از دستور Drop Viewاستفاده می کنیم
مثل:Drop View Redpart
تذکر:اگر جدول مبنایی حذف شود،تمام دید های تعریف شده روی آن جدول مبنا
نیز حذف می گردد.از دید کاربر Viewمشابه یک جدول عمل می کند که
تمامی دستورات گفته شده را می توان برای آن به کار برد.
مثال:
Create View GS
#S Status City
1AS Select S# ,Status , City S 02 2C
51> From S where Status
3S 03 2C
4S 02 2C
5S 03 1C
85
تذکر:می توان گفت که در SQLسه نوع جدول وجود دارد 1-جداول اصلی
) (base tableکه با دستور Create tableساخته می شوند که می توان
به آنها دسترسی داشت و هر گونه تغییری در آنها اعمال کرد
2-جداول میانی ) (intermediate tableکه خود سیستم آنها را پدید آورده و
استفاده می کند و از دسترسی کاربران خارج هستند.مثال در دستوراتی که
دارای زیر دستور هستند )مثل selectمتداخل( ابتدا بخش زیر دستور
محاسبه و به طور موقت ذخیره می گردد و سپس به کمک آن کل پرس و
جو انجام میگیرد.جداول میانی قابل دسترسی نبوده و بدین دلیل قابل تغییر
نمی باشند.
3-جداول مجازی ) (Viewsکه وجود خارجی نداشته و می توان به آنها دسترسی
داشت و در موارد معدودی آنها را تغییر داد
تذکر:هدف اصلی از جداول مجازی ایجاد جداول خالصه از اطالعات موجود و
محدود کردن دید کاربران است ومثال ممکن است رئیس سازمان فقط شماره
قطعه و شهر قطعات را بخواهد و با وزن و رنگ آنها کاری نداشته باشد.
دسترسی به viewsاز دید کاربر مستقیم ولی از دید سیستم غیر مستقیم است
95
یعنی سیستم هر گونه استخراج اطالعات را از جداول اصلی انجام می دهد.
یکی از قواعد ساده برای بهنگام سازی جداول به صورت زیر است:
1-جداول مجازی فقط از یک جدول اصلی ساخته شده باشد
2-در ساختن جدول مجازی از Select Distinctاستفاده نشده باشد
3-اگر جدول مجازی روی جدول اصلی Aساخته شده آنگه Aدر زیر دسستور
نیامده باشد.به چنین جداولی ،جداول قابل تغییر) (Updateableمی گویند
پیوند درSQL
در1 SQLعملیات پیوند مستقیم پشتیبانی نمیشد و با استفاده از شرط در جلوی
Whereیا توسط selectمتداخل شبیه سازی می گردید. ولی در2SQL
دستوراتی اضافه شد تا انواع پیوند را مستقیما پشتیبانی کند.
1-ضرب دکارتی)×( جبر رابطه ای بادستور CROSS JOINپیاده سازی شده
است.مثال:
S CROSS JOIN SP
دستور فوق ضرب دکارتی دو جدول Sو SPرا می دهد
06
2-پیوند شرط )(X өجبر رابطه ای با دستور..... JOIN...... ONپیاده سازی
شده است
مثال:
S JOIN SP ON
,002> S.S#= SP.S# AND Qty
3-پیوند طبیعی )∞(جبر رابطه ای بادستور NATURAL JOINپیاده سازی
شده است.مثال:
S Natural Join SP
امنیت درSQL
در SQLهر کاربری یک شناسه ویژه دارد. شناسه PUBLICهمه کاربران را
شامل می شود چهار نوع امتیاز برای دستیابی به جداول عبارتند از :
. Update,Delete,Insert,Selectمثال اگر کاری بخواهد در جدولی
اطالعاتی درج کند باید شناسه او امتیاز Insertرا روی آن جدول داشته باشد.
16
امتیاز دیگر Referencesاست که برای کنترل و اعمال محدودیتهای جامعیتی
می باشد .مثال رئیس یک سازمان باید بتواند روی دستمزد کارمندان خود قواعد
محدودیت را اعمال کند )پس باید امتیاز Referencesرا داشته باشد(ولی
دیگران چنین حقی را ندارند.
همچنین امتیاز USAGEبرای استفاده از قابلیت هایی مثل VIEWیا اجازه
استفاده از یک میدان می باشد.
به کمک دستور GRANTمی توان به کاربری امتیاز داد و با دستور
REVOKEمی توان این امتیازها را پس گرفت . فرم کلی GRANTبه
صورت زیر است:
GRANT
] To
نوشتن عبارت With Grant Optionباعث می شودکاربر مورد نظر بتواند این
امتیاز ها را با دستور Grantدیگری به سایر کاربران نیز واگذار کند.
26
مثال:
Grant Update , insert On S,SP To ALL ,JAVAD
فرم کلی دستور Revokeبه صورت زیر است
Revoke
Revoke insert ON S from ALL مثال
تذکر:امتیاز)References(X) ,Update(X) , Insert(Xفقط برای ستون X
می باشند.
تذکر:با دستور Revoke Grant Option ONمی توان فقط حق واگذاری
امتیاز به غیر را باز پس گرفت ولی خود امتیاز همچنان به قوت خود باقی شد.
با دستور CREATE ASSERTIONمی توان محدودیت هایی را روی بانک
اعمال کرد و به عبارتی دیگر مانند قسمت Checkدر تعریف جدول
) (Create tableقوانین جامعیتی را بیان کرد فرم کلی این دستور به
صورت زیر است:
).…(CREATE ASSERTION>NAME
36
مثال :اگر در جدول) stuدانشجو(بخواهیم فیلد ) avgمعدل( فقط عددی مثبت باشد
آنگاه دستور زیر را میتوانیم وارد کنیم:
CREATE ASSERTION stu-avg
CHECK(NOT EXISTS(SELECT * FROM stu
;) )0< where avg
در SQLهای جدید بانک اطالعات پویا با دستورCREATE TRIGGER
پشتیبانی می شود.با این دستور می توان به DBMSدستور داد که در صورت
بروز شرط خاصی ،عمل ویژه ای را انجام دهد.
مثال می توان کاری کرد که در صورت تغییر یک رکورد ،رکورد قبلی در یک
فایل دیگر )جهت بایگانی(ذخیره شود.
تذکر:میتوان دستورات SQLرا به 3دسته زیر تقسیم کرد:
1-دستورات )DDLتعریف داده( مثل, drop index ,Create index
, drop Domain ,alter domain, Create domain, drop table
Alter table, Create table
46
2-دستورات ) DMLکار با داده(مثل:delete,Update,insert,Select
-3 دستورات ) DCLکنترل داده ( مثل:revoke,grant
تذکر : SQLکامل نیست. SQLبا زبان رابطه ای کامل فاصله زیادی دارد .در
نتیجه روشن نیست که محصوالت SQLامروزی استحقاق این را دارند که
برچسب ”رابطه ای“را داشته باشند یا خیر.امروزه محصولی در بازار نیست که
تمام جزئیات مدل رابطه ای را پشتیبانی کند.
جدول S
#S Sname status city
1S 1Sn 02 2C
2S 2Sn 01 3C
3S 3Sn 03 2C
4S 4Sn 02 2C
5S 5Sn 03 1C
56
S# P# QTY
S1 P1 300
S1 P2 200 SPجدول
S1 P3 400
S1 P4 200
S1 P5 100
S1 P6 100
S2 P1 300
S2 P2 400
S3 P2 200
S4 P2 200
S4 P4 300 66
S4 P5 400
Pجدول P# Pname Color Weight city
P1 Nut Red 12 C2
P2 Bolt Green 17 C3
P3 screw Blue 17 C4
P4 Screw Red 14 C2
P5 Cam Blue 12 C3
P6 Cog Red 19 C2
67