دانلود

Download Report

Transcript دانلود

‫بسم هللا الرحمن الرحیم‬
‫نام درس‪ :‬پايگاه دادهها‬
‫تعداد واحد‪2:‬‬
‫نام منبع‪:‬‬
‫سیستم های بانک اطالعاتی‬
‫مولف‪:‬‬
‫تهيهكننده‪:‬‬
‫س ی ‪ .‬جی دیت‬
‫مهندس عین هللا جعفر نژاد قمی‬
‫محسن کتابی‬
‫فصل اول ‪ :‬سیستم بانک اطالعاتی‬
‫فصل دوم ‪ :‬معماری ‪ Ansi /Spars‬برای سیستمهای بانک اطالعاتی‬
‫فصل سوم ‪ :‬مدل رابطه ای ‪Relational model‬‬
‫فصل چهارم ‪Standard query language (Sql):‬‬
‫فصل پنجم ‪ :‬نرمالسازی ( ‪) Normalization‬‬
‫فصل اول ‪ :‬سیستم بانک اطالعاتی‬
‫سیستم بانک اطالعاتی چیست ‪ :‬سیستم بانک اطالعاتی یک سیستم اطالعاتی‬
‫الکترونیکی مدیریت فایل است که یک دنباله ای از رکوردها را نگهداری می کند ‪.‬‬
‫اجزای بانک اطالعاتی ‪:‬‬
‫‪ -1‬داده‬
‫‪ -2‬نرم افزار‬
‫‪ -3‬سخت افزار‬
‫‪ -4‬کاربران‬
‫داده ‪ :‬اطالعاتی است که در بانک اطالعاتی ذخیره شده است ‪.‬‬
‫انواع سیستم کامپیوتری ‪:‬‬
‫الف ) سیستم تک کاربره ‪:‬‬
‫سیستمی که در یک لحظه فقط یک نفر می تواند از آن استفاده کند‬
‫ب ) سیستم چند کاربره ‪:‬‬
‫سیستمی که در یک لحظه چندین نفر بطور همزمان از آن استفاده می کند ‪.‬‬
‫در یک سیستم چند کاربره چند کاربر به طور همزمان از داده ها‬
‫استفاده می نمایند بنابراین در چنین سیستمی بایستی داده ها‬
‫جامعیت داشته و مجتمع باشند ‪.‬‬
‫جامعیت یعنی ‪:‬‬
‫داده ها همواره صحیح باشند ‪.‬‬
‫مجتمع یعنی ‪:‬‬
‫داده ها در یک جا متمرکز باشند ‪.‬‬
‫متمرکز یعنی ‪:‬‬
‫بر روی داده ها کنترل متمرکز داشته باشیم ‪ .‬به عبارت دیگر یک داده‬
‫فقط در یک جا ذخیره شده باشند ‪.‬‬
‫‪ -2‬نرم افزار ‪ :‬در یک بانک اطالعاتی دو نرم افزار مهم وجود دارد ‪:‬‬
‫الف ) نرم افزار سیستم مدیریت بانک اطالعاتی (‪: )DBMS‬‬
‫این نرم افزار وظیفه دارد داده ها را در فایل ذخیره نماید و مجتمع و جامعیت آنها را تضمین‬
‫نماید و همچنین تمام درخواستهای کاربر مانند ذخیره اطالعات جدید در پایگاه داده و به‬
‫روز رسانی داده ها و ‪ ...‬توسط ‪ DBMS‬صورت میگیرد ‪.‬‬
‫ب) نرم افزار رابط کاربر ‪:‬‬
‫یک رابط گرافیکی برای ارتباط کاربر با بانک اطالعاتی ایجاد می کند ‪.‬‬
‫درخواستهای کاربران به این نرم افزار داده می شود و این نرم افزار آن را به ‪ DBMS‬منقل‬
‫می کند و نتایج نیز از ‪ DBMS‬به این نرم افزار برگشت داده می شود و در خروجی‬
‫گرافیکی نمایش داده می شود ‪.‬‬
‫مانند نرم افزارهای …‪Vb , Delphi,‬‬
‫‪ -3‬سخت افزار ‪:‬‬
‫سخت افزار مورد نیاز برای سیتم بانک اطالعاتی عبارتند از ‪:‬‬
‫الف ) ‪Cpu‬‬
‫ج) دستگاههای ‪IO‬‬
‫‪ -4‬کاربران ‪:‬‬
‫ب) حافظه‬
‫د) دیسک سخت ( هارد دیسک )‬
‫در یک سیستم بانک اطالعاتی کاربران به چهار دسته تقسیم می شوند ‪:‬‬
‫الف ) برنامه نویس کاربردی ‪ :‬مسئول نوشتن برنامه های کاربردی بانک اط االعاتی‬
‫است ‪.‬‬
‫ب) طراح پایگاه داده‬
‫ج) برنامه نویس سیستمی‬
‫د) کاربران نهایی ‪ :‬که از طریق ایستگاههای کاری یا پایانه ها به سیستم دسترس ی‬
‫دارند ‪.‬‬
‫مزایای بانک اطالعاتی ‪:‬‬
‫یک بانک اطالعاتی سبب می شود که ما بر روی داده ها کنترل متمرکز داشته‬
‫باشیم و مزایای کنترل متمرکز بعدا بررس ی می شود ‪ ،‬عالوه بر آن بانک‬
‫اطالعاتی مزایای زیر را نیز دارد ‪:‬‬
‫‪ -‬سرعت‬
‫‪ -‬حجم کمتر‬
‫‪ -‬دقت بیشتر‬
‫‪ -‬هزینه کمتر‬
‫مزایای کنترل متمرکز ‪:‬‬
‫‪ -1‬جامعیت داده ها ‪ :‬سیستم بانک اطالعاتی متمرکز سبب می شود که داده ها همواره‬
‫صحیح باشند و داده ها بصورت متمرکز بین کاربران استفاده شوند ‪.‬‬
‫‪ -2‬امنیت داده ها ‪ :‬کنترل متمرکز سبب می شود که همواره داده ها را در یک محیط‬
‫امن نگهداری کنیم ‪ .‬چنانچه داده ها پراکنده باشند امکان دارد امنیت داده ها از‬
‫بین برود ولی در حالت متمرکز امنیت داده ها حفظ می شود ‪.‬‬
‫فصل دوم ‪:‬‬
‫معماری ‪Ansi /Spars‬‬
‫برای سیستمهای بانک اطالعاتی‬
‫فصل دوم ‪ :‬معماری ‪ Ansi /Spars‬برای سیستمهای بانک اطالعاتی‬
‫برای اینکه جزئیات ذخیره و بازیابی داده ها کامال از دید کاربر مخفی باشد ‪ Ansi .‬یک‬
‫معماری سه الیه برای سیستمهای پایگاه داده ارائه کرده است ‪.‬‬
‫‪ -1‬الیه فیزیکی یا داخلی ‪ :‬در این الیه‪ ،‬داده های فیزیکی همانگونه که روی محیط‬
‫فیزیکی ذخیره شده اند نمایش داده می شود ‪.‬‬
‫‪ -2‬الیه اداراکی یا انتزاعی‪ :‬دیدی است که طراح پایگاه داده نسبت به کلیه م اوجودیتها و‬
‫ارتباطات میان آنها دارد ‪ .‬این دید یک دید جامع است که دید کلیه کاربران نهایی از‬
‫روی آن استخراج می شود ‪ .‬وظیفه تهیه این دید جامع ‪ ،‬بر عهده طراح پایگاه داده‬
‫می باشد ‪.‬‬
‫‪ -3‬الیه خارجی ‪ :‬شامل دید خارجی کلیه کاربران است و دیدی است که هر کاربر نسبت به اط االعات‬
‫ذخیره شده دارد ‪ .‬لزوما با دید ادراکی یکسان نیست و هر کاربر می تواند از نقطه نظر متفاوتی به‬
‫داده ها نگاه کند ‪ .‬همچنین ممکن است هر کاربر از چند دید خارجی متفاوت استفاده کند ‪.‬‬
‫مثال ‪ :‬برای درک تفاوت میان دید ادراکی و دید خارجی ‪،‬محیط یک دانشگاه ارا در‬
‫نظر بگیرید ‪ .‬دید طراح باید شامل نیازمندیهای کلیه بخشهای دانشگاه شامل‬
‫آموزش ‪ ،‬امور مالی ‪ ،‬امورا دانشجویی و ‪ ...‬باشد ‪ .‬فرض کنید این دید شامل‬
‫جداول زیر باشد ‪:‬‬
‫دانشجو ( شماره دانشجویی ‪ ،‬نام درس ‪ ،‬تعداد واحد ‪ ،‬نوع درس و ‪) ...‬‬
‫درس ( شماره درس ‪ ،‬نام درس ‪ ،‬تعداد واحد ‪ ،‬نوع درس و ‪) ...‬‬
‫استاد ( شماره استاد ‪ ،‬نام ‪ ،‬نام خانوادگی ‪ ،‬مدرک و ‪) ...‬‬
‫نمرات ( شماره دانشجویی ‪ ،‬شماره درس ‪ ،‬ترم ‪ ،‬نمره )‬
‫بسیاری از اطالعات فوق ممکن است خارج از محدوده کاری یک بخش باشند ‪ ،‬مثال برای‬
‫کارمند آموزش ‪ ،‬شماره شناسنامه و یا نوع بیمه یک دانشجو اهمیتی ندارد ‪ .‬پس نیازی‬
‫ندارد این فیلدها را ببیند ‪ .‬از طرف دیگر ممکن است در بسیاری از گزارشات قسمت‬
‫آموزش ‪ ،‬معدل کل دانشجو مورد نیاز باشد ‪ .‬در هیچ یک از جداولی که طراح در نظر‬
‫گرفته است ‪ ،‬ویژگی معدل وجود ندارد ولی می توان مقدار این ویژگی را بر اساس نمرات‬
‫دانشجو و تعداد واحد هر درس محاسبه کرد ‪ .‬پس ‪ DBA‬می تواند یک دید خارجی‬
‫مخصوص کارمندان آموزش تعریف کند که به صورت زیر باشد ‪:‬‬
‫دانشجو از دید آموزش ( شماره دانشجویی ‪ ،‬نام ‪ ،‬نام خانوادگی ‪ ،‬رشته ‪ ،‬سال ورود ‪ ،‬معدل‬
‫کل )‬
‫دانشجو از دید مالی ( شماره دانشجویی ‪ ،‬نام ‪ ،‬نام خانوادگی مبلغ وام گرفته ‪ ،‬تعداد اقساط‬
‫وام ‪ ،‬مبلغ هر قسط ‪ ،‬تاریخ سررسید هر قسط )‬
‫مفاهیم جدید ‪:‬‬
‫)‪ HL(Host Language‬زبان میزبان ‪:‬‬
‫یک زبان برنامه نویس ی است که در بانک اطالعاتی مسئول تهیه امکانات محاسباتی ‪ ،‬منطقی و‬
‫تصمیم گیری است ‪ .‬مثل زبان دلفی – ‪ -ASP-PHP‬ویژوال بیسیک و غیره‬
‫زبان ‪: ) Data sub language ( DSL‬‬
‫این زبان با اشیاء و عملیات بانک اطالعاتی سروکار دارد و ترکیبی از دو زبان زیر است ‪:‬‬
‫‪: )Data defin language( DDL-1‬‬
‫این زبان برای اعالن اشیاء ( جدول ) بانک اطالعاتی بکار می رود ‪ ,‬مثل ‪ :‬تعریف بانک اطالعاتی‬
‫‪ ،‬تعریف جدولها و ‪...‬‬
‫‪: )Data manipulation language( DML-2‬‬
‫این زبان برای پردازش اشیاء بکار می رود ‪ .‬مانند ‪ :‬به هنگام رسانی ‪ ،‬حذف داده های موجود در‬
‫بانک ‪ ،‬افزودن داده های جدید به بانک ‪.‬‬
‫نکته ‪ :‬در برخی اوقات نمی توان زبان میزبان و ‪ DSL‬را از هم تشخیص داد ‪ .‬در اینگونه زبانها ‪،‬‬
‫زبان ‪ DSL‬در داخل زبان میزبان تعبیه شده است و بسیار بهم پیوسته اند ‪.‬‬
‫ سیستم مدیریت بانک اطالعاتی ( ‪: ) DBMS‬‬‫نر افزاری است که تمام دستیابیها به بانک اطالعاتی را انجام می دهد ‪ ،‬مراحلی که برای انجام‬
‫یک دستور یا یک رویداد خارجی توسط ‪ DBMS‬رخ می دهد عبارتند از ‪:‬‬
‫‪ -1‬کاربر با استفاده از زبان ‪ DSL‬مثل ‪ SQL‬درخواست را اعالم می کند ‪.‬‬
‫‪ DBMS -2‬درخواستها را تحلیل و تغییر می دهد ‪.‬‬
‫‪ DBMS -3‬مطابق با نگاشت خارجی به مفهومی و نگاشت مفهومی به داخلی تمام شماهای‬
‫مفهومی و داخلی را بررس ی و ایجاد می نماید ‪.‬‬
‫‪ DBMS -4‬عملیات الزم را مطابق با درخواست کاربر بر روی بانک اطالعاتی انجام می دهد ‪.‬‬
‫نگاشت ‪:‬‬
‫‪ -1‬خارجی ‪ /‬مفهومی ‪ :‬این نگاشت تناظر بین دیدگاههای خارجی و دیدگاههای مفهومی را‬
‫تعریف می کند ‪ .‬به عبارت دیگر ممکن است یکسری اطالعات و داده ها در سطح‬
‫خارجی نام خاص ی داشته باشند و سطح مفهومی با یک نام دیگری متناظر شوند ‪.‬‬
‫‪ -2‬مفهومی ‪ /‬داخلی ‪ :‬این نگاشت تناظر بین دیدگاههای مفهومی و بانک اطالعاتی‬
‫ذخیره شده ( دیدگاه داخلی ) تعریف می کند ‪ .‬به عبارت دیگر نحوه ذخیره سطح‬
‫مفهومی در سطح فیزیکی را بیان می کند ‪.‬‬
‫ ‪ DBMS‬و وظایف آن ‪:‬‬‫‪ DBMS‬به عنوان یک نرم افزار بانک اطالعاتی دارای وظایف زیر است ‪:‬‬
‫‪ -1‬تعریف داده ها ‪ :‬همانطوریکه اشاره شد تعریف داده ها بر عهده بخش ‪ DDL‬زبان ‪ DSL‬می‬
‫باشد ‪ .‬درنتیجه ‪DBMS‬شامل زبان ‪ DSL‬خواهد بود و وظیفه دارد که تمام داده های‬
‫بانک اطالعاتی را تعریف نماید ‪.‬‬
‫‪ -2‬دستکاری داده ها ‪ :‬دستکاری داده ها به عهده بخش ‪ DML‬زبان ‪ DSL‬و ‪ DBMS‬بایستی‬
‫امکان دستکاری و عملیات بانک اطالعاتی روی داده ها را فراهم نماید ‪.‬‬
‫‪-3‬جامعیت و امنیت داده ها‪ DBMS :‬نظارت مستقیم بر محدودیتهای جامعیتی و امنیتی دارد و‬
‫چنانچه درخواستی به آن داده شود که این محدودیتها را نقض می کند ‪ .‬در این صورت آن‬
‫درخواست را رد می کند ‪.‬‬
‫ ‪ DBMS‬و وظایف آن ‪:‬‬‫‪ -4‬ترمیم و سازگاری داده ها‪ DBMS :‬وظیفه دارد تراکنشها (‪ )Transaction‬را‬
‫بررس ی نماید و در صورت اجرای ناقص تراکنش آنرا ترمیم نماید ‪.‬‬
‫تراکنش ‪ :‬یک دسته از دستورالعملها ئیست که بایستی یا به طور کامل اجرا شوند و‬
‫یا اصال اجرا نشوند ‪.‬‬
‫‪ -5‬بهینه سازی و اجرا ‪ DBMS :‬یک بخش ی بنام بهینه سازی دارد که تمام‬
‫درخواستهای ‪ DML‬را بهینه سازی می کند و به مدیر زمان اجرا تحویل می دهد ‪.‬‬
‫‪ -6‬فرهنگ داده ها ‪ :‬برای هر داده تعریف شده در بانک اطالعاتی بایستی یک موضوع‬
‫کافی داشته باشیم به عبارت دیگر باید داده هایی را راجع به داده ها داشته‬
‫باشیم که ‪ DBMS‬وظیفه دارد این امکان را فراهم نماید ‪.‬‬
‫ ‪ DBA‬و وظایف آن ‪:‬‬‫‪ Data base administrator‬فردی است که آشنایی کافی با تکنول اوژی‬
‫اطالعات دارد و بانک اطالعاتی را پیاده سازی و همچنین تصمیمات ‪DA‬‬
‫را روی آن اعمال می کند ‪.‬‬
‫ ‪ DA‬مدیر داده ‪:‬‬‫‪ Data administrator‬فردیست در یک موسسه که داده ها و نیازهای‬
‫موسسه را می شناسد و آنها را در سطح عالی مدیریت قرار می دهد و‬
‫امکان دارد به مسائل فنی آشنایی کامل نداشته باشد ‪.‬‬
‫وظایف ‪: DA‬‬
‫‪ -1‬تعریف شمای مفهومی‬
‫‪ -2‬تعریف شمای داخلی‬
‫‪ -3‬تعریف محدودیتهای جامعیتی و امنیتی‬
‫‪ -4‬تعریف سیستمهای ترمیم و پشتیبانی‬
‫‪ -5‬تعریف رابطه کاربردی‬
‫فصل سوم‪:‬‬
‫مدل رابطه ای‬
‫‪Relational model‬‬
‫هدف طراحی بانک اطالعاتی است ‪ .‬ما تاکنون با مفهوم‬
‫بانک اطالعاتی معماری ‪ Ansi/Spars‬آشنا شدیم ‪ .‬به‬
‫عبارت دیگر یاد گرفتیم که برای طزاحی بانک اطالعاتی چه‬
‫ابزارهایی مورد نیاز است ‪.‬‬
‫یکی از مسائل اساس ی در معماری ‪ Ansi\Pars‬طراحی‬
‫شمای مفهومی بود و یاد گرفتیم که برای طراحی آن یک‬
‫زبان ‪ Dsl‬الزم داریم ‪ .‬گفتیم که زبان ‪ DDL‬بایستی‬
‫قابلیت ‪ DDL‬و ‪ DML‬را داشته باشد ‪.‬‬
‫برای طراحی شمای مفهومی مدلهای مختلفی وجود دارد‬
‫‪ ،‬که امروزه در پایگاه های بزرگ معمومال از مدل رابطه‬
‫ای استفاده می شود ‪ .‬که مورد بررس ی قرار می گیرد ‪.‬‬
‫مفاهیم مدل رابطه ای ‪:‬‬
‫ صفت (‪ : )Atribute‬ویژگی است که به یک ش یء نسبت‬‫داده می شود به عنوان مثال اگر موجودیت دانشجو را‬
‫داشته باشیم صفتهای زیر برای آن تعریف می شود ‪:‬‬
‫(‪ ، ...‬شماره دانشجویی ‪ ،‬نام خانوادگی ‪ ،‬نام ) دانشجو‬
‫به دانشجو که یک ش یء خارجی است موجودیت (‪)Entity‬‬
‫می گوئیم ‪.‬‬
‫ کاردینالتی ‪:‬‬‫تعداد سطرهای یک رابطه را کاردینالتی آن رابطه گویند ‪.‬‬
‫ درجه ‪:‬‬‫تعداد صفات یک رابطه را درجه آن رابطه گویند ‪.‬‬
‫ دامنه ‪:‬‬‫ برای یک صفت مفروض مجموعه مقادیری که می تواند‬‫اتخاذ کند را دامنه آن صفت گویند ‪.‬‬
‫انواع صفت ‪:‬‬
‫الف ‪ :‬صفت کلیدی‬
‫ب ) صفت تک مقداره ‪ /‬چند مقداره‬
‫ج ) صفت مشتق‬
‫د ) صفت ساده‬
‫ر ) صفت مرکب‬
‫انواع صفت ‪:‬‬
‫الف ) صفت کلیدی ‪:‬‬
‫صفتی است در یک رابطه که دارای دو ویژگی است ‪:‬‬
‫‪ -1‬منحصر به فرد باشد ‪.‬‬
‫‪ -2‬مقدار تهی نداشته باشد‬
‫مثل ‪ :‬کد ملی یا شماره دانشجویی ‪.‬‬
‫الف ) رابطه چیست ‪:‬‬
‫فرض کنید یک مجموع از صفات مانند‪، … ، R2 ، R1‬‬
‫‪ Rm‬داریم که هر یک روی یک دامنه هستند ‪ .‬هر زیر‬
‫مجموعه حاصل ضرب دکارتی این صفات را رابطه می‬
‫گوئیم ‪.‬‬
‫یعنی ‪:‬‬
‫‪R=R1*R2*…Rn = {(x1,x2, … ,xn) │xi ε Ri‬‬
‫ انواع صفت کلیدی ‪:‬‬‫‪ -1‬ابر کلید‬
‫‪ -2‬کلید کاندید‬
‫‪ -3‬کلید فرعی‬
‫‪ -4‬کلید خارجی‬
‫ ابر کلید ‪:‬‬‫صفت کلیدی است که اجزای آن نیز می توانند کلید‬
‫باشند ‪ ،‬به عبارت دیگر ‪ ،‬ابر کلید ممکن است ترکیبی‬
‫از چند صفت باشد که بهینه نشده است‬
‫بعنوان مثال ‪:‬‬
‫(‪ ، ...‬شماره دانشجویی ‪ ،‬نام خانوادگی ‪ ،‬نام ) دانشجو‬
‫( شماره دانشجویی و نام )= ابر کلید‬
‫ کلید کاندید ( اصلی ) ‪:‬‬‫صفت کلیدی در یک رابطه که اجزای آن نمی توانند کلید‬
‫باشند ‪.‬‬
‫یعنی دارای خاصیت ‪:‬‬
‫‪ -1‬یکتایی مقدار ‪ -2‬کاهش ناپذیری باشد‬
‫مثال ‪ :‬شماره دانشجویی ‪ ،‬کد ملی‬
‫ کلید فرعی ‪:‬‬‫در یک رابطه ممکن است چند صفت داشته باشیم که می‬
‫توانند کلید کاندید باشند و ‪ DBA‬فقط یکی از آنها را به‬
‫عنوان کلید اصلی معرفی کرده است ‪ ،‬در این صورت بقیه‬
‫کلیدها را کلید فرعی می گوئیم‬
‫مثال ‪ :‬در رابطه زیر ‪:‬‬
‫دو کلید می توانیم داشته باشیم‬
‫‪ -1‬شماره دانشجویی‬
‫‪ -2‬کد ملی‬
‫فرض کنید مدیر بانک اطالعاتی شماره دانشجویی را بعن اوان‬
‫کلید اصلی معرفی کند در اینصورت کد ملی کلید فرعی خواهد‬
‫بود ‪.‬‬
‫ کلید خارجی ‪:‬‬‫یک کلید خارجی صفتی است در یک رابطه که در رابطه دیگر‬
‫کلید اصلی است ‪.‬‬
‫نکته ‪ :‬یک کلید خارجی می تواند تهی یا ‪ null‬باشد ‪.‬‬
‫مثال ‪ :‬رابطه های زیر را در نظر بگیرید ‪:‬‬
‫کد محصول برای جدول فروش یک کلید خارجی است ‪.‬‬
‫انواع صفت ‪:‬‬
‫ب ) صفت تک مقداره ‪ /‬چند مقداره ‪:‬‬
‫صفتی است که می تواند برای برخی از اشیاء یک مقدار و‬
‫برخی دیگر چند مقدار داشته باشد ‪.‬‬
‫مث اال در جدول اطالعات اساتید اساتید می توانند دارای یک‬
‫یا چند مدرک تحصیلی باشد ‪.‬‬
‫ج ) صفت مشتق ‪:‬‬
‫صفتی است در یک رابطه که مقدار آن را می توان از روی‬
‫صفات دیگر بدست آورد ‪.‬‬
‫مثال ‪ :‬در جدول زیر سن دانشجو یک صفت مشتق است ‪.‬‬
‫تاریخ تولد – تاریخ روز = سن دانشجو‬
‫د ) صفت ساده ‪:‬‬
‫صفتی است که اجزای آن نمی توانند صفت باشند ‪ .‬مانند‬
‫نام و نام خانوادگی‬
‫ر ) صفت مرکب‪:‬‬
‫صفتی است که اجزای آن نیز دارای معنی باشند ‪ .‬مثال ‪:‬‬
‫آدرس ‪ ،‬مشخصات ‪.‬‬
‫آدرس ( کشور – شهر – خیابان – منطقه و ‪) ...‬‬
‫عملگرها ‪:‬‬
‫‪ -1‬عملگرهای مجموعه ای‬
‫شامل اجتماع‬
‫‪ ،‬اشتراک‬
‫‪ ،‬ضرب و تفاضل‬
‫‪ -2‬عملگرهای رابطه ای‬
‫شامل تصویر ‪ ،‬الحاق‬
‫‪ ،‬تقصیم‬
‫و محدودیت‬
‫عملگرهای مجموعه ای‬
‫عملگر اجتماع ‪:‬‬
‫فرض کنید ‪ A , B‬دور رابطه همنوع باشند ‪ .‬در اینصورت‬
‫اجتماع دو رابطه به صورت ‪ A union B‬نمایش داده می شود و‬
‫شامل چند تاییهایی مثل ‪ T‬که یا در ‪ A‬یا در ‪ B‬و یا در هردو‬
‫آنهاست ‪.‬‬
‫همنوع ‪ :‬اگر و فقط اگر تعداد صفات یکسانی داشته باشند ‪.‬‬
‫عملگر اجتماع ‪:‬‬
‫مثال ‪:‬‬
‫عملگرهای مجموعه ای‬
‫عملگر اشتراک ‪:‬‬
‫فرض کنید ‪ A , B‬دور رابطه همنوع باشند ‪ .‬در این‬
‫صورت اشتراک دو رابطه به‬
‫صورت ‪A Intersect‬‬
‫‪ B‬نمایش داده می شود و شامل چند‬
‫تاییهایی مثل ‪ T‬که هم در ‪A‬و هم در ‪ B‬و باشند ‪.‬‬
‫عملگر اشتراک ‪:‬‬
‫مثال ‪:‬‬
‫عملگرهای مجموعه ای‬
‫عملگر تفاضل ‪:‬‬
‫فرض کنید ‪ A , B‬دور رابطه همنوع باشند ‪ .‬در این‬
‫صورت تفاضل دو رابطه به‬
‫صورت ‪A minus‬‬
‫‪ B‬نمایش داده می شود و شامل چند‬
‫تاییهایی مثل ‪ T‬که در ‪ A‬بوده و در ‪ B‬نیست ‪.‬‬
‫عملگر‬
‫مثال ‪:‬‬
‫تفاضل ‪:‬‬
‫عملگرهای مجموعه ای‬
‫عملگر ضرب دکارتی ‪:‬‬
‫}‪A={x1,…,xm} , B={y1,…,yn‬‬
‫فرض کنید‬
‫باشند که هیچ صفت مشترکی ندارند در اینصورت ضرب دکارتی آنها‬
‫به صورت‬
‫‪A Times B‬‬
‫نمایش داده می شود و شامل تمام چند تاییهایی مثل )‪ T=(x,y‬است‬
‫که ‪ x ε A‬و ‪y ε B‬می باشد ‪.‬‬
‫عملگر ضرب دکارتی‬
‫‪:‬مثال ‪:‬‬
‫عملگرهای مجموعه ای‬
‫عملگر ضرب دکارتی ‪:‬‬
‫نکته ‪:1‬‬
‫چنانچه روابط ‪ A , B‬دارای صفت مشترک باشند ‪ .‬در اینصورت با‬
‫استفاده از دستور ‪ Rename‬نام آن صفت را در یکی از روابط تغییر‬
‫می دهیم ‪ .‬مثال اگر در جداول فوق صفت شهر در هردو یکسان بود می‬
‫بایستی یکی از آنها را تغییر دهیم ‪:‬‬
‫‪A Rename city as s.city‬‬
‫‪A times B‬‬
‫عملگرهای مجموعه ای‬
‫عملگر ضرب دکارتی ‪:‬‬
‫نکته‪: 2‬‬
‫ضرب دکارتی از گرانترین عملگرهای بانک رابطه ای است که زمان و‬
‫فضای زیادی می خواهد و تا حد امکان باید ار آن اجتناب کرد ‪.‬‬
‫توجه کنید که جدول فوق ‪ )2× 2=4( 4‬سطر و ‪ )2+3=5( 5‬ستون دارد‬
‫‪.‬‬
‫عملگرهای رابطه‬
‫ای‬
‫عملگر الحاق (‪: )Join‬‬
‫اگر ‪ A,B‬دو رابطه باشند ‪ ،‬الحاق این دو رابطه را بصورت ‪A join‬‬
‫‪ B‬یا ‪ A ∞ B‬نمایش داده و این عملگر دو رابطه را بر مبنای یک یا‬
‫چند فیلد مشترک به هم پیوند می دهد و رکوردهایی از دو طرف جدول‬
‫را که مقدار آن فیلد مشترک برای آنها یکسان است به هم می چسباند‬
‫‪.‬‬
‫به عبارتی دیگر فقط سطرهایی از جدول را در کنار هم قرار می دهد‬
‫که همه ستونهای همنام آن دو جدول مقادیر مساوی داشته باشند ‪.‬‬
‫ستونهای هم نام فقط یکبار در خروجی ظاهر می شوند‬
‫مثال ‪ :‬با توجه به جداول زیر خروجی ‪ A ∞ C‬را بدست آورید ‪.‬‬
‫فیلد مشترک ‪ S#‬می باشد پس هر سطر جدول ‪ A‬را برداشته پشت سطرهایی از‬
‫جدول ‪ C‬می گذاریم که ‪ S#‬آنها با هم برابرند ‪.‬‬
‫الحاق همواره بین کلید خارجی و کلید سازگار با آن نیست ‪ ،‬اگر چه این الحاق‬
‫بسیار متداول است بعنوان مثال ‪:‬‬
‫نکته‪: 1‬‬
‫عملگر ‪ join‬یک عملگر اولیه نیست ‪ .‬و می توان آنرا با ترکیب سایر‬
‫عملگرها نوشت ‪:‬‬
‫‪A ∞ B = ( A Times B ) where A.city = B.city‬‬
‫عملگر ضرب‬
‫عملگر محدودیت‬
‫عملگرهای رابطه ای‬
‫عملگر محدودیت ‪)Restrict( :‬‬
‫فرض کنید ‪ A‬یک رابطه باشد که دارای صفات ‪ x,y‬است و ‪op‬‬
‫یک عملگر باشد ‪ .‬به طوریکه شرط ‪ X op Y‬خوش تعریف ( دارای‬
‫معنی ) باشد ‪ .‬محدودیت ‪ op‬روی ‪ A‬بصورت زیر تعریف می شود ‪:‬‬
‫‪A where x op y‬‬
‫و نتیجه آن رابطه ای است هم نوع با ‪ A‬که شامل چند تاییهایی است‬
‫که در شرط ‪ x op y‬صدق می کند ‪.‬‬
‫مثال ‪:‬‬
‫فرض کنید جدول محصوالت به صورت زیر باشد ‪ .‬محصوالتی که‬
‫شهر آنها زنجان است را چاپ کنید ؟‬
‫' ‪A where A.city = ' zanjan‬‬
‫مثال ‪:‬‬
‫)‪A where c1 and c2 = (A where c1 ) intersect (A where c2‬‬
‫)‪A where c1 or c2 = (A where c1 ) union (A where c2‬‬
‫)‪A where not c = A minus (A where c‬‬
‫نکته ‪:‬‬
‫عملگر محدودیت یک زیر مجموعه افقی از یک رابطه ایجاد می کند ‪.‬‬
‫یعنی زیر مجموعه ای از چند تایی های مربوط به رابطه ای که در‬
‫شرط محدودیت خاص ی صدق می کند ‪.‬‬
‫عملگرهای رابطه ای‬
‫عملگر تصویر‪:‬‬
‫فرض کنید ‪ R‬یک رابطه بصورت }‪ R={x,y,z‬باشد یک‬
‫تصویر روی ‪ R‬عبارتست از انتخاب یک زیر مجموعه از صفات‬
‫‪ R‬که از آن چندتاییهای تکراری حذف شده اند ‪.‬‬
‫مثال ‪:‬‬
‫}‪R={s#,city,color,number‬‬
‫می خواهیم تصویر }‪ R={city,color‬را پیدا کنیم ‪:‬‬
‫هیچ صفتی نمی تواند بیش از یک بار در لیست کامای نام صفت ظاهر شود ‪.‬‬
‫اگر لیست کامای نام صفت شامل تمام صفات رابطه باشند این عمل تصویر ‪ ،‬یک عمل‬
‫تصویر همانی است ‪.‬‬
‫عملگرهای رابطه ای‬
‫عملگر تقسیم ‪:‬‬
‫فرض کنید ‪:‬‬
‫}‪A={x1,x2,…xm‬‬
‫}‪B={y1,y2,…yn‬‬
‫} ‪C={ x1,x2,…xm , y1,y2,…yn‬‬
‫سه رابطه باشند ‪ .‬در اینصورت حاصل تقسیم ‪ A‬به ‪ B‬به واسطه ‪ C‬به صورت‬
‫زیر نوشته می شود ‪:‬‬
‫‪R=A divid by B per C‬‬
‫و نتیجه آن رابطه ای است مانند }‪ R={x1,…,xm‬که شامل تمام چند‬
‫تاییهایی مانند ‪ t‬است که ‪ t‬زیر مجموعه ‪ A‬بوده و ‪ t‬با تمام ‪ t ε B‬در ‪C‬‬
‫رابطه دارند ‪.‬‬
‫به عبارت دیگر ‪ ،‬نتیجه متشکل از آن مقادیر ‪ x‬از ‪ A‬است که مقادیر ‪ y‬متناظر با‬
‫آنها در ‪ ، C‬حاوی تمام مقادیر ‪ y‬از ‪ B‬هستند ‪.‬‬
‫مثال ‪:‬‬
‫بطور کلی در مدل رابطه ای پس از ایجاد بانک اطالعاتی که یک مجموعه ای از‬
‫جداول است بایستی برای بازیابی اطالعات که در اصطالح ‪ Query‬گفته می‬
‫شود ‪ ،‬از یک ابزاری استفاده نمود که در مدل رابطه ای دو نوع ابزار وجود دا ارد ‪:‬‬
‫‪ -1‬جبر رابطه ای‬
‫‪ -2‬حساب رابطه ای‬
‫جبر رابطه ای ‪:‬‬
‫جبر رابطه ای همان عملگرهایی هستند که تاکنون بررس ی کرده ایم‬
‫حساب رابطه ای ‪:‬‬
‫زبان ‪ sql‬است که یک زبان برنامه نویس ی بوده و در فصل بعدی بررس ی می شود‬
‫‪.‬‬
‫بررس ی چند مثال ‪:‬‬
‫فرض کنید در یک بانک اطالعاتی مدل رابطه ای جداول زیر را داریم ‪،‬‬
‫‪ Query‬های زیر را به زبان جبر رابطه ای روی این بانک اطالعاتی‬
‫انجام دهید ‪:‬‬
‫جدول عرضه کنندگان‬
‫}‪S = {s#,sname,status,city‬‬
‫}‪P={p#,pname,color,weight,city‬‬
‫جدول قطعات‬
‫}‪Sp={s#,p#,qty‬‬
‫جدول ارتباط ‪ :‬هر عرضه کننده از هر قطعه چقدر عرضه کرده است‬
‫مثال ‪: 1‬‬
‫اسامی عرضه کنندگانی را مشخص کنید که قطعه ‪ P2‬را عرضه می‬
‫کنند ‪.‬‬
‫)}‪((( sp where sp.p# = 'p2' ) {s#}) join s ){name‬‬
‫تصویر‬
‫الحاق‬
‫تصویر‬
‫محدودیت‬
‫مثال ‪: 2‬‬
‫اسامی عرضه کنندگانی را مشخص کنید که حداقل یک قطعه قرمز‬
‫عرضه می کنند ‪.‬‬
‫}‪((((( p where p.color = ' red ' ) { p#} ) join sp ) {s#} ) join s ){sname‬‬
‫مثال ‪: 3‬‬
‫اسامی عرضه کنندگانی را مشخص نمائید که تمام قطعات را عرضه می‬
‫کنند ‪.‬‬
‫}‪(( s{s#} divid by p {p#} per sp {s#,p#}) join s ) {sname‬‬
‫مثال ‪: 4‬‬
‫شماره عرضه کنندگانی را مشخص کنید که حداقل تمام قطعات را‬
‫که توسط تولید کننده ‪ s2‬تولید می شود را تولید کرده باشد ‪.‬‬
‫)}‪((s{s#} divid by ( sp where s# = 's2' ){p#} per sp { s#,p#‬‬
‫آنهایی که عرضه کنندگان آنها ‪ s2‬است‬
‫چه قطعاتی را تولید می کنند‬
‫شماره قطعاتی که عرضه کننده ‪ s2‬تولید می کند‬
‫تمام عرضه کنندگان‬
‫مثال ‪: 5‬‬
‫اسامی عرضه کنندگانی که قطعه ‪ p2‬را عرضه نمی کنند را مشخص‬
‫کنید‬
‫}‪((s {s#} minus ( sp where sp.p# = 'p2' ){s#}) join s ) {sname‬‬
:‫فصل چهارم‬
Standard query language (Sql)
‫دستورات ‪ SQL‬همانند هر زبان فرعی داده ای دیگر به سه گروه‬
‫تقسیم می شود‪:‬‬
‫‪ -1‬دستورات تعریف داده یا ‪DDL‬‬
‫‪ -2‬دستورات دستکاری داده یا ‪DML‬‬
‫‪ -3‬دستورات کنترل داده ها یا ‪DCL‬‬
‫چند تذکر ‪:‬‬
‫‪-1‬کلیه دستورات ‪ SQL‬یک پرس و جو محسوب می شوند ولی برخی‬
‫کارشناسان واژه پرس و جو را تنها در مورد دستور ‪ SELECT‬به کار می‬
‫برند‪.‬‬
‫‪-2‬برای برخی از پرس و جوهای این فصل چند روش ارائه شده است ولی این‬
‫به این معنای ارائه کلیه روشهای ممکن نیست‪.‬‬
‫‪-3‬در همه مثال های این فصل ‪ ،‬از جداول ‪ S, P, J‬و ‪ SPJ‬استفاده شده است‬
‫که در جدول ‪ ،S‬اطالعات تولید کنندگان‪ ،‬در جدول ‪ ،P‬اطالعات‬
‫محصوالت و در جدول ‪ ،J‬اطالعات پروژه ها ذخیره شده است و ضمنا" در‬
‫جدول ‪ SPJ‬مشخص می شود هر تولید کننده چند کیلوگرم از هر محصول‬
‫را برای هر پروژه تولید کرده است‪.‬‬
‫جداول ‪:‬‬
‫)‪S(s# , sname, city‬‬
‫اطالعات تولید کنندگان‬
‫اطالعات محصوالت‬
‫)‪P(P# , Pname, color‬‬
‫اطالعات پروژه ها‬
‫هر تولید کننده چند کیلوگرم از هر محصول‬
‫را برای هر پروژه تولید کرده است‪.‬‬
‫)‪J(j# , jname, city‬‬
‫)‪SPJ(s#,p#,j#,qty‬‬
‫اطالعات تولید کنندگان‬
‫اطالعات محصوالت‬
‫اطالعات پروژه ها‬
‫هر تولید کننده چند کیلوگرم از هر محصول را برای هر پروژه تولید کرده است‪.‬‬
‫دستورات تعریف داده ها ‪:‬‬
‫از دستورات تعریف داده ها برای تعیین و یا تغییر ساختار داده ها استفاده‬
‫می شود ‪ .‬این دستورات عبارتند از ‪:‬‬
‫‪ -1‬دستور ایجاد پایگاه داده ها‬
‫‪ -2‬دستور ایجاد جداول‬
‫‪ -3‬ایجاد ایندکس‬
‫‪ -4‬اضافه کردن یک ستون جدید به یک جدول‬
‫‪ -5‬تغییر مشخصات یک ستون از یک جدول‬
‫‪ -6‬حذف یک ستون از جدول‬
‫‪ -7‬حذف یک جدول‬
‫‪ -8‬حذف یک ایندکس‬
‫دستور ایجاد پایگاه داده ها‬
‫قبل از ایجاد جداول الزم است یک پایگاه داده ایجاد شود و سپس‬
‫جداول مورد نظر در داخل آن ساخته شوند‪.‬‬
‫قالب کلی ‪:‬‬
‫نام پایگاه داده ها ‪create database‬‬
‫مثال ‪:‬‬
‫‪create database sale‬‬
‫دستور ایجاد جداول ‪:‬‬
‫قالب کلی ‪:‬‬
‫نام جدول ‪create table‬‬
‫‪ ]not null[ ]unique[,‬نوع ویژگی ‪ 1‬نام ویژگی ‪1‬‬
‫‪ ]not null[ ]unique[,‬نوع ویژگی‪ 2‬نام ویژگی‪2‬‬
‫‪ ]not null[ ]unique[,‬نوع ویژگی ‪ 3‬نام ویژگی ‪3‬‬
‫‪...‬‬
‫‪(,‬نام ویژگی های تشکیل دهنده کلید اصلی) ‪Primary Key‬‬
‫‪,‬نام جدول مورد نظر‪ ( references‬نام ویژگی های کلید خارجی ‪foreign Key)1‬‬
‫‪,‬نام جدول مورد نظر‪ ( references‬نام ویژگی های کلید خارجی ‪foreign Key)2‬‬
‫‪...‬‬
‫([ شرط مورد نظر ‪]check‬‬
‫تذکر ‪ :‬در کلیه دستورات برای مشخص کردن قسمت های اختیاری از کروشه استفاده شده‬
‫است‪.‬‬
‫معروف ترین انواع داده در ‪ SQL‬عبارتند از ‪:‬‬
‫بازه‬
‫نوع داده ای‬
‫‪Integer‬‬
‫اعداد صحیح‬
‫‪Smallint‬‬
‫اعداد صحیح‬
‫)‪Decimal(p,q‬‬
‫اعدادی با ‪ P‬رقم و ‪ q‬رقم اعشاری در سمت راست‬
‫‪float‬‬
‫اعدادی اعشاری با ممیز شناور‬
‫)‪Char(n‬‬
‫رشته های کاراکتری با طول ‪n‬‬
‫)‪Varchar (n‬‬
‫رشته های کاراکتری با طول متغیر کوچکتر یا مساوی ‪n‬‬
‫‪date‬‬
‫تاریخ با فرمت ‪yyyymmdd‬‬
‫‪time‬‬
‫زمان با فرمت ‪hhmmss‬‬
‫چند نکته ‪:‬‬
‫‪ -1‬برای عبارات فارس ی از انواع ‪ nchar , ntext‬و ‪ ...‬استفاده می شود‬
‫‪-2‬در صورت استفاده از عبارات ‪ not null‬برای یک ویژگی ‪ DBMS‬از‬
‫درج تاپل هایی که در آنها برای ویژگی مورد نظر مقداری وارد نشده‬
‫باشد جلوگیری می کند‪ .‬در صورت استفاده از عبارت ‪ unique‬برای‬
‫یک ویژگی‪ DBMS ،‬از درج تاپل هایی که در آنها برای ویژگی مورد‬
‫نظر مقدار تکراری وارد شده باشد جلوگیری می کند‪.‬‬
‫مثال ‪:‬‬
‫جدول ‪ S‬را به گونه ای ایجاد کنید که کاربر مجاز نباشد هیچ تاپلی‬
‫با ‪ sname‬خالی یا تکراری در این جدول درج کند ‪:‬‬
‫‪Create table S (s# char(2),‬‬
‫‪sname char(30) not null unique ,‬‬
‫‪city nchar(20) ,‬‬
‫))‪primary key (s#‬‬
: ‫مثال‬
. ‫ باشد‬2000 ‫ تا‬500 ‫ اعداد بین‬qty ‫ را به گونه ای ایجاد کنید که بازه مجاز برای‬SPJ ‫جدول‬
. ‫ استفاده شود‬check ‫برای تعیین قوانین جامعیت داده ای از قسمت‬
Create table SPJ (s# char (2) ,
P# char (2) ,
J# char (2) ,
Qty integer ,
Primary key (s#,p#,j#) ,
Foreing key (s#) references S ,
Foreing key (p#) references p ,
Foreing key (j#) references j ,
Check (qty > 500 and qty < 20000 ))
‫ایجاد ایندکس ‪:‬‬
‫ایندکس ها در واقع همان کلیدهای ثانویه هستند ‪ .‬از ایندکس ها برای‬
‫تسریع جستجوی یک موجودیت خاص در صورت عدم دسترس ی به مقدار‬
‫کلید اصلی استفاده می شود‪.‬‬
‫قالب کلی ‪:‬‬
‫(نام ویژگی ها) نام جدول ‪ on‬نام ایندکس ‪Create ]unique[ index‬‬
‫مثال ‪:‬‬
‫‪create database sale‬‬
‫مثال ‪:‬‬
‫روی جدول ‪ S‬یک ایندکس بر اساس نام تولید کننده و با نام ‪ names‬ایجاد‬
‫کنید‪.‬‬
‫(‪create index names on S )sname‬‬
‫تذکر ‪:‬‬
‫درصورت استفاده کلی ازعبارت‪ unique‬در این دستور‪ DBMS ،‬از ورود اسم‬
‫های تکراری در جدول ‪ S‬جلوگیری خواهد کرد‪.‬‬
‫اضافه کردن یک ستون جدید به یک جدول‬
‫قالب کلی ‪:‬‬
‫مشخصات ستون جدید نام ستون جدید ‪ add‬نام جدول ‪Alter table‬‬
‫مثال ‪ :‬در جدول ‪ S‬ستون جدیدی با نام ‪ tel‬برای درج شماره تلفن تولید کنندگان‬
‫اضافه کنید‪.‬‬
‫(‪alter table S add tel char )10‬‬
‫تغییر مشخصات یک ستون از یک جدول‬
‫قالب کلی ‪:‬‬
‫مشخصات جدید نام ستون ‪ alter column‬نام جدول ‪alter table‬‬
‫مثال ‪ :‬در جدول ‪ ،S‬طول ستون ‪ sname‬را از ‪ 30‬کاراکتر به ‪ 20‬کاراکتر تغییر دهید‬
‫‪Alter table S alter column sname nchar (20) not null unique‬‬
‫حذف یک ستون از جدول‬
‫قالب کلی ‪:‬‬
‫نام ستون ‪ drop column‬نام جدول ‪alter table‬‬
‫مثال ‪ :‬ستون ‪ sname‬را از جدول ‪ S‬حذف کنید‪.‬‬
‫‪Alter table S drop column sname‬‬
‫حذف یک جدول‬
‫قالب کلی ‪:‬‬
‫نام جدول ‪drop table‬‬
‫مثال ‪ :‬جدول ‪ S‬را حذف کنید‪.‬‬
‫‪drop table S‬‬
‫حذف یک ایندکس‬
‫قالب کلی ‪:‬‬
‫نام ایندکس ‪ .‬نام جدول ‪drop index‬‬
‫مثال ‪ :‬ایندکس ‪ names‬روی جدول ‪ S‬را حذف کنید‪.‬‬
‫‪Drop index S.sname‬‬
‫دستورات دستکاری داده ‪:‬‬
‫از این دستورات برای تهیه گزارشات ( خواندن تاپل ها)‪ ،‬درج تاپل ها‪ ،‬حذف تاپل‬
‫ها و تغییر تاپل ها استفاده می شود‪ .‬این دستورات عبارتند از ‪:‬‬
‫‪ -1‬دستور انتخاب‬
‫‪ -2‬دستور ایجاد دید خارجی یا دیدگاه‬
‫‪ -3‬حذف یک دیدگاه‬
‫‪ -4‬درج یک تاپل‬
‫‪ -5‬اصالح تاپل ها‬
‫‪ -6‬حذف تاپل ها‬
‫دستور انتخاب ‪:‬‬
‫این دستور یکی از پرکاربردترین دستورات ‪ SQL‬است‪ .‬از این دستورات برای‬
‫انتخاب تاپل ها و ستون های مورد نظر از یک یا چند جدول استفاده می شود‪.‬‬
‫قالب کلی ‪:‬‬
‫نام ستون ها و یا عبارات محاسباتی مورد نظر [‪Select ]distinct‬‬
‫نام جدول ‪From‬‬
‫‪] where‬‬
‫[شرط روی تاپل ها‬
‫[نام ستون هایی که قرار است لیست بر اساس آنها گروه بندی شود ‪]gropup by‬‬
‫‪]having‬‬
‫[شرط روی گروه ها‬
‫[ نام ستون هایی که قرار است لیست بر اساس آنها مرتب شود ‪]order by‬‬
‫مثال ‪ :‬نام کلیه شهرهایی را بیابید که تولید کننده ای در آن ها قرار دارد‪.‬‬
‫برای این کار کافی است ستون ‪ city‬از جدول ‪ S‬را انتخاب کنیم‪.‬‬
‫‪Select city from s‬‬
‫و یا می توان نام جدول را نیز ذکر کرد ‪:‬‬
‫‪Select s.city from s‬‬
‫خروجی ‪:‬‬
‫‪City‬‬
‫تهران‬
‫یزد‬
‫اصفهان‬
‫تهران‬
‫مشاهده می کنید که در این جدول تاپل های تکراری وجود دارند‪ .‬برای حذف‬
‫تاپلهای تکراری کافی است از عبارت ‪ distinct‬استفاده کنیم ‪:‬‬
‫‪Select distinct city from s‬‬
‫خروجی ‪:‬‬
‫‪City‬‬
‫تهران‬
‫یزد‬
‫اصفهان‬
‫مثال ‪ :‬مشخصات کلیه تولید کنندگان را بیابید‪.‬‬
‫برای این کار کافی است تمام ستون های جدول ‪ S‬را انتخاب کنیم ‪:‬‬
‫‪Select s#,sname,city‬‬
‫‪from s‬‬
‫به جای ذکر تمام ستون های یک جدول می توان از * استفاده کرد(* به معنی تمام ستون های‬
‫جدول است )‪:‬‬
‫خروجی ‪:‬‬
‫‪city‬‬
‫‪sname‬‬
‫‪S#‬‬
‫تهران‬
‫تهران مصالح‬
‫یزد‬
‫یزد مصالح‬
‫اصفهان‬
‫البرز‬
‫تهران‬
‫ایران مصالح‬
‫‪S1‬‬
‫‪S2‬‬
‫‪S3‬‬
‫‪S4‬‬
‫* ‪Select‬‬
‫‪from s‬‬
‫قسمت ‪: where‬‬
‫از قسمت ‪ where‬برای انتخاب تاپل هایی از جدول که شرط به خصوص ی‬
‫دارند استفاده می شود‬
‫مثال ‪ :‬نام تولید کنندگان تهرانی را بیابید ‪:‬‬
‫‪Select sname‬‬
‫‪From S‬‬
‫'تهران' =‪Where city‬‬
‫خروجی ‪:‬‬
‫‪sname‬‬
‫تهران مصالح‬
‫ایران مصالح‬
‫عملگرهای ‪ in‬و ‪: not in‬‬
‫برای تست وجود یا عدم وجود یک مقدار داخل یک مجموعه استفاده می‬
‫شود‪.‬‬
‫مثال ‪ :‬مشخصات فروشهای مربوط به محصوالت ‪ P2‬یا ‪ P3‬یا ‪ P4‬را بیابید‪.‬‬
‫روش اول ‪:‬‬
‫* ‪Select‬‬
‫‪From SPJ‬‬
‫’‪Where p# =‘p2’ or p# =‘p3’ or p# =‘p4‬‬
‫روش دوم ‪ :‬استفاده از عملکرد ‪in‬‬
‫* ‪Select‬‬
‫‪From SPJ‬‬
‫)’‪Where p# in (‘p2’,’p3’,’p4‬‬
: ‫خروجی‬
S#
P#
J#
qty
S1
P2
J1
20000
S1
P3
J1
3000
S1
P4
J1
8000
S2
P3
J1
8000
S3
P2
J3
9000
‫مثال ‪ :‬مشخصات فروش هایی را بیابید که مربوط به محصوالت "‪"P2‬‬
‫و"‪ "P3‬و"‪ "P4‬نیستند‪.‬‬
‫روش اول ‪:‬‬
‫* ‪Select‬‬
‫‪From SPJ‬‬
‫’‪Where p# <>‘p2’ and p# <>‘p3’ and p# <>‘p4‬‬
‫روش دوم ‪ :‬استفاده از عملکرد ‪not in‬‬
‫* ‪Select‬‬
‫‪From SPJ‬‬
‫)’‪Where p# not in (‘p2’,’p3’,’p4‬‬
‫عملگر ‪: between‬‬
‫توسط این عملگر می توان بازه یک جستجو را مشخص کرد‪ .‬در این حالت ‪ ،‬تمام مقادیری‬
‫که بین ‪ value1‬و‪ value2‬قرار می گیرند‪ ،‬انتخاب می شوند‪.‬‬
‫مثال ‪ :‬مشخصات تولید کنندگانی را بیابید که ‪ s‬آنها بین "‪"S1‬و"‪ "S3‬واقع شده اند‬
‫خروجی ‪:‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫’‪Where s# between ‘S1’ and ‘S3‬‬
‫‪city‬‬
‫‪sname‬‬
‫‪S#‬‬
‫تهران‬
‫تهران مصالح‬
‫‪S1‬‬
‫یزد‬
‫یزد مصالح‬
‫‪S2‬‬
‫اصفهان‬
‫البرز‬
‫‪s3‬‬
‫عملگر ‪: like‬‬
‫از عملگر ‪ like‬برای جستجوی یک عبارت داخل مقادیر یک ستون رشته ای استفاده می‬
‫شود‪.‬‬
‫مثال ‪ :‬مشخصات تولید کنندگانی را بیابید که در نام آنها عبارت « مصالح» به کار رفته‬
‫باشد‪.‬‬
‫خروجی ‪:‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫‘‪%‬مصالح‪where sname like ’%‬‬
‫‪city‬‬
‫‪sname‬‬
‫‪S#‬‬
‫تهران‬
‫تهران مصالح‬
‫‪S1‬‬
‫یزد‬
‫یزد مصالح‬
‫‪S2‬‬
‫تهران‬
‫ایران مصالح‬
‫‪S4‬‬
‫تذکر ‪ :‬در این پرس و جو محل قرار گرفتن عبارت « مصالح» مهم نبوده‪ ،‬در دو طرف عبارت‬
‫از ‪ %‬استفاده کردیم‪.‬‬
‫چنانچه نام تولید کنندگانی که نام آنها با عبارت « مصالح» شروع می شود مورد نظر‬
‫باشد‪ ،‬از دستور زیر استفاده می کنیم ‪:‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫‘‪%‬مصالح’ ‪where sname like‬‬
‫و چنانچه نام تولید کنندگانی که نام آنها به عبارت « مصالح» ختم می شود مورد نظر‬
‫باشد از دستور زیر استفاده می شود ‪:‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫‘مصالح‪where sname like ’%‬‬
‫تابع ‪: sum‬‬
‫از تابع ‪ sum‬برای محاسبه مجموع مقادیر یک ستون استفاده می شود‪.‬‬
‫مثال ‪ :‬میزان کل فروش "‪ "P1‬را بیابید ‪.‬‬
‫برای این کار کافی است مجموع مقادیر ستون ‪ qty‬را در فروش های مربوط به "‪ "P1‬محاسبه‬
‫کنیم ‪:‬‬
‫)‪Select sum(qty‬‬
‫‪From SPJ‬‬
‫’‪where p# =‘p1‬‬
‫خروجی ‪:‬‬
‫‪51000‬‬
‫تابع ‪: max‬‬
‫از تابع ‪ max‬برای محاسبه بزرگترین مقدار یک ستون استفاده می شود‪.‬‬
‫مثال ‪ :‬حداکثر فروش "‪ "P1‬تا این لحظه را به دست آورید‪.‬‬
‫برای این کار کافی است ماکزیمم مقادیر ستون ‪ qty‬را در فروش های مربوط به ’‪‘P1‬‬
‫محاسبه کنیم ‪:‬‬
‫)‪Select max(qty‬‬
‫‪From SPJ‬‬
‫’‪where p# =‘p1‬‬
‫خروجی ‪:‬‬
‫‪1200‬‬
‫تابع ‪: min‬‬
‫از تابع ‪ min‬برای محاسبه کوچکترین مقدار یک ستون استفاده می شود‪.‬‬
‫مثال ‪ :‬کمترین میزان فروش ’‪ ‘P1‬توسط ’‪ ‘S1‬را به دست آورید‪.‬‬
‫برای این کار کافی است مینیمم مقادیر ستون ‪ qty‬را در فروش های مربوط به ’‪ ‘P1‬و ’‪‘P1‬‬
‫محاسبه کنیم ‪:‬‬
‫خروجی ‪:‬‬
‫)‪Select min(qty‬‬
‫‪From SPJ‬‬
‫'‪Where p# ='p1' and s# = 's1‬‬
‫‪9000‬‬
‫تابع ‪: count‬‬
‫تابع ‪ count‬برای محاسبه تعداد تاپلهای مورد نظر از یک جدول استفاده می شود‪.‬‬
‫مثال ‪ :1‬محصول ’‪ ‘P1‬تا کنون چند بار فروخته شده است ؟‬
‫برای این کار کافی است تعداد تاپلهایی از جدول ‪ SPJ‬که مربوط به '‪ 'P1‬هستند را به دست‬
‫آوریم ‪:‬‬
‫)‪Select count(qty‬‬
‫‪From SPJ‬‬
‫'‪Where p# ='p1‬‬
‫خروجی ‪:‬‬
‫‪7‬‬
‫مثال ‪ :2‬محصول '‪ 'P1‬تا کنون توسط چند تولید کننده فروخته شده است ؟‬
‫برای این کار کافی است تعداد تولید کنندگان غیر تکراری از جدول ‪ SPJ‬که "‪ "P1‬را‬
‫فروخته اند به دست آوریم ‪:‬‬
‫خروجی ‪:‬‬
‫)‪Select count(distinict s#‬‬
‫‪From SPJ‬‬
‫'‪Where p# ='p1‬‬
‫‪3‬‬
‫قسمت ‪: group by‬‬
‫از قسمت ‪ group by‬برای گروه بندی لیست بر اساس مقادیر یک یا چند‬
‫ستون استفاده می شود ‪.‬‬
‫مثال ‪ : 1‬لیستی از کد محصوالت و میزان کل فروش هر یک از انها تهیه کنید‪.‬‬
‫در اینجا )‪ sum(qty‬برای هر یک از محصوالت ‪ P1‬و‪ P2‬و‪ P3‬و ‪ ...‬باید به طور جداگانه‬
‫محاسبه شود‪.‬‬
‫پس الزم است لیست را بر اساس‪ P #‬گروه بندی کنیم ‪:‬‬
‫)‪select p#,sum (qty‬‬
‫‪From SPJ‬‬
‫‪group by p#‬‬
‫خروجی این پرس و جو به شکل زیر خواهد بود ‪:‬‬
‫‪P#‬‬
‫‪51000‬‬
‫‪P1‬‬
‫‪29000‬‬
‫‪P2‬‬
‫‪11000‬‬
‫‪P3‬‬
‫‪8000‬‬
‫‪P4‬‬
‫تذکر ‪:‬‬
‫در صورت استفاده از قسمت ‪ ،group by‬قسمت‪ seleect‬باید‬
‫شامل نام ویژگی هایی که لیست بر اساس آنها گروه بندی شده است‬
‫و در صورت نیاز یکی از توابع ‪count, min, max, avg, sum‬‬
‫باشد‪ .‬مثال" در پرس و جوی باال چون در قسمت ‪ group by‬از ‪P#‬‬
‫استفاده شده است‪ ،‬قسمت ‪ select‬حتما" باید شامل ‪ P#‬و در‬
‫صورت لزوم یکی از توابع ‪count, min, max, avg, sum‬‬
‫باشد‪.‬‬
‫مثال ‪ :2‬لیستی از کد محصوالت‪ ،‬کد پروژه ها و میزان کل فروش محصول مورد نظر برای‬
‫پروژه مورد نظر تهیه کنید‪.‬‬
‫در اینجا میزان کل فروش برای هر ترکیب شماره محصول ‪ /‬شماره پروژه بایستی به طور‬
‫جداگانه محاسبه شود ‪.‬‬
‫پس الزم است لیست را بر اساس ‪ P #‬و‪ j #‬گروه بندی کنیم ‪:‬‬
‫)‪select p#,j#,sum (qty‬‬
‫‪From SPJ‬‬
‫‪group by p#,j#‬‬
‫خروجی این پرس و جو به شکل زیر خواهد بود ‪:‬‬
‫‪J#‬‬
‫‪P#‬‬
‫‪23000‬‬
‫‪J1‬‬
‫‪P1‬‬
‫‪20000‬‬
‫‪J1‬‬
‫‪P2‬‬
‫‪11000‬‬
‫‪J1‬‬
‫‪P3‬‬
‫‪8000‬‬
‫‪J1‬‬
‫‪P4‬‬
‫‪10000‬‬
‫‪J2‬‬
‫‪P1‬‬
‫‪18000‬‬
‫‪J3‬‬
‫‪P1‬‬
‫‪9000‬‬
‫‪J3‬‬
‫‪P2‬‬
‫قسمت ‪: having‬‬
‫از قسمت ‪ having‬برای انتخاب گروه هایی که شرط به خصوص ی دارند‬
‫استفاده می شود‪.‬‬
‫مثال ‪ :‬کد محصوالتی را بیابید که میزان کل فروش آنها بیش از ‪ 20000‬کیلوگرم است‪.‬‬
‫در اینجا میزان کل فروش برای هر محصول بایستی به طور جداگانه محاسبه شده‪ ،‬سپس کد‬
‫محصوالتی که میزان کل فروش آنها بیش از ‪ 20000‬است استخراج شود ‪:‬‬
‫‪P#‬‬
‫‪P1‬‬
‫‪P2‬‬
‫‪select P#‬‬
‫‪From SPJ‬‬
‫‪group by P#‬‬
‫‪Having sum (qty) > 20000‬‬
‫قسمت ‪: order by‬‬
‫از این قسمت برای مرتب کردن لیست بر اساس مقادیر یک یا چند ستون‬
‫عددی‪ ،‬رشته ای و یا تاریخی از یک جدول به ترتیب صعودی(‪ )asc‬و یا نزو لی‬
‫)‪ )desc‬استفاده می شود‪.‬‬
‫مثال ‪ : 1‬لیستی از مشخصات تولید کنندگان تهیه کنید به طوری که بر اساس ترتیب‬
‫صعودی نام آنها مرتب باشد‪.‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫‪Order by sname asc‬‬
‫خروجی ‪:‬‬
‫‪city‬‬
‫‪sname‬‬
‫‪S#‬‬
‫اصفهان‬
‫البرز‬
‫‪S3‬‬
‫تهران‬
‫ایران مصالح‬
‫‪S4‬‬
‫تهران‬
‫تهران مصالح‬
‫‪S1‬‬
‫یزد‬
‫یزد مصالح‬
‫‪S2‬‬
‫تذکر ‪ :‬چون ترتیب مرتب سازی به طور پیش فرض صعودی است می توان عبارت ‪ asc‬را‬
‫حذف کرد ‪:‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫‪Order by sname‬‬
‫مثال ‪ :2‬لیستی از مشخصات تولید کنندگان تهیه کنید به طوری که بر اساس ترتیب‬
‫صعودی شهر و ترتیب نزو لی نام مرتب باشد‪.‬‬
‫‪city‬‬
‫‪sname‬‬
‫‪S#‬‬
‫اصفهان‬
‫البرز‬
‫‪S3‬‬
‫تهران‬
‫تهران مصالح‬
‫‪S1‬‬
‫تهران‬
‫ایران مصالح‬
‫‪S4‬‬
‫یزد‬
‫یزد مصالح‬
‫‪S2‬‬
‫* ‪Select‬‬
‫‪From S‬‬
‫‪Order by city asc,‬‬
‫‪sname desc‬‬
‫تذکر ‪ :‬در اینجا لیست ابتدا بر اساس ویژگی اول یعنی ‪ city‬مرتب شده است‪ .‬سپس‬
‫در مورد تاپلهایی که ویژگی ‪ city‬در انها مساوی است‪ ،‬ترتیب نزو لی بر اساس ویژگی‬
‫دوم یعنی ‪ Sname‬اعمال شده است ‪.‬‬
‫عملگر ‪: as‬‬
‫از این عملگر برای تغییر نام یک ستون در لیست استفاده می شود‪.‬‬
‫مثال ‪ :‬لیستی از نام تولید کنندگان و شهر سکونت آنها تهیه کنید‪.‬‬
‫فرض کنید بخواهیم نام ستون ‪ sname‬را به ‪ supplier Name‬تغییر دهیم ‪:‬‬
‫‪Select sname as supplierName , city‬‬
‫‪From S‬‬
‫‪city‬‬
‫‪suppliername‬‬
‫تهران‬
‫تهران مصالح‬
‫یزد‬
‫یزد مصالح‬
‫اصفهان‬
‫البرز‬
‫تهران‬
‫ایران مصالح‬
‫پرس و جو روی چند جدول ‪:‬‬
‫در کلیه مثال های قبل اطالعات مورد نیاز در پرس و جو تنها از یک جدول‬
‫استخراج شدند ولی در بسیاری از موارد نتیجه پرس وجو را باید از چند جدول‬
‫استخراج کرد‪.‬‬
‫مثال ‪ :‬لیستی از نام تولید کنندگان و نام محصوالت تهیه کنید به طوری که تولید‬
‫کننده مورد نظر محصول مورد نظر را فروخته باشد‪.‬‬
‫نام تولید کنندگان در جدول‪ S‬ونام محصوالت در جدول‪ P‬قرار دارد‪ .‬همچنین در‬
‫جدول ‪ SPJ‬مشخص می شود که چه تولید کننده ای چه محصولی را فروخته‬
‫است‪ .‬بنابراین کافی است جدول ‪ S‬و‪ P‬و‪ SPJ‬را با هم پیوند دهیم‪.‬‬
‫‪Select distinct sname , pname‬‬
‫‪From S, SPJ , P‬‬
‫‪Where spj.s# = s.s# and spj.p# = p.p#‬‬
‫‪pname‬‬
‫‪sname‬‬
‫تیرآهن‬
‫آرماتور‬
‫سیمان‬
‫آلومینیم‬
‫تهران مصالح‬
‫تهران مصالح‬
‫تهران مصالح‬
‫تهران مصالح‬
‫تیرآهن‬
‫سیمان‬
‫تیرآهن‬
‫آرماتور‬
‫یزد مصالح‬
‫یزد مصالح‬
‫البرز‬
‫البرز‬
‫عملگر های ‪ exists‬و‪: not exists‬‬
‫از این عملگرها برای تست وجود یا عدم وجود تاپلهایی خاص در یک جدول استفاده می‬
‫شود ‪.‬‬
‫مثال ‪ :‬نام تولید کنندگانی را بیابید که فروش ی داشته اند‪.‬‬
‫روش اول ‪ :‬این پرس و جو را می توان به این صورت تعبیر کرد ‪ :‬از جدول ‪ S‬نام تولید‬
‫کنندگانی را پیدا کنید که در جدول فروش)‪ (SPJ‬فروش ی (تاپلی) برای آنها وجود دارد ‪:‬‬
‫‪Select sname‬‬
‫‪From S‬‬
‫*‪Where exsists (select‬‬
‫‪From SPJ‬‬
‫) ‪Where spj.s# = s.s#‬‬
‫روش دوم ‪ :‬با استفاده ار پیوند دو جدول نیز می توان نتیجه این پرس و جو را‬
‫بدست آورید ‪:‬‬
‫‪Select sname‬‬
‫‪From s,spj‬‬
‫‪Where s.s# = spj.s#‬‬
‫‪sname‬‬
‫تهران مصالح‬
‫یزد مصالح‬
‫البرز‬
‫عملگر ‪: union‬‬
‫از این عملگر برای به دست آوردن اجتماع دو جدول سازگار استفاده می شود‪.‬‬
‫مثال ‪ :‬نام شهرهایی را بیابید که تولید کننده ای در آنها قرار دارد یا پروژه ای در آنها در‬
‫حال اجرا است‪.‬‬
‫نام شهرهایی که تولید کننده ای در انها قرار دارد‪.‬‬
‫‪U‬‬
‫نام شهرهایی که پروژه ای در آنها در حال اجرا است‪.‬‬
‫)‪) Select city from S‬‬
‫‪union‬‬
‫)‪)Select city from J‬‬
‫عملگر ‪: except‬‬
‫از این عملگر برای تفریق دو جدول سازگار استفاده می شود‪.‬‬
‫مثال ‪ :‬نام شهرهایی را بیابید که تولید کننده ای در آنها قرار دارد ولی پروژه ای در آنها در‬
‫حال اجرا نیست‪.‬‬
‫نام شهرهایی که تولید کننده ای در انها قرار دارد‪.‬‬
‫‬‫نام شهرهایی که پروژه ای در آنها در حال اجرا است‪.‬‬
‫)‪) Select city from S‬‬
‫‪except‬‬
‫)‪)Select city from J‬‬
‫‪‬‬
‫عملگر ‪: intersect‬‬
‫از این عملگر برای به دست آوردن اشتراک دو جدول سازگار استفاده می شود‪.‬‬
‫مثال ‪ :‬نام شهرهایی را بیابید که تولید کننده ای در آنها قرار دارد و پروژه ای در آنها در‬
‫حال اجرا است‪.‬‬
‫نام شهرهایی که تولید کننده ای در انها قرار دارد‪.‬‬
‫‪intersect‬‬
‫نام شهرهایی که پروژه ای در آنها در حال اجرا است‪.‬‬
‫)‪) Select city from S‬‬
‫‪intersect‬‬
‫)‪)Select city from J‬‬
‫نکته ‪:‬‬
‫در هر سه دستور فوق‪ ،‬مقادیر تکراری حذف می شوند‪ .‬برای نشان‬
‫دادن مقادیر تکراری کافی است کلمه کلیدی ‪ all‬به هر یک اضافه‬
‫شود‬
‫یعنی ‪union all‬‬
‫یا‬
‫‪except all‬‬
‫یا‬
‫‪intersect all‬‬
‫دستور ایجاد دید خارجی یا دیدگاه ‪:‬‬
‫هر کاربر از دید خود به اطالعات موجود در پایگاه داده نگاه می‬
‫کند‪ .‬مثال" در یک دانشگاه ‪ ،‬اطالعات زیادی در مورد یک دانشجو‬
‫وجود دارد‪ .‬مسائل مالی یا وضعیت تأمین اجتماعی دانشجو به‬
‫امور مالی مربوط می شود و نه به آموزش ‪ ،‬پس هیچ لزومی ندارد‬
‫که این داده ها را در دسترس کاربران قسمت آموزش قرار دهیم‪.‬‬
‫بنابراین بهتر است برای کاربران قسمت آموزش ‪ ،‬یک یا چند‬
‫دیدگاه ایجاد کنیم تا بدون درگیر شدن با داده هایی که مربوط به‬
‫حوزه عملیات مورد نظر خود را انجام دهند‪.‬‬
‫دیدگاه در واقع یک جدول است که توسط طراح پایگاه داده ها‬
‫طراحی می شود‪ DBMS .‬وظیفه دارد پس از اعمال هر تغییر در‬
‫داده های جداول ‪ ،‬محتویات دیدگاه هایی را که روی جداول مورد‬
‫نظر ساخته شده اند‪ ،‬اصالح کند‪ .‬بنابراین داده های موجود در‬
‫دیدگاه همیشه به روز می باشند‪.‬‬
‫استفاده از دیدگاه ها باعث سهولت انجام بسیاری از پرس وجوها و‬
‫در نتیجه تسریع تهیه بسیاری از گزارشات می شود‪.‬‬
‫قالب کلی دستور ایجاد دیدگاه ‪:‬‬
‫(نام ستون های دیدگاه) نام دیدگاه ‪create view‬‬
‫‪As‬‬
‫یک دستور انتخاب‬
‫مثال ‪ :‬دیدگاهی به نام ‪ PartSale‬ایجاد کنید که شامل کد محصوالت و میزان کل فروش آنها‬
‫باشد‬
‫(‪create view PartSale (p#,sum1‬‬
‫‪As‬‬
‫)‪select p#,sum(qty‬‬
‫‪From SPJ‬‬
‫‪group by p#‬‬
‫خروجی این پرس وجو به شکل زیر خواهد بود ‪:‬‬
‫‪sum1‬‬
‫‪P#‬‬
‫‪51000‬‬
‫‪P1‬‬
‫‪29000‬‬
‫‪P2‬‬
‫‪11000‬‬
‫‪P3‬‬
‫‪8000‬‬
‫‪p4‬‬
‫تذکر ‪ :‬نام ستون های دیدگاه به ترتیب با نام ستون های انتخاب شده در دستور ‪select‬‬
‫نظیر مشوند‪.‬‬
‫مثال ‪ :‬نام محصوالتی را بیابید که میزان کل فروش آنها بیشتر از ‪ 20000‬کیلوگرم‬
‫است‪.‬‬
‫با فرض وجود دیدگاه‪ ،PartSale‬تهیه این گزارش بسیار ساده خواهد بود ‪:‬‬
‫‪Select pname‬‬
‫‪From PartSale, P‬‬
‫‪where sum 1>20000 and ParstSale.p#=P.p#‬‬
‫‪Pname‬‬
‫تیرآهن‬
‫آرماتور‬
‫تذکر ‪ :‬می توان دیدگاهی را روی یک دیدگاه دیگر ساخت ‪.‬‬
‫مثال ‪ :‬دیدگاهی به نام ‪ PartSale2‬ایجاد کنید که شامل نام محصوالتی باشد که میزان‬
‫کل فروش آنها بیشتر از ‪ 20000‬کیلوگرم است‪.‬‬
‫)‪Create view PartSale2 (Pname1‬‬
‫‪As‬‬
‫‪Select pname‬‬
‫‪From PartSale, P‬‬
‫‪where partsale.sum 1>20000 and PartSale.p #=P.p#‬‬
‫‪Pname1‬‬
‫تیرآهن‬
‫آرماتور‬
‫حذف یک دیدگاه ‪:‬‬
‫قالب کلی ‪:‬‬
‫|نام دیدگاه ‪drop view‬‬
‫مثال ‪ :‬دیدگاه ‪ PartSale‬را حذف کنید‪.‬‬
‫‪Drop view PartSale‬‬
‫تذکر ‪ :‬با حذف دیدگاه ‪ ,PartSale‬دیدگاه‪ PartSale2‬نیز که روی آن‬
‫ساخته شده است به طور خودکار نابود می شود‪.‬‬
‫درج یک تاپل ‪:‬‬
‫قالب کلی ‪:‬‬
‫(مقادیر ویژگی ها)‪( values‬نام ویزگی ها) نام جدول ‪insert into‬‬
‫مثال ‪ :‬در جدول مربوط به تولید کنندگان‪ ،‬تولید کننده ای با کد "‪ "S5‬و نام‬
‫‘بهین مصالح’ اضافه کنید ‪:‬‬
‫(‘بهین مصالح’‪insert into S (s#,sname) values)’S5’,‬‬
‫اصالح یک تاپل (رکورد) ‪:‬‬
‫قالب کلی ‪:‬‬
‫‪ ,‬مقدار‪=1‬نام ویژگی‪ set 1‬نام جدول ‪update‬‬
‫[ شرط ‪ ,… ]where‬مقدار ‪ =2‬نام ویژگی‪,2‬‬
‫مثال ‪ :‬شهر کلیه تولید کنندگان را به شیراز تغییر دهید‪.‬‬
‫'شیراز'= ‪Update S set city‬‬
‫مثال ‪ :‬نام تولید کننده ‪S1‬را به 'بهین مصالح' وشهر را به 'شیراز' تغییر دهید‪.‬‬
‫‪' where s#=1‬شیراز'=‪' ,city‬بهین مصالح'= ‪update Sset sname‬‬
‫حذف تاپلها (رکوردها) ‪:‬‬
‫قالب کلی ‪:‬‬
‫[ شرط ‪ ]where‬نام جدول ‪delete from‬‬
‫مثال ‪ :‬کلیه تولید کنندگان را حذف کنید‪.‬‬
‫‪Delete from S‬‬
‫مثال ‪ :‬کلیه تولید کنندگان تهرانی را حذف کنید ‪.‬‬
‫'تهران '= ‪delete from S where city‬‬
‫دستورات کنترل داده ها ‪:‬‬
‫از دستورات ‪ DCL‬برای کنترل دسترس ی کاربران مختلف به داده‬
‫های پایگاه داده استفاده می شود‪ DBA .‬وظیفه دارد برای هر‬
‫کاربر یا گروه کاربران‪ ،‬نام کاربری و کلمه عبوری تعیین کرده‪،‬‬
‫مجوزهای آنها را برای ‪ DBMS‬تعریف کند‪.‬‬
‫‪ DBMS‬هر کاربر را با توجه به نام کاربری وی شناسایی کرده و‬
‫عملیات وی را کنترل می کند‪ .‬چنانچه عملی با مجوزهای کاربر‬
‫همخوانی نداشته باشد‪ DBMS ،‬از انجام آن سرباز می زند‪.‬‬
‫دستورات ‪ DCL‬عبارتند از ‪:‬‬
‫‪ -1‬دستور واگذاری مجوز‬
‫‪ -2‬دستور بازپس گیری مجوز‬
‫دستور واگذاری مجوز ‪:‬‬
‫‪ DBA‬وظیفه دارد پس از ایجاد پایگاه داده با توجه به حوزه اختیارات هر‬
‫کاربر‪ ،‬مجوزهای دسترس ی وی را برای ‪ DBMS‬تعریف کند‪.‬برخی از کاربران‬
‫این امکان را دارند که کلیه و یا قسمتی از مجوزهای خود را با سایر کاربران‬
‫سهیم شوند‪ .‬قالب کلی دستور واگذاری مجوز به شکل زیر است ‪:‬‬
‫چنانچه عبارت ‪ with grant option‬ذکر شود‪ ،‬کاربر یا کاربرانی که مجوزهایی‬
‫را دریافت می کنند به نوبه خود می توانند این مجوزها را با دیگران سهیم شوند‪.‬‬
‫مثال ‪ :‬فرض کنید کاربری با نام کاربر ‪ ali‬بخواهد مجوز خواندن کلیه‬
‫ستون ها و تغییر ستون ‪ sname‬و درج تاپل روی جدول ‪ S‬را با کاربری‬
‫بانام کاربری ‪ arash‬سهیم شود و به وی اجازه دهد این مجوزها را در‬
‫اختیارکاربران دیگر نیز قرار دهد‪ .‬در این صورت ‪ ali‬با نام کاربری و کلمه‬
‫عبور خود وارد سیستم شده‪ ،‬دستور زیر را صادر می کند ‪:‬‬
‫‪Grant select, update (sname),‬‬
‫‪insert on S to arash with grant option‬‬
‫دستور بازپس گیری مجوز ‪:‬‬
‫کاربرانی که مجوزهایی را در اختیار کاربران دیگر قرار داده اند‪،‬‬
‫می توانند همه یا تعدادی از مجوزها را از آنها باز پس گیرند‪.‬‬
‫فرض کنید کاربر ‪ A‬مجوزهایی را در اختیار کاربر ‪ B‬و کاربر ‪ B‬نیز‬
‫این مجوز ها را در اختیار کاربران ‪ C‬و‪ D‬قرار داده باشد‪ .‬در این‬
‫صورت چنانچه کاربر ‪ A‬مجوزها را از کاربر ‪ B‬پس بگیرد‪،‬‬
‫کاربران ‪ C‬و‪ D‬نیز این مجوزها را از دست خواهند داد‪.‬‬
‫قالب کلی دستور بازپس گیری مجوز به شکل زیر است ‪:‬‬
‫مثال ‪ :‬فرض کنید کاربری با نام کاربری ‪ ali‬بخواهد مجوز تغییر‬
‫ستون ‪ sname‬از جدول ‪ S‬را از کاربری به نام کاربری ‪arash‬‬
‫پس بگیرد‪ .‬در این صورت ‪ ali‬با نام کاربری و کلمه عبور خود‬
‫وارد سیستم شده‪ ،‬دستور زیر را صادر می کند‪:‬‬
‫‪Revoke update (sname) on S from arash‬‬