Embed
Email

_____ SQL

Document Sample

Shared by: Jun Wang
Categories
Tags
Stats
views:
15
posted:
12/18/2011
language:
pages:
67
‫معرفی‪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‬با زبان رابطه ای فاصله دارد با این حال استاندارد است و اغلب‬

‫محصوالت موجود در بازار آن را پشتیبانی می کنند‬







‫انواع داده ای در 2‪SQL‬‬

‫تعدادی از انواع متغیر ها در 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‬‬ ‫1‪S‬‬ ‫02‬

‫’2‪Where city = ‘C‬‬ ‫3‪S‬‬ ‫03‬

‫4‪S‬‬ ‫02‬









‫81‬

‫مثال :‬

‫‪Select S.S# ,S.status‬‬

‫‪From S‬‬

‫’2‪Where 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‬را می دهد)حتی به صورت تکراری (‬

‫)البته زیر هم نوشته می شوند(‬

‫5‪P1,P2,P3,P4,P5,P6,P1,P2,P2,P2,P4,P‬‬

‫‪Select Distinct P# from SP‬‬ ‫مثال:دستور روبرو:‬

‫به علت استفاده از ‪ Distinct‬مقادیر #‪P‬از جدول‪ SP‬را با حذف تکراری ها می‬

‫دهد یعنی خروجی به صورت زیر می شود:‬

‫6‪P1,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‬‬

‫3‪S‬‬

‫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‬‬

‫5‪P‬‬ ‫‪Cam‬‬ ‫‪Blue‬‬ ‫21‬ ‫3‪C‬‬

‫6‪P‬‬ ‫‪Cog‬‬ ‫‪Red‬‬ ‫91‬ ‫2‪C‬‬







‫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‬‬

‫1‪P‬‬

‫2‪P‬‬

‫4‪P‬‬

‫5‪P‬‬

‫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‬‬

‫2‪P‬‬

‫‪Select P# From SP‬‬

‫2‪Where S# =S‬‬ ‫3‪P‬‬

‫مربوط به قسمت اول‬

‫6‪P‬‬

‫مربوط به قسمت دوم‬

‫1‪P‬‬







‫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‬‬

‫)’2‪Where status نام جدول )…]ثابت 2 , [ثابت 1( ‪Values‬‬



‫فرم اول=وارد کردن سطر به سطر که با هر دستور یک سطر به جدول اضافه‬

‫می شود.‬

‫فرم دوم=وارد کردن چند سطر که با برداشتن از جدولی دیگر انجام می شود‬









‫84‬

‫در فرم اول یک سطر با مقادیر مشخص برای فیلد ها،در یک جدول درج می شود‬

‫وثابت‪ i‬ام در لیست فیلد ها می باشد‬

‫در فرم دوم ، پرس و جویی فرعی ارزیابی می شود و جواب آنکه معموال چند‬

‫سطر است در جدول درج می شود‬



‫در هر دو شکل ننوشتن لیست فیلد ها به معنای این است که تمام فیلد های جدول‬

‫مورد نظر است‬



‫مثال : قطعه 7‪) P‬شهر1‪ C‬ووزن 42،اسم و رنگ در حال حاضر ناشناخته (را‬

‫در جدول ‪ P‬درج کنید‬

‫)‪Insert Into P (P#,City ,weight‬‬

‫)42,’1‪Values (‘P7’.’C‬‬

‫مقدار فیلد های اسم و رنگ برابر ‪ NULL‬می شود.‬

‫94‬

‫تذکر:نظم از چپ به راست فیلد ها در جلوی دستور‪ Insert‬لزوما مشابه‬

‫‪Create‬نیست‬



‫مثال: قطعه 8‪ P‬را با مشخصات )’8‪(P8,Pn8,’pink’,14,’C‬را در جدول‪P‬‬

‫درج کنید‬

‫‪Insert Into P‬‬

‫)’8‪Values (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‬را حذف کنید‬

‫’5‪Delete From S where S# =‘S‬‬

‫مثال :تمام محموله هایی که تعداد آنها از 003 بیشتر است را حذف کنید‬

‫003> ‪Delete From SP where Qty‬‬

‫مثال :تمام محموله ها را حذف کنید )یعنی تمام سطرهای جدول ‪ SP‬را (‬

‫‪Delete From SP‬‬

‫جدول ‪ SP‬هنوز وجود دارد ولی خالی است‬

‫مثال :تمام محموله های تهیه کنندگان ساکن 3‪ C‬را حذف کنید‬





‫45‬

‫‪Delete From SP‬‬

‫)’3‪Where 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‬‬

‫1‪AS Select S# ,Status , City S‬‬ ‫02‬ ‫2‪C‬‬

‫51> ‪From S where Status‬‬

‫3‪S‬‬ ‫03‬ ‫2‪C‬‬

‫4‪S‬‬ ‫02‬ ‫2‪C‬‬

‫5‪S‬‬ ‫03‬ ‫1‪C‬‬





‫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‬متداخل شبیه سازی می گردید. ولی در2‪SQL‬‬

‫دستوراتی اضافه شد تا انواع پیوند را مستقیما پشتیبانی کند.‬

‫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‬‬

‫1‪S‬‬ ‫1‪Sn‬‬ ‫02‬ ‫2‪C‬‬

‫2‪S‬‬ ‫2‪Sn‬‬ ‫01‬ ‫3‪C‬‬

‫3‪S‬‬ ‫3‪Sn‬‬ ‫03‬ ‫2‪C‬‬

‫4‪S‬‬ ‫4‪Sn‬‬ ‫02‬ ‫2‪C‬‬

‫5‪S‬‬ ‫5‪Sn‬‬ ‫03‬ ‫1‪C‬‬

‫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



Related docs
Other docs by Jun Wang
Management Two
Views: 2  |  Downloads: 0
Management training Red Cross branch offices
Views: 2  |  Downloads: 0
Management subjekt_ CR
Views: 2  |  Downloads: 0
Management Styles_1_
Views: 18  |  Downloads: 0
Management stratégique
Views: 2  |  Downloads: 0
Management Standards at CARE - CARE Academy
Views: 2  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!