4 فایل پیوست
آموزش SQL Server از صفر تا صد
با سلام در این پست قصد دارم SQL Server را از صفر تا صد آموزش بدم. اگر سوالی داشتین بپرسین. تا جایی که سوادم برسه در خدمتم.
ابتدا برنامه Microsoft SQL Server Management Studio را اجرا می نماییم و با یکی از روشهای اتصال به Server وصل می شویم. کلیک بر روی Connect.
SQL Server داراي چهار پايگاه داده سيستمي tempdb, model, master و msdb و يك يا چند پايگاه داده مربوط به كاربران است. برخي از سازمان ها فقط داراي يك پايگاه داده كاربر هستند كه شامل تمام داده هاي آنها است. برخي از سازمان ها نيز داراي پايگاه هاي داده مختلفي براي هر گروه در سازمان هستند. به عنوان مثال، يك سازمان مي تواند يك پايگاه داده براي فروش، يك پايگاه داده براي حقوق و يك پايگاه داده براي مديريت اسناد داشته باشد.
لازم نيست كه چند نسخه از SQL Server را اجرا كنيد تا كاربران بتوانند به پايگاه هاي داده يك سرويس دهنده دسترسي يابند. SQL Server قادر به جوابگويي به هزاران كاربر در پايگاه هاي داده مختلف به طور همزمان بر روي يك سرويس دهنده مي باشد. SQL Server تمام پايگاه هاي داده موجود در سرويس دهنده را براي تمام كاربراني كه به سرويس دهنده متصل هستند، با توجه به جوازهايشان قابل دسترسي مي سازد.
هنگام اتصال به SQL Server ، اتصال شما با يك پايگاه داده مشخص روي سرويس دهنده در ارتباط مي باشد. اين پايگاه داده، پايگاه دادة جاري ناميده مي شود. شما معمولاً به پايگاه داده اي كه به عنوان پيش فرض توسط مدير سيستم تعريف شده است متصل هستيد مگر اين كه با استفاده از گزينه هاي اتصال API هاي پايگاه داده، پايگاه داده ديگري را مشخص كنيد.
اجزاء منطقي پايگاه داده
داده هاي درون يك پايگاه داده SQL Server در چند شيء مختلف ذخيره شده اند. اين شيء ها پس از اتصال به پايگاه داده، براي كاربر قابل رؤيت هستند.
در SQL Server اجزاء زير به صورت شيء تعريف شده اند :
محدوديت ها جدول ها
پيش فرض ها Trigger ها
شاخص ها نوع هاي داده اي تعريف شده توسط كاربر
كليدها ديدها
رويه هاي ذخيره شده
نوع هاي داده اي و ساختار جدول
تمام داده هاي پايگاه داده SQL Server در شيء هايي به نام جدول قرار دارند. هر جدول دلالت بر شيء اي دارد كه براي كاربر با معنا مي باشد. به عنوان مثال، در يك پايگاه داده مدرسه، جدول ها مي توانند جدول كلاس، جدول معلم و جدول دانش آموز باشد.
جدول هاي SQL Server داراي دو جزء اساسي هستند :
- • ستون : نشان دهنده بعضي از صفت هاي شيء اي است كه توسط جدول مدل سازي شده است.
- • سطر : نشان دهنده نمونه اي از يك شيء است كه توسط جدول مدل سازي شده است.
ميدان، مجموعه اي از تمام مقادير مجاز در يك ستون است. به عنوان مثال، ميدان رنگ قطعه هم شامل نوع داده اي مانند char(6) و هم شامل رشته هاي كاراكتري مجاز در ستون مانند Green, Blue, Red و غيره است.
جدول ها، كنترل هاي متعددي دارند كه صحت داده ها را تضمين مي كنند. به عنوان مثال، مي توانيد پايگاه داده اي به نام MyCoDb براي مديريت داده هاي شركت خود ايجاد كنيد. مي توانيد جدولي به نام Employees براي ذخيره اطلاعات كارمندان ايجاد كنيد. جدول مي تواند ستون هايي به نام ؟؟؟ داشته باشد. مي توانيد رويه اي به نام ؟؟ ايجاد كنيد تا مقادير داده اي مربوط به يك كارمند جديد را دريافت كرده و عمليات مربوط به درج سطر در جدول Employees را انجام دهد.
ستون ها مي توانند مقادير NULL را قبول كرده و يا رد نمايند. NULL يك مقدار ويژه در پايگاه داده است كه مفهوم" مقدار ناشناخته" را در بر دارد. NULL با مقادير جاي خالي يا صفر تفاوت دارد. جاي خالي در واقع يك كاراكتر مجاز و صفر يك عدد مجاز است در حالي كه NULL صرفاً نشان دهنده اين باور است كه ما نمي دانيم اين مقدار چيست. NULL با رشته به طول صفر نيز تفاوت دارد.
SQL Server داده هاي مربوط به تعريف مشخصات سرويس دهنده و تمام جدول هاي خود را در مجموعه ويژه اي از جدول ها به نام جدول هاي سيستمي ذخيره مي كند. كاربران نبايد مستقيماً جدول هاي سيستمي را بهنگام سازي كرده و يا روي آنها پرس و جوهايي اجرا كنند. فقط SQL Server بايد در پاسخ به دستورات مديريتي كه توسط كاربران صادر مي شود به جدول هاي سيستمي ارجاع كند.
فایل پیوست 30590
ديدهاي SQL یا View ها
ديد را مي توان به عنوان يك جدول مجازي يا پرس و جوي ذخيره شده درنظر گرفت. داده هايي كه از طريق يك ديد قابل دستيابي هستند به عنوان يك شيء مجزا در پايگاه داده ذخيره نمي شوند. چيزي كه در پايگاه داده ذخيره مي شود يك دستور SELECT است. مجمموعه نتيجه دستور SELECT ، جدول مجازي حاصل از ديد را تشكيل مي دهد. از ديد براي انجام كارهاي زير استفاده مي شود :
- • محدود كردن كاربر به سطرهاي ويژه اي از يك جدول.
- • محدود كردن كاربر به ستون هاي ويژه اي از يك جدول.
- • الحاق ستون هايي از جدول هاي مختلف به طوري كه همانند يك جدول باشند.
- • بدست آوردن اطلاعات جمعي به جاي پرداختن به جزئيات.
جدول هايي كه دستور SELECT موجود در تعريف ديد به آنها ارجاع مي كند، جدول مبنا ناميده مي شوند. پس از تعريف ديد، مي توانيد همانند يك جدول به آن ارجاع كنيد. در تعريف ديد مي توان به يك ديد ديگر ارجاع كرد.
ديدهاي SQL Server قابل بهنگام سازي هستند در صورتي كه عمل بهنگام سازي فقط بر يكي از جدول هاي مبنايي كه توسط ديد ارجاع مي شود، تاثير داشته باشد.
رويه هاي ذخيره شده
رويه ذخيره شده، مجموعه اي از دستورات Transact-SQL است كه در يك طرح اجرايي كامپايل شده اند.
رويه هاي ذخيره شده به چهار طريق داده ها را باز مي گردانند :
1- پارامترهاي خروجي كه مي توانند داده يا يك متغير كرزر را باز گردانند.
2- كدهاي بازگشتي كه همواره مقادير صحيح هستند.
3- براي هر دستور SELECT درون رويه ذخيره يا رويه هاي ذخيره شده ديگري كه در اين رويه قرار دارند، يك مجموعه نتيجه بازي گرداند.
4- كرزر عمومي كه نمي تواند خارج از رويه ذخيره شده ارجاع شود.
نمونه اي از يك رويه ذخيره شده را در زير مشاهده مي كنيد :
فایل پیوست 30592فایل پیوست 30593
- - - Updated - - -
برنامه هاي كاربردي لازم نيست كه تمام دستورات SQL درون رويه را ارسال كنند . در عوض فقط يك دستور EXECUTE يا CALL كه شامل نام رويه و مقادير پارامتر ها است ارسال مي شود.
رويه هاي ذخيره شده كاربران را از جزئيات جدول هاي درون پايگاه داده بي نياز مي كنند. اگر مجموعه اي از رويه هاي ذخيره شده تمام كارهاي مورد نياز كاربران را پشتيباني كند كاربران هرگز مجبور نخواهند بود كه مستقيماً به جدول ها دسترسي يابند. يك نمونه از اين نحوه استفاده از رويه هاي ذخيره شده ، رويه هاي ذخيره شده سيستمي SQL Server است كه كاربران را از ارتباط مستقيم با جدول هاي سيستمي بي نياز مي كند. نام اين رويه هاي ذخيره شده با SP شروع مي شود. اين رويه هاي ذخيره شده تمام وظايف مديريتي لازم براي اجراي SQL Server را پشتيباني مي كند. در واقع، شما مي توانيد با استفاده از دستورات مديريتي Transact-SQL يا رويه هاي ذخيره شده سيستمي، SQL Server را مديريت نماييد و هرگز نياز نخواهيد داشت كه مستقيماً جدول هاي سيستمي را بهنگام سازي كنيد.
اجراي يك رويه ذخيره شده در پروژه های پایگاه داده SQL Server بهتر از اجراي يك دستور SQL مي باشد زيرا لازم نيست SQL Server به طور كامل يك طرح اجرا را كامپايل نمايد و فقط بايد بهينه سازي طرح ذخيره شده رويه را تكميل نمايد.
SQL Server داراي رويه هاي ذخيره شده موقت نيز مي باشد كه هنگام قطع اتصال حذف مي شوند. رويه هاي ذخيره شده موقت در tempdb ذخيره مي شوند. از اين رويه ها بيشتر در مواقعي استفاده مي شود كه برنامه هاي كاربردي، دستورات SQL-Transact پويا توليد مي كنند و چندين بار اجرا مي شوند. به جاي اين كه دستورات SQL Server چند بار كامپايل شوند، مي توان يك رويه ذخيره شده ايجاد كرد كه در اولين اجراي خود كامپايل شده و سپس طرح از پيش كامپايل شده چندين بار اجرا شود. استفاده بيش از حد از رويه هاي ذخيره شده موقت، منجر به ايجاد تداخل در جدول هاي سيستمي tempdb مي شود.
- - - Updated - - -
مقادير قابل قبول انواع داده
مقادير عددی
مقادير اعداد صحيح از 63^2- تا1-63^2 bight
مقادير اعداد صحيح از 31^2- تا 1-31^2 Int
مقادير اعداد صحيح از 15^2- تا 1-15^2 Smallint
مقادير اعداد صحيح از 0 تا 255 Tinyint
مقادير اعداد صحيح با ارزش 0 و 1 bit
مقادير مقياس با دقت ثابت شده از 1+38^10 تا 1-38^10 decimal
مقادير Decimal همچنين مي تواند تعريف شود به صورتNumeric ، دامنه مقادير يكسان مي باشد.
مقادير Monetary (مالي) از 63^2- تا 1-63^2 (مقادير Money تا 0.0001 از هرواحد دقت دارد). Money
مقاديرMonetary از 3648 . 748 . 214- تا 3647 . 748 . 214 مي باشد Smallmoney
(مقادير Small Monetary تا 0001/0 واحد دقيق مي باشد).
مقادير صحيح شناور (متغير) از 308+E1.79- تا 308+E1.79 (مقادير Float فقط تقريبي مي باشد) Float
مقادير صحيح شناور متغير از 38+E3.40- تا 38+E3.40 مي باشند (مقادير real فقط تقريبي مي باشد) real
مقادير تاريخ و زمان از 1.1753 ژانويه تا 31.9999 دسامبر مي باشد datetime
(مقادير Date Time تا 3 هزارم ثانيه يا 3.33 ميلي ثانيه دقت دارد) Smalldatedtime
مقادير تاريخ و زمان از 1 ژانويه و 1900 تا 6 ژوئن و 2079 مي باشد (مقاديرSmalldatetime تا 1 دقيقه دقت دارند)
مقادير کاراکتری
مقادير حرفي كدگذاري نشده با طول ثابت با طول حداكثر 8000 حرف مي باشد. Char
مقادير حرفي كدگذاري نشده با طول متغير با طول حداكثر 8000 حرف مي باشد. Varchar
داده كدگذاري شده با طول متغير با طول حداكثر 1-31^2 (647 . 741 . 073 . 1) حرف مي باشد. Text
داده كدگذاري شده با طول ثابت با طول حداكثر 4000 حرف مي باشد Nchar
داده كدگذاري نشده با طول متغير با حداكثر طول 4000 حرف مي باشد nvarchar
داده كدگذاري شده با طول متغير با حداكثر طول 1-30^2 (823 . 741 . 073 . 1) حرف مي باشد ntext
مقادير باينری (1 و 0)
داده باينري با طول ثابت با حداكثر طول 8000 بايت مي باشد binary
داده باينري با طول متغير با حداكثر طول 8000 بايت مي باشد Varbinary
داده باينري با طول متغير با حداكثر طول 1-31^2 (647 . 783 . 147 . 2) بايت مي باشد Image
مقادير ديگر
يك مرجع مبناء براي يك Cursor مي باشد (يكCursor يك ماهيتي است كه يك مرجع مبناء را براي يك سطر مشخص در يك Result Set نشان مي دهد. Cursor
يك شمار واحد پايگاه داده است كه به هنگام مي شود هر زماني كه يك سطر به هنگام شود. (نوع داده rowversion در نسخه قبلی از Timestamp SQL Server ناميده می شود) rowversion
مقاديري از هر نوع غير از text ، ntext ، rowversion (timestamp) و sql - variant می باشد. يك معرف واحد کلي GUID مي باشد. Uniqveidentifier
guid
Guid که از GloballyUniqueIdentifier گرفته شده، يک مقادير باينری (1 و 0) 16 بايتی می باشد که هيچ کامپيوتر ديگری در دنيا نخواهد مقدار آن را توليد کند. نوع داده uniqueidentifier برای ذخيره کردن Guids استفاده می شود. SQL Server به طور خودکار مقادير Guid را از همان راهی که مقادير Identity ايجاد می شود، فراهم نمی کند. زيرا يک جدول می تواند شامل Guids چندگانه باشد، اما فقط يک Identity منحصر به فرد باشد. اگر چه، تابع NEWID که SQL Server آن را به صورت پيش فرض در نظر می گيرد زمانی که خصوصيات IsrowGuid ، Yes می شود. يک Guid جديد بر خواهد گشت زمانی که سطر قرار داده می شود.
ايجاد کردن ستونهای محاسباتی
علاوه بر اينکه ستونها به طرز ساده اطلاعات را در جداول Underlying و نماها نشان می دهد، همچنين Query تان می تواند شامل ستونهايی باشد که محاسبه شده اند بر اساس داده های Underlying ، توابع SQL Server يا هر ترکيب دوتايی. ستون محاسباتی به وسيله مشخص کردن يک عبارت به عنوان ستون ايجاد می گردد.
ما به عبارات Transact-SQL در Detail در درس 21 "The Transact-SQL Language" می پردازيم. بنابراين در اين تمرين ما فقط يک جفت از عبارات ساده که بر اساس اپراتور الحاق رشته Transact-SQL که دو رشته و تابع GETDATE را که داده ها و زمان سيستم جاری را باز می گرداند اضافه می کنيم.
ايجاد کردن يک ستون محاسباتی با استفاده از قاب Grid
1- قاب SQL را پنهان کرده و قابGrid را به وسيله کليک کردن دکمه روی نوار ابزار Query Designer نشان می دهيم.
2- در هر سل ستون خالی در قاب Grid کليک کرده و Oil Name +' – '+ Latin Name را تايپ می کنيم.
راهنمايی: شما می توانيد سل ها را در قاب Grid به وسيله درج کردن خطوط تقسيم بين سر ستونها عريض تر سازيد.
3- کليد Tab را فشار می دهيم. SQL Server ، 1 Expr را به عنوان نام مستعار ستون پيشنهاد می دهد.
4- نام مستعار را برای Extended Name تغيير می دهيم.
5- دکمه Run را برای به کارگيری مجدد Query کليک می کنيم. Query Designer ستون جديد را در قاب Results نشان می دهد.
ايجاد کردن يک ستون محاسباتی با استفاده از قاب SQL
1- قاب Grid را پنهان کرده و قاب SQL را به وسيله کليک کردن دکمه ها روی نوار ابزار Query Designer نشان می دهيم.
2- GETDATE را به عنوان [ Today’s Data ] برای ليست ستون از شروط Select اضافه می کنيم.
راهنمايی: کاما را قبل از GETDATE فراموش نکنيد.
3- دکمه Run را در نوار ابزار Query Designer برای به کارگيری مجدد Query کليک می کنيم. SQL Server تاريخ جاری در هر سطر را نشان می دهد.
استفاده کردن از شرط Top n
زمانی که شما دستور Return Top را از منوی متن جدول انتخاب می کنيد. SQL Server شرط Top n را در پايين پوششها برای ايجاد صفحه نمايش در Query Designer استفاده می کند. علاوه بر اينکه يک شماره مشخصی از سطرها را مشخص می کنيد شما می توانيد همچنين يک درصد از سطرها را به وسيله استفاده کردن از شرط Top n Percent نشان دهيد. همان طوری که شما ممکن است انتظار داشته باشيد درصدی از سطرهای مشخص شده را باز می گردانيم.
نشان دادن سطرهای Top s
1- Top 5 را قبل از اولين کلمه در Column-List از شروط Select در قاب SQL اضافه می کنيم.
2- دکمه Run را در نوار ابزار Query Designer برای به کارگيری مجدد Query کليک می کنيم. SQL Server فقط 5 سطر اول را نشان می دهد.
نشان دادن Top 5 درصد از سطرها
1- کلمه Percent را بعد از Top 5 در قاب SQL اضافه می کنيم.
2- دکمه Run را در نوار ابزار Query Designer برای به کارگيری Query کليک می کنيم. SQL Server فقط 5 درصد اول از سطرها را در SQL Server نشان می دهد.
شرط WHERE
با استفاده از شرط اختياری WHERE از حالت SELECT شما می توانيد يک زير مجموعه از سطرها که باز گردانده می شوند را مشخص کنيد. برای مثال شما ممکن است بخواهيد فقط مشتريهايی که بيش از $1000 در 12 ماه قبل خرج کرده اند را ببينيد يا اينکه فقط نامهای Oil که با حرف R شروع می شوند را ببينيد. شما اين ملاکها را با استفاده از شرط WHERE مشخص خواهيد کرد.
- - - Updated - - -
شرط WHERE BASIC
Operator Meaning |
مساويست با =
بزرگتر از <
کوچکتر از >
بزرگتر يا مساويست با =<
کوچکتر يا مساويست با =>
مساوی نيست با <> |
کليد برای شرط WHERE يک ملاک انتخابی می باشد که مشخص می کند که کدام سطرها باز خواهند گشت. ساختار پايه ای از يک شرط WHERE ، WHERE می باشد. SQL Server يک حدود کاملی از اپراتورهای مقايسه ای را به طوری که در جدول B-1 نشان داده شده فراهم می سازد.
مشخص شده در شرايط WHERE می تواند يک ارزش دائمی باشد مانند Red"" يا 10000 يا
می تواند باشد يک عبارتی که يک ارزش مانند GETDATE. را باز گرداند. به طور شبيه ارزش می تواند دستی ساخته شوند با استفاده از تابعهای
Transact-SQL مانند LEFT که يک تعدادی از کاراکترهای مشخص شده از چپ يک رشته
را باز می گرداند
پاسخ : آموزش SQL Server از صفر تا صد
سلام. اگر امکان داره کمی در مورد نحوه ساخت تریگر و استرد پروسیجر توضیح بدین.
آموزش SQL Server از صفر تا صد بخش دوم
ويژگي مهمي كه باعث تفاوت بين DBMS و RDBMS ميگردد، آن است كه يك RDBMS از يك زبان مبتني بر مجموعهها استفاده ميكند. در اكثر RDBMS ها اين زبان، زبان SQL است. در نتيجه SQL زبان مبتني بر مجموعهها است.
SQL، يك زبان كامپيوتري مبتني بر استاندارد (American National Standards Institute) ANSI براي بازيابي و بروز رساني دادهها در يك پايگاه دادهاي ميباشد و با برنامههاي پايگاه دادههايي مانند MS Access ، DB2 ، MS SQL Server ، Oracle، Sybase و ... كار ميكند.
از طريق SQL، يك برنامه نويس يا گرداننده دادهها ميتواند كارهاي زير را انجام دهد:
- تغيير ساختار يك پايگاه دادهاي
- تغيير مشخصات امنيتي سيستم
- امكان اعطاي اجازه دسترسي كاربران به پايگاه دادهاي يا جداول
- پرس و جو از يك پايگاه دادهاي
استفاده از SQL و پايگاه دادهاي رابطهاي نيز از مهمترين اقدامات انجام شده در جهت توسعه كاربرد Client/Server ميباشد.
SQL بطور كلي شامل دو گروه از جملات ميباشد:
1- جملات پردازش دادهها (DML)
2- جملات تعريف دادهها (DDL)
جملات پردازش دادهها (DML) شامل عبارات زير ميباشند:
مهمترين عبارات DDL در SQL نيز عبارتند از:
کد:
ALTER TABLE
DROP TABLE
CREATE INDEX
DROP INDEX
CREATE VIEW
DROP VIEW
در بخشهاي بعد بطور كاملتر اين دستورات توضيح داده خواهند شد.
دستور SELECT
قاعده نگارش را با دستور SELECT شروع ميكنيم زيرا اكثر جملات با SELECT شروع ميشوند. اين دستور كه دستوري مستقل نيست و حتما بايد با اجزايي بكار رود، جهت ساخت پرس و جو بر روي بانك اطلاعاتي بكار ميرود و ركوردهايي را كه با شرايط اين دستور همخوان باشد، به عنوان نتيجه پرس و جو برميگرداند.
توجه ـ هرگاه SELECT استفاده ميشود حتما بايد از شبه جملات FROM نيز استفاده شود.
انتخاب تمام ستونها:
کد:
SELECT * FROM table_name
انتخاب ستونهاي خاص:
کد:
SELECT column_name(s)
تذكر ـ در بعضي از نرمافزارهاي SQL علامت سميكولن (;) در انتهاي جمله به مفسر ميگويد كه پرس و جو تمام شده است. به عنوان مثــال SQL*plus اوراكل، پرس و جويي را اجرا نميكند تا زمانيكه يك سميكلون (يا يك اسلش (/)) را پيدا نكند. در حالي كه بعضي ديگر از نرم افزارهاي SQL از سميكلون به عنوان انتهاي يك جمله SQL استفاده نميكنند. به عنوان مثــال پرس و جو در مايكروسافت نيازي به تمام كننده ندارد زيرا پرس و جو در جعبه ويرايش تايپ ميشود و وقتي دكمهاي را فشار دهيم اجرا ميگردد.
پرس و جو با استفاده از DISTINCT
برخي اوقات در جداول بعضي از اقلام دادهاي تكرار ميشون. اگر آنچه نياز داريم آن است كه بدانيم چه مقادير متفاوتي در يك ستون وجود دارند، از دستور زير استفاده ميكنيم:
کد:
SELECT DISTINCT column_name(s)
اين جمله اقلام دادهاي تكراري در ستون مورد نظر را حذف ميكند. به عبارت ديگر DISTINC باعث محدود شدن نتايج خروجي ميشود به شكلي كه دادههاي تكراري در جواب ظاهر نميشوند.
پاسخ : آموزش SQL Server از صفر تا صد
با سلام اگر امکان داره در مورد ساختار های نمایش تابع GetDate در SQL Server کمی توضیح بدین!
آموزش SQL Server از صفر تا صد بخش سوم
عبارات
يك عبارت يك مقدار را برميگرداند. از نقطه نظر نوع داده، عبارت انواع متفاوتي دارد مثل رشته، عدد و بولين. در واقع هر چيزي پس از شبه جمله (بطور مثــال SELECT يا FROM) بيانگر يك عبارت است. در مثــال زير amount يك عبارت است كه مقدار ستون omount را بر ميگرداند:
کد:
SELECT amount FROM checks
شرايط
اگر بخشي از اقلام يا گروهي از اقلام را در پايگاه اطلاعاتي بخواهيم، به يك يا چند شرط احتياج دارد. شرايط در داخل شبه جمله WHERE ميآيند.
شرايط' امكان پرس و جوهاي انتخابيتر را ميدهند. در متداولترين فرم آنها، شرايط از يك متغير، يك مقدار ثابت و يك عملگر مقايسهاي تشكيل ميشوند.
قاعده نگارش شبه جمله WHERE :
کد:
SELECT column_name(s)
FROM table_name
WHERE condition
عملگرها
عملگرها عناصري هستند كه براي بيان چگونگي شرايط مورد نظر جهت استخراج دادهها در داخل يك عبارت استفاده ميشوند. عملگردها به 6 گروه تقسيم ميشوند: رياضي، مقايسهاي، كاراكتري، منطقي، مجموعهاي و متفرقه.
• عملگرهاي رياضي
عملگردهاي رياضي عبارتند از: جمع (+)، تفريق (-)، ضرب (*)، تقسيم (/) و باقيمانده صحيح (% يا MOD).
• عملگردهاي مقايسهاي
عملگرهاي مقايسهاي، عبارات را مقايسه نموده و يكي از اين سه مقدار را بر ميگردانند: صحيح (True)، غلط (False) يا ناشناخته (Unknown).
در فرهنگ اصطلاحات پايگاه دادهها، هيچ (NULL) به معناي عدم حضور داده در يك فيلد است. اما بدين مفهوم نيست كه فيلد داراي مقدار صفر يا بلانك (blank) است. صفر يا بلانك يك مقدار است در حاليكه هيچ يعني آن فيلد چيزي ندارد.
اگر مقايسهاي مثل field=9 را انجام دهيم و بدانيم تنها مقدار قابل قبول براي آن فيلد هيچ است، آنگاه نتيجه مقايسه ناشناخته است. چون ناشناخته يك شرط نامناسب است، نسخههاي مختلف SQL ، مقدار ناشناخته را با مقدار غلط جايگزين مينمايند و عملگر خاص IS NULL را براي آزمايش شرط NULL ارائه ميدهند.
عملگرهاي مقايسهاي عبارتند از: مساوي (=)، بزرگتر از (> ) ، بزرگتر يا مساوي با (=>)، كوچكتر از (<)، كوچكتر يا مساوي با (=<) و نامساوي (= ! يا < >).
توجه ـ براي پيدا كردن مقادير فيلدهاي كاراكتري بايد از علامت كوتيشن در طرفين مقدار مورد نظر استفاده شود. فيلدهاي عددي نيازي به استفاده از علامت كوتيشن ندارند.
تذكرـ گرچه قاعده نگارش SQL به حروف بزرگ و كوچك حساس نيست، اما دادهها آن حساس ميباشند. اكثر شركتها ترجيح ميدهند كه اطلاعات را به شكل حروف كوچك ذخيره كنند تا بدين وسيله جامعيت دادهها را تأمين نمايند. پيشنهاد ميشود كه همه دادهها يا بصورت حروف بزرگ و يا بصورت حروف كوچك ذخيره شوند. تركيب حروف بزرگ و كوچك احتمالا موجب بروز مشكلاتي در بازاريابي دقيق دادهها خواهد شد.
توجه ـ حروف بزرگ معمولا قبل از حروف كوچك ذخيره ميشوند (ارزش كاراكتري حروف بزرگ كمتر از حروف كوچك است).
• عملگردهاي كاركتري
از عملگردهاي كاراكتري براي پردازش رشتههاي كاراكتري استفاده ميشود (هم در خروجي دادهها و هم به منظور گذاشتن شرطي روي دادههايي كه بايد بازيابي گردند.)
عملگر LIKE
گاهي اوقات ميخواهيم بخشي از اطلاعات پايگاه دادهها را كه داراي الگوي خاصي است ولي كاملا يك داده خاص را نميپوشاند، انتخاب و بازيابي نماييم. يك روش طولاني و خسته كننده آن است كه الگوي مورد نظر را در حالات مختلف ممكن در سرتاسر پايگاه دادهها به همراه علامت = استفاده كنيم. راه حل بعدي استفاده از LIKE است.
کد:
SELECT coumn_name FROM table_name
WHERE column_name LIKE pattern
مثــال/
کد:
SELECT * FROM customers
WHERE LastName LIKE 'S%'
با استفاده از عبارت فوق، ركورد تمام مشترياني كه نام خانوادگي آنها با حرف S شروع ميشود به عنوان خروجي، برگردانده خواهد شد.
تذكر ـ از علامت % ميتوان در ابتدا، انتها و يا در هر دو طرف الگو (pattern) استفاده كرد.
اگر بخواهيم دادههايي را پيدا كنيم كه يك يا چند كاراكتر از آن را در اختيار داريم، بايد از نوع ديگري از wildcard، يعني underscore (_ ) استفاده كنيم.
مثــال/
کد:
SELECT * FROM friends
Where phone LIKE '223_5_8_'
همچنين ميتوان از تركيب اين دو Wildcard نيز استفاده كرد.
مثــال/
کد:
SELECT * FROM customers
WHERE LastName LIKE '_b% '
با استفاده از اين مثــال تمام ركوردهايي كه دومين كاراكتر نام خانوادگي آنها b است، پيدا ميشوند.
پاسخ : آموزش SQL Server از صفر تا صد
لطفا ساختار دستور GetDate
آموزش SQL Server از صفر تا صد بخش چهارم
عملگر «: عملگر» (لوله مضاعف) دو رشته را به هم متصل ميكنند.
تذكر ـ بعضي از نسخههاي SQL جهت اتصال از علامت جمع استفاده ميكنند.
• عملگرهاي منطقي
عملگرهاي منطقي، دو يا چند شرط را در شبه جمله WHERE از يك جمله SQL جدا ميكنند.
عمگر AND : دو عبارت منطقي را تركيب ميكند. بايد هر دو شرط داده شده در طرفين AND صحيح باشند تا نتيجه AND صحيح گردد. اگر يكي از شروط در طرفين AND غلط باشد، نتيجه AND غلط ميگردد.
کد:
SELECT column_name(s)
FROM table_name
WHERE conditionl AND condition
عملگر OR : از OR براي ارتباط شروط استفاده ميشود. كافي است كه يكي از شرطهاي دو سمت OR صحيح باشد تا نتيجه OR صحيح گردد و در صورتي نتيجه OR غلط است كه هر دو شرط دو سمت OR غلط باشند.
کد:
SELECT column_name(s)
FROM table_name
WHERE conditionl OR condition2
عملگر NOT : شرط داده شده را منفي ميكند. به عبارتديگر اگر شرط داده شده قبل از NOT غلط باشد، بعد از اعمال NOT صحيح ميشود و بالعكس.
NOT همچنين ميتواند با عملگر IS زمانيكه از NULL استفاده ميكنيم، همراه شود.
• عملگرهاي مجموعهاي
عملگرهاي UNION و UNION ALL :
UNION، اجتماع دو مجموعه پرس و جو را بدون تكرار برميگرداند.
UNION ALL نيز شبيه UNION ميباشد بجز آنكه تكراريها را حذف نميكند.
کد:
SQL STATEMENT 1
UNION/UNION ALL
SQL STATEMENT 2
عملگر INTERSECT : ركوردهايي را برميگرداند كه در هر دو پرس و جو وجود داشته باشند (مشترك باشند).
کد:
SQL STATEMENT 1
INTERSECT
SQL STATEMENT 2
عملگر MINUS : كليه رديفهايي را ه در پرس و جوي اول هستند ولي در پرس و جوي دوم نيستند، برميگرداند.
SQL STATEMENT 1
MINUS
SQL STATEMENT 2
• عملگرهاي ديگر
عملگر IN : از عملگر IN هنگامي استفاده ميشود كه مقدار دقيق آنچه را كه ميخواهيم برگردانده شود، را بدانيم.
کد:
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value 1, value 2, …)
مثــال/
کد:
SELECTB * FROM customers
WHERE LastName IN (Hansen / Pettersen)
در مثــال فوق مشخصات مشترياني كه نام خانوادگي آنها Hansen و يا Pettersen ميباشد، برگردانده ميشود.
عملگر BETWEEN … AND :
عملگر BETWEEN … AND، بازدهاي از دادهها را كه بين د و مقدار موردنظر قرار دارند را برميگرداند. (مقادير موردنظر ميتوانند عدد، متن و يا تاريخ باشند).
تذكر ـ نتيجه عملگر BETWEEN … AND در پايگاه دادههاي مختلف متفاوت است. در بعضي از پايگاه دادهها، BETWEEN … AND تنها مقاديري را كه بين دو مقدار موردنظر قرار دارند، برميگرداند. در بعضي از پايگاه دادهها مقاديري كه بين دو مقدار موردنظر قرار دارند و شامل آن مقادير نيز ميباشند، برگردانده ميشوند و در برخي ديگر مقادير بين دو مقدار موردنظر به همراه يكي از مقادير سمت چپ و يا سمت راست به عنوان نتيجه برگردانده ميشوند.
پاسخ : آموزش SQL Server از صفر تا صد
ببخشین علت اینکه بعضی وقتها سرعت select کم میشه چیه؟
1 فایل پیوست
آموزش SQL Server از صفر تا صد بخش پنجم
توابع
استفاده از توابع SQL اين امكان را ميدهد تا كارهاي خارقالعادهاي مثل جمع يك ستون يا تغيير تمام كاراكترهاي يك رشته به حروف بزرگ را انجام دهيم.
توابع، بطور قابل ملاحظهاي توانايي ما را در پردازش اطلاعاتي كه بازيابي ميكنيم، با استفاده از توابع اوليه SQL بالا ميبرد.
کد:
SELECT function (column)
FROM table – name
WHERE condition
توابع جمعي
اين توابع گاهي اوقات تحت عنوان توابع گروهي ناميده ميشوند. نتيجه اين توابع مقداري است كه از مقادير يك ستون حاصل ميشود.
توجه ـ نميتوان از توابع جمعي (گروهي) در شبه جمله WHERE استفاده كرد.
COUNT : اين تابع تعداد رديفهايي را برميگرداند كه شرايط موجود در جلوي شبه جمله WHERE را تامين ميكنند.
SUN : اين تابع مجموع مقادير يك ستون عددي را برميگرداند.
AVG : تابع AVG ميانگين يك ستون را محاسبه ميكند.
AVG نيز مانند تابع SUN فقط براي فيلدهاي عددي بكار ميرود.
MAX : اين تابع بزرگترين مقدار يك ستون را پيدا ميكند.
تابع MAX هم با اعداد كار ميكند و هم با رشتههاي كاراكتري.
MIN : تابع MIN شبيه تابع MAX است با اين تفاوت كه كوچكترين مقدار يك ستون را برميگرداند. اين تابع نيز هم با اعداد كار ميكند و هم با رشتههاي كاراكتري.
VARIANCE : مربع انحراف استاندارد را نشان ميدهد كه عددي حياتي براي بيشتر محاسبات آماري است. اين تابع از توابعي است كه فقط با فيلدهاي عددي كار ميكند.
STDDEV : اين تابع مقدار انحراف استاندارد يك ستون از اعداد را پيدا ميكند.
اين تابع نيز تنها با فيلدهاي عددي كار ميكند و وقتي با رشته كاركتري مواجه ميشود، يك پيغام اشتباه ميفرستد.
توابع تاريخ و زمان
ما در تمدني زندگي ميكنيم كه توسط زمان و تاريخ اداره ميشود و بيشتر كاربردهاي SQL داراي توابعي براي فايق آمدن بر اين مفاهيم هستند.
تذكر ـ اين توابع از نوع داده Date استفاده ميكنند.
ADD – MONTHS : اين تابع تعدادي ماه به تاريخ مشخصي اضافه ميكند. بطور مثــال ممكن است مطلب فوقالعادهاي اتفاق افتاده باشد و پروژهاي براي مدت دو ماه متوقف شده باشد و حالا اگر بخواهيم برنامهريزي جديدي ارائه دهيم، از اين تابع استفاده ميكنيم.
LAST – DAY : اين تابع، آخرين روز يك ماه بخصوص را پيدا ميكند.
MONTHS – BETWEEN : اگر بخواهيم بدانيم كه چند ماه بين ماههاي x و y قرار ميگيرد، از اين تابع استفاده ميكنيم. اين تابع به ترتيب قرار دادن ماهها حساس است بنابراين بطور مثــال ميتوان از يك نتيجه منفي براي تعيين اينكه آيا تاريخي قبل از تاريخ ديگري اتفاق افتاده است يا نه، استفاده كرد.
NEW – TIME : اگر بخواهيم زمان را براساس زمان منطقهاي تطبيق دهيم، بايد از اين تابع استفاده كنيم. در جدول صفحه بعد، زمان مناطق موردنظر كه با اين تابع قابل استفاده هستند، آورده شده است:
توابع رياضي
بسياري از اطلاعات كه از پايگاه دادهها بازيابي ميكنيم نياز به محاسبات رياضي دارند. نمونههايي از توابع رياضي عبارتند از: ABS, CEIL, DLOOR, SIN, COS, TAN, SINH, COSH, EXP, LN, LOG, MOD, POWER, SIGN, SQRT, و ...
توابع كاراكتري
بسياري از نسخههاي SQL امكان استفاده از توابع كاراكتري و رشتهاي را فراهم ميآورند.
CHR : اين تابع، كاراكتر معادل عدد داده شده در آرگومان را برميگرداند. كاراكتري كه برگردانده ميشود بستگي به مجموعه كاراكترهاي پايگاه داده مورد استفاده (مثلاً ASCII و ...) دارد.
CONCAT : اين تابع همان عمل عملگر || را انجام ميدهد. (دو رشته را به هم متصل ميكند).
INITCAR : اين تابع اولين حرف يك كلمه را به حرف بزرگ و ساير حروف كلمه را به حروف كوچك تبديل ميكند.
LOWER : اين تابع تمام كاراكترها را به حروف كوچك تبديل ميكند.
UPPER : اين تابع عكس تابع LOWER عمل ميكند. (تمام كاراكترها را به حروف بزرگ تبديل ميكند).
RPAD , LPAD : حداقل 2 و حداكثر 3 آرگومان رشته كاراكتري است كه عمليات روي آن انجام ميشود. آرگومان دوم، تعداد كاراكتري است كه بايد اضافه شود و آرگومان سوم كه اختياري نيز ميباشد، نشان دهنده كاراكتري است كه بايد اضافه شود. پيش فرض سومين آرگومان بلانك (blank) يا ميتواند يك كاراكتر تنها و يا رشتهاي از كاراكترها باشد.
RTRIM , LTRIM : حداقل يك و حداكثر دو آرگومان دارند. اولين آرگومان يك رشته كاراكتري است و دومين آرگومان كه اختياري نيز ميباشد يا يك كاراكتر است يا يك رشته كاراكتري و يا پيش فرضاش يك بلانك (blank) است. اگر از آرگومان دوم استفاده كنيم و بلانك نيز نباشد، توابع TRIM كاراكترها را مياندازند. (حذف ميكنند)
REPLACE : كاراكتري را به جاي كاركتر ديگري در يك رشته كاراكتري جايگزين ميكند. اين تابع سه آرگومان دارد. اولين آرگومان، رشته مورد جستجو را مشخص ميكند. دومين آرگومان كليد جستجو است و آخرين آرگومان، رشته جايگزين اختياري است. اگر سومين آرگومان نوشته نشود و يا بلانك (blank) درنظر گرفته شود، هر نمونه از كليد جستجو كه در داخل رشته جستجو ميشود، برداشته شده و به جاي آن چيزي جايگزين نميگردد. اگر آرگومان سوم را داشته باشيم، اين آرگومان به جاي هر نمونه از كليد جستجو در رشته موردنظر جايگزين خواهد شد. اگر دومين آرگومان خالي باشد، رشته موردنظر بدون تغيير باقي خواهد ماند.
SUBSTR : اين تابع سه آرگومان اين امكان را ميدهد كه قطعهاي از يك رشته را بتوان انتخاب نمود. اولين آرگومان، رشته موردنظر است. دومين آرگومان امكان اولين كاراكتر رشته را مشخص ميكند. سومين آرگومان تعداد كاراكتري را كه بايد انتخاب شود را نشان ميدهد. اگر در دومين آرگومان از عدد منفي استفاده كنيم، نقطه شروع با شمردن از انتها شروع ميشود. اگر آرگومان سوم را نداشته باشيم، باقيمانده رشته برگردانده ميشود.
TRANSLATE : اين تابع سه آرگومان دارد: رشته موردنظر، رشته FROM و رشته TO. عناصر رشته موردنظر كه در رشته FROM رخ ميدهد، به عناصر وابسته در رشته TO تبديل ميشود.
INSTR : با استفاده از اين تابع، محل وجود يك رشته كاراكتري در داخل رشتهاي ديگر مشخص ميشود. اولين آرگومان، رشته موردنظر ميباشد. آرگومان دوم، الگوي موردنظر است. سومين و چهارمين آرگومان اعدادي هستند كه شروع جستجو و تعداد كاراكتر مورد جستجو را نشان ميدهد.
تذكر ـ پيش فرض سومين و چهارمين آرگومان يك است. اگر سومين آرگومان منفي باشد، شروع جستجو از انتهاي رشته انجام خواهد شد.
LENGTH : اين تابع طول يك رشته كاراكتري را برميگرداند.
توابع تبديلي
اين توابع، راههاي سادهاي براي تبديل يك نوع داده به نوع ديگري از داده را ارائه ميدهند.
TO – CHAR : اين تابع، يك عدد را به كاراكتر تبديل ميكند.
توجه ـ ممكن است برخي از نسخههاي SQL از اين تابع جهت تبديل ساير انواع داده به نوع كاراكتري استفاده كنند (مثل Date به كاراكتر) و يا از فرمت ديگري براي اين تابع و آرگومانهاي آن استفاده نمايند.
TO – NUMBER : اين تابع يك رشته عددي را به يك عدد تبديل ميكند.
جملات پردازش دادهها
تا اين مرحله ياد گرفتيم كه چگونه دادهها را از پايگاه دادهاي با استفاده از دستور SELECT بازيابي كنيم. بعد از اينكه دادهها بازيابي شد، آن را ميتوانيم در يك برنامه كاربردي بكار برده و يا آن را تصحيح كنيم. جملات زير اين امكان را به ما ميدهند تا دادههاي داخل يك جدول پايگاه اطلاعاتي را پردازش كنيم:
- جمله INSERT (درج)
- جمله UPDATE (بهنگام سازي)
- جمله DELETE (حذف)
محصولاتي مثل اكسس، dBase IV يا فاكس پرو به شكل بسته نرمافزاري داراي ابزار مناسبي براي ورود، تصحيح و حذف ركوردهاي پايگاه دادهاي ميباشند. يكي از دلايلي كه SQL جملات پردازش دادهها را تهيه كرده است اين است كه SQL در درجه اول به همراه برنامههاي كاربردي استفاده ميشود و اين امكان را فراهم ميآورد تا با استفاده از ابزار كاربردي خود دادهها را تصحيح كنيد و برنامه نويس SQL نياز دارد كه دادهها را با استفاده از SQL به پايگاه دادهاي برگرداند. به علاوه، بيشتر سيستمهاي بزرگ پايگاه دادهها براي اين طراحي نشدهاند كه فقط ذهنيات طراح و برنامهنويس را دربرگيرند، بلكه اين سيستمها براي اين طراحي شدهاند كه در حجم بالا و در محيطهاي چند كاربره كار نمايند. طراحي اوليه در چنين سيستمهايي متكي به پرس و جوي بهينه و موتورهاي بازيابي دادههاست.
بيشتر سيستمهاي پايگاه دادهاي رابطهاي ابزاري براي صدور و ورود دادهها تهيه كردهاند. اين دادهها معمولا به شكل يك فايل متن محدود شدهاي ذخيره ميشوند. اغلب يك ساختار فايل ذخيره شده شامل اطلاعاتي درباره جدولي است كه وارد شده است. ابزاري مثل SQL * Loader در اوراكل BCP در SQL Seever، Import / Export در اكسس مايكروسافت.
NEXT – DAY : اين تابع نام اولين روز هفته كه مساوي با تاريخ بخصوصي است و يا بعد از تاريخ معيني ميآيد را بدست ميآورد.
SYSDATE : اين تابع تاريخ و زمان سيستم را برميگرداند.
- - - Updated - - -
درج دادهها با استفاده از جمله INSERT
جمله INSERT اين امكان را به ما ميدهد تا دادهها را وارد پايگاه دادهاي كنيم. اين جمله ميتواند به دو جمله تقسيم شود:
کد:
INSERT … VALUES
INSERT … SELECT
در يك ركورد با استفاده از INSERT … VALUES
نحوه نگارش جمله INSERT … VALUES دادهها را به داخل يك جدول به شكل يك ركورد درج ميكند. اين جمله براي عمليات كوچكي كه درگير چند ركورد است، مناسب ميباشد. نحوه نگارش اين جمله به شكل زير است:
کد:
INSERT INTO table – name (column – namel, column – name2, …)
VALUES (nalue1 , value2, …)
فرمت اصلي جمله INSERT … VALUES با استفاده از ستونهايي كه مشخص نمودهايم يك ركورد به جدول اضافه ميكند و مقادير مربوطه را به داخل اين ستونها اضافه مينمايد.
در هنگام استفاده از اين جمله سه قاعده را بايد در موقع اضافه نمودن دادهها به جدول درنظر بگيريم:
- 1) بايد نوع داده مقادير بكار رفته با نوع داده فيلدهايي كه اضافه شدهاند يكسان باشد.
- 2) اندازه دادهها بايد در قالب ستون گنجانده شوند. مثلا يك رشته 80 كاراكتري نميتواند در داخل يك ستون 40 كاراكتري اضافه شود.
- 3) مكان داده در VALUES بايد مطابق مكان ستوني باشد كه بايد داده به آن ستون اضافه شود. (يعني اولين مقدار بايد به داخل اولين ستون و دومين مقدار به دومين ستون و ... اضافه شود).
توجه ـ در جمله INSERT، در پروژه های SQL Server نام ستون الزامي نيست و اگر نام ستون قيد نشده باشد SQL مقادير را بر طبق شماره ستونهاي آنها قرار ميدهد. به عبارت ديگر، SQL اولين مقدار را در اولين ستون و دومين ستون را در دومين ستون و الي آخر درج ميكند.
کد:
INSERT INTO table – name
VALUES (value1, value2, …)
درج چندين ركورد با استفاده از جمله INSERT … SELECT :
جمله INSERT … SELECT هنگامي كاربرد دارد كه بخواهيم ركوردهاي زيادي را به يك جدول اضافه كنيم. در چنين حالتي جمله INSERT … SELECT خيلي مفيد است و اين امكان را به برنامه نويس ميدهد تا اطلاعاتي را از جدولي يا گروهي از جدولها به داخل جدول ديگر منتقل كند.
نحوه نگارش جمله INSERT … SELECT بصورت زير است:
کد:
INSERT INTO table – name (column – namel, column – name2, …)
SELECT column – namel column – name2, …
FROM table – name
WHERE seaech – condition
در جمله INSERT … SELECT قواعد زير وجود دارد:
- 1) جمله SELECT نميتواند رديفهايي از جدول را انتخاب كند كه در حال درج در آن هستيم.
- 2) تعداد ستونهاي جمله INSERT INTO بايد مساوي با تعداد ستونهاي برگشتي از جمله SELECT باشد.
- 3) نوعت دادهها در جمله INSERT INTO بايد مساوي با نوع دادههاي ستونهاي برگشتي از جمله SELECT باشد.
استفاده ديگر جمله INSERT … SELECT بازگرداندن جدولي است كه شما آن را حذف و يا ايجاد كردهايد. (تهيه Back Up)
کد:
SELECT *
INTO new – table – name
FROM original – table – name
و يا:
INSERT INTO new – table – name
SELECT *
FROM original – table – name
حال ميتوانيم تغييرات موردنظر را در جدول اصلي با خيالي راحت اعمال نماييم.
تغيير نوع دادههاي موجود با استفاده از جمله UPDATE
هدف از جمله UPDATE تغيير مقادير موجود ركوردهاست. نحوه نگارش اين جمله به شكل زير است:
کد:
UPDATE table – name
SET column – namel = new – valuel [ , column – name2 = new – value2, …]
WHERE search – condition
اين جمله شبه جمله WHERE را كنترل ميكند. براي تمام ركوردهاي جدول داده شده شبه جمله WHERE به مقدار TRUE ارزيابي ميشود و بهنگام ميگردد.
توجه ـ اگر شبه جمله WHERE را از جمله UPDATE حذف كنيم، تمام ركوردهاي داده شده با مقدار داده شده بهنگام ميشوند.
حذف اطلاعات به كمك جمله DELETE
علاوه بر اضافه كردن اطلاعات به پايگاه دادهاي، ميتوانيم آنها را از پايگاه اطلاعاتي حذف كنيم. نحوه نگارش حذف به شكل زير است:
کد:
DELETE FROM table – name
WHERE condition
حذف تمام سطرها:
کد:
DELETE FROM table – name
و يا:
کد:
DELETE * FROM table – name
بسته به استفاده از جمله WHERE در جمله DELETE، SQL ميتواند كارهاي زير را انجام دهد:
- ـ يك رديف را حذف كند.
- ـ چندين رديف را حذف كند.
- ـ تمام رديفها را حذف كند.
- ـ هيچ رديفي را حذف نكند.
در اينجا به چند نكته اشاره ميشود. وقتي از جمله DELETE استفاده ميكنيم:
- جمله DELETE نميتواند يك فيلد را حذف كند. (به جاي آن از UPDATE استفاده ميكنيم)
- جمله DELETE تمام ركورد را از يك جدول حذف ميكند.
توجه ـ شبه UPDATE, INSERT، حذف ركوردها از يك جدول ممكن است باعث بروز مشكلات جامعيت در داخل جداول ديگر گردد. اين مطلب مهم را وقتي در داخل يك پايگاه دادهاي مشغول تغيير هستيم، بايد درنظر داشته باشيم.
- با استفاده از جمله DELETE فقط ركوردها حذف ميشوند نه جدول. (از جمله DROP TABLE براي حذف كامل جدول استفاده ميكنيم)
توجه ـ شبيه جمله UPDATE، اگر از شبه جمله WHERE در جمله DELETE استفاده نكنيم، تمام رديفهاي جدول خاص حذف خواهد شد.
پاسخ : آموزش SQL Server از صفر تا صد بخش چهارم
------------------------------------------------------------------------------------------------------------
آموزش SQL Server از صفر تا صد بخش هفتم
ورود و صدور دادهها از منابع خارجي
جمله DELETE , UPDATE, INSERT در داخل يك برنامه پايگاه اطلاعاتي بسيار مفيد هستند. اين جملات به همراه جمله SELECT به عنوان پايهاي براي ساير عمليات پايگاه دادهاي به كار ميروند. گرچه SQL يك زبان ميباشد ولي راهي براي ورود و صدور دادهها به منابع دادههاي خارجي ندارد.
بطور مثــال فرض كنيد كه شركت شما ساليان سال است كه از نرمافزار dBase براي كاربردهاي خود از جمله برنامه حسابداری ، برنامه انبارداری ، برنامه مدیریت کتابخانه و برنامه های کاربردی دیگر استفاده ميكند. حال مديريت ميخواهد اين برنامههاي كاربردي را به كلاينت/ سرور تحت اوراكل تبديل كند. متاسفانه فايلهاي dBase موجود شامل هزاران ركورد است كه بايد به فرمت دادههاي پايگاه دادهاي اوراكل تبديل شود. قطعاً دستورات UPDATE, INSERT و DELETE بعد از اينكه پايگاه دادهاي اوراكل شما پر شد، به شما كمك خواهند كرد، اما شما بايد 300000 ركورد را دوباره تايپ كنيد. خوشبختانه اوراكل و ساير سازندگان نرمافزارها ابزاري تهيه كردهاند كه ميتواند در اين امر به شما كمك كند.
تقريباً تمام سيستمهاي پايگاههاي دادهاي اين امكان را ميدهند تا با استفاده از فرمت فايل متن ASCII دادهها را وارد و صادر كنيم. اما زبان SQL شامل اين امر نميشود و هنگامي كه يك پايگاه دادهاي خالي داريم خوب كار نميكند.
سيستمهاي پايگاه دادهاي مدرن ابزار مختلفي براي پردازش دادهها بكار گرفتهاند. بعضي از اين ابزار طراحان را قادر ميسازند تا دادهها را به منابع خارجي صادر يا وارد نمايند. اين امكان بخصوص وقتي اندازه پايگاه دادهاي بزرگ يا كوچك شود، مفيد است. به عنوان مثــال Personal Oracle 8, SQL Server, MS ACCESS شامل امكانات ت زيادي هستند كه از انتقال دادهها بين سيستمهاي مختلف حمايت ميكنند.
شبه جملات در پرس و جوهاي SQL
در اين بخش، شبه جملات و كاربرد آنها در جمله SELECT مورد بررسي قرار ميگيرد.
تعيين معياري با شبه جمله WHERE
همانطور كه گفته شد WHERE باعث ميشود تا پرس و جوهاي ما با محدود نمودن تعداد رديفهاي برگردانده شده در خروجي انتخابيتر شوند.
استفاده تنها از FROM, SELECT، باعث ميشود تا ما كنترلي روي رديفهاي بازگشتي جدول نداشته باشيم.
AS يك عملگر انتساب اختياري است كه يك نام مستعار را به نام يك ستون و يا نام يك جدول منتسب ميكند.
کد:
SELECT column – name AS column – alias FROM table – name
SELECT column – name FROM table – name AS table – alias
شبه جمله STARTING WITH
اين شبه عبارت شبه LIKE عمل ميكند. (جستجو در داخل يك رشته)
با استفاده از اين شبه جمله، ركوردهايي كه با pattern (الگوي) موردنظر شروع شده باشند برگردانده ميشوند.
مثــال/
کد:
SELECT payee, amount, remarks
FROM checks
WHERE payee STARTING WITH (Ca)
با استفاده از پرس و جوي فوق كليه ركوردهايي كه با Ca شروع ميشوند، برگرداند خواهند شد.
شبه جمله ORDER BY
گاهي اوقات ما نياز داريم كه نتيجه پرس و جوي ما بطور مرتب شده بدست آيد. SELECT FROM نيز به ما فهرستي مي دهد كه اين فهرست مرتب شده نيست مگر اينكه كليد اوليه معرفي كرده باشيم.
كلمه كليدي ORDER BY به منظور مرتب كردن نتيجه بكار برده ميشود. DESC در انتهاي شبه عبارت ORDER BY سطرها را براساس ترتيب نزولي مرتب ميكند. پيش فرض اين ترتيب، صعودي (ASC) است. به عبارت ديگر ترتيب صعودي (ASC) اختياري ميباشد (نتيجه قرار دادن و قرار ندادن آن يكي است)
کد:
SELECT column – name(S)
FROM table – name
ORDER BY column – name [ASC | DESC]
شبه جمله GROUP BY
SQL از تركيب ستون طبيعي و تابع جمعي ايراد ميگيرد. اين وضعيت نياز به شبه جمله GROUP BY دارد. GROUP BY تابع جمع آورده شده در جمله SELECT را براي هر گروه از ستوني كه در جلوي GROUP BY آمده است، اجرا ميكند. (سطرهاي هر ستون را برحسب نتيجه تابع جمعي بكار رفته شده مرتب ميكند)
اين عمل، SQL را بطور فزايندهاي مفيد ميكند.
GROUP BY همچنين مانند ORDER BY عمل ميكند و در ضمن با استفاده از اين شبه جمله ميتوان بيشتر از يك ستون را نيز گروهبندي كرد.
کد:
SELECT column – name l, SUM (column – name 2)
FROM table – name
GROUP BY column – name l
تذكر ـ به جاي SUM در syntax فوق ميتوان از ديگر توابع جمعي نظير COUNT, AVG, MAX, MIN و ... نيز استفاده كرد.
شبه جمله HAVING
با استفاده از اين شبه جمله ميتوان دادههاي مورد استفاده در شبه جمله FROUP BY را محدود كرد.
HAVING اين امكان را ميدهد كه ما از توابع جمعي در يك جمله مقايسهاي استفاده كنيم و در ضمن HAVING بر روي گروه اثر ميكند؛ در حاليكه WHERE روي رديفها اثر ميگذارد. HAVING با توابع غير جمعي نيز كار ميكند.
ميتوان بيش از يك شرط در شبه جمله HAVING بكار برد.
همچنين ميتوان از يك تابع جمعي در شبه جمله HAVING استفاده كرد كه در جمله SELECT وجود نداشته باشد.
کد:
SELECT column – name l, SUM (column – name 2)
FROM table – name
GROUP BY column – name l
HAVING SUM (column – name 2) condition value
ايجاد و نگهداري جداول
شروع كار با جمله ايجاد پايگاه دادهاي (CREATE DATABASE)
اولين قدم مديريت دادهها در هر پروژه پايگاه دادهاي، ايجاد پايگاه دادهها است. اين كار يك پايگاه دادهاي، بسته به احتياج ما و سيستم مديريت پايگاه دادهاي كه انتخاب كردهايم ميتواند محدودهاي از ساده تا پيچيده را دربرگيرد. بيشتر سيستمهاي مدرن امروزي اين امكان را به ما ميدهند تا كاملاً با استفاده از موس يك پايگاه دادهاي بسازيم. با استفاده از اين امكان در وقت صرفهجويي ميشود.
نحوه نگارش CREATE DATABASE شبيه زير است:
کد:
CREATE DATABASE database – name
اين نحوه نگارش از سيستمي به سيستم ديگر به طور قابل ملاحظهاي فرق ميكند. به هرحال تمام سيستمهاي مديريت پايگاه دادهاي رابطهاي (ROBMS) خيلي قوي و مشهور از اين دستور استفاده ميكنند.
راههاي ايجاد پايگاه دادهاي
نحوه نگارش جمله CREATE DATABASE در نسخههاي مختلف SQL تفاوت زيادي دارد. بسياري از SQLها از جمله CREATE DATABASE صرفنظر ميكنند و مستقيماً به سراغ جمله CREATE TABLE ميروند. چون قبل از اينكه جدولي ايجاد شود، ما بايد پايگاه دادهاي ايجاد كنيم، اين بخش روي بعضي از مفاهيمي كه يك طراح هنگام ساخت يك پايگاه اطلاعاتي تكيه ميكند، متمركز شده است. اولين مطلبي كه بايد درنظر گرفته شود، سطح دسترسي مجاز ميباشد. اگر از سيستم مديريت پايگاه دادهاي رابطهاي (RDBMS) استفاده كنيم كه از سطح دسترسي مجاز حمايت ميكند، بايد مطمئن باشيم كه امكان تنظيم سطح دسترسي مجاز را داريم و يا اينكه اداره كننده سيستم به ما اجازه CREATE DATABASE را اعطا كرده است. براي اطلاعات بيشتر راجع به اين موضوع بايد به مستندات RDBMS خود مراجعه كنيم. بيشتر RDBMDها همچنين اين امكان را به ما ميدهند تا يك اندازه پيش فرض براي پايگاه اطلاعاتي مشخص كنيم (معمولاً برحسب فضاي ديسك سخت (مثلاً مگابايت)). بنابراين ما نياز به دانستن اين مطلب داريم كه چگونه سيستم پايگاه دادهاي، دادهها را بر روي ديسك به اندازه موردنظر ذخيره ميكند. مسئوليت درنظر گرفتن اين فضا نيز به عهده اداره كنندگان سيستم ميباشد.
طراحي پايگاه دادهاي
طراحي يك پايگاه دادهاي مناسب براي موفقيت سيستم كاربردي اهميت فراواني دارد. بسياري از عوامل ممكن است در طراحي پايگاه دادهاي ما تأثير بگذارند، مثل:
امنيت
ميزان فضاي موجود روي ديسك
ميزان سرعت جستجو و بازيابي پايگاه دادهها
ميزان سرعت بهنگام سازي پايگاه دادهها
ميزان سرعت اتصال چند جدول براي بازيابي دادهها
حمايت RDBMS از جداول موقت
ميزان فضاي روي ديسك از عوامل مهم است. گرچه ممكن است فكر كنيد كه با وجود چندين گيگابايت فضا ديگر جاي نگراني براي فضاي ديسك وجود ندارد، بزرگ شدن حجم پايگاه دادهاي عمل بازيابي را طولاني ميكند. اگر در طراحي ساختار جداول دقت به خرج نداده باشيم احتمال تكرار دادهها افزايش مييابد. اغلب ممكن است مشكل متفاوت و عكسي نيز اتفاق بيفتد. به اين ترتيب كه ممكن است ما عمل نرمال سازي را روي پايگاه دادهاي خودمان انجام داده و جداول جديدي ايجاد كرده باشيم، اگرچه در تئوري در طراحي پايگاه دادهاي موفق بودهايم ولي در واقع براي پاسخگويي از طريق پرس و جو ممكن است با مشكل زمان طولاني جهت اجرا مواجه شويم.
نگهداري پايگاه اطلاعاتي طراحي شده در اين حالت گاهي اوقات مشكل است زيرا ساختار جدول ممكن است هدف طراح را نامفهوم و گنگ نمايد. اين مطلب علت اصلي مستندسازي است، زيرا چنانچه عمل مستندسازي روي طراحي و برنامه نويسي انجام گيرد، افراد بعدي و يا كساني كه با ما كار ميكنند، ميتوانند به آنچه ما در هنگام طراحي و كد كردن برنامه فكر ميكرديم، پيببرند. در فرهنگ طراحي پايگاه دادهها، مستندسازي تحت عنوان فرهنگ دادهها يا كاتالوگ سيستم شناخته ميشود.
پاسخ : آموزش SQL Server از صفر تا صد بخش چهارم
:108::108::108::108::108::108::108::108::108:
آموزش SQL Server از صفر تا صد بخش هشتم
ايجاد يك فرهنگ دادهاي (كاتالوگ سيستم)
فرهنگ دادهاي مهمترين فرم مستندسازي طراح پايگاه دادهاي است. اين فرهنگ وظايف زير را دارا ميباشد:
- شرح هدف پايگاه دادهها و كسي كه از آن استفاده ميكند.
- توضيح مشخصات پايگاه دادهاي: روي چه دستگاهي ايجاد شده است، اندازه پيش فرض پايگاه دادهاي يا اندازه فايل رخداد (كه براي ذخيرهسازي اطلاعات عمليات پايگاه دادهاي در بعضي از RDBMS استفاده ميشود).
- اصل برنامههاي SQL براي نصب كردن و يا برداشتن نسخه SQL موردنظر: شامل مستندات استفاده شده براي ابزار واردات/ صادرات (import / export) است.
- تهيه شرح جزئيات هر جدول در داخل پايگاه دادهها و توضيح هدف هر جدول.
- توضيح ساختار داخلي هر جدول: شامل تمام فيلدها و نوع دادههاي آنها و توضيحات تمام شاخصها و تمام ديدها ميباشد.
- اصل برنامههاي SQ L براي تمام روالهاي ذخيره شده و تريگرها.
توضيح محدوديتهاي پايگاه دادهها شامل مقادير منحصر بفرد يا مقادير غير هيچ. مستندات همچنين بايد توضيح دهد كه آيا اين محدوديتهاي RDBMS اعمال ميشوند و يا اينكه برنامه نويس پايگاه دادهاي بايد آنها را در داخل برنامه خود كنترل كند.
بسياري از ابزار مهندسي نرمافزار به كمك كامپيوتر (CASE)، نيز به طراح پايگاه دادهاي در ايجاد اين فرهنگ دادهها كمك ميكنند. بطور مثــال اكسس داراي يك پيش بسته نرمافزاري به همراه ابزار شرح پايگاه دادهاي است كه هر شيء موجود در پايگاه دادهاي را به تفصيل شرح ميدهد.
ايجاد فيلدهاي كليد
پس از مستندسازي طراحي پايگاه دادهها، مهمترين هدف طراحي اين است كه ساختار جدول را طوري ايجاد كنيم كه هر جدول داراي يك كليد اصلي و يك كليد خارجي باشد. كليد اصلي يا اوليه بايد دو شرط زير را دربرداشته باشد:
هر ركورد در داخل جدول يكتا باشد (هيچ ركوردي در داخل جدول ستونهايش معادل ستونهاي ركورد ديگر در جدول نباشد).
براي آنكه ركوردي يكتا باشد، مقدار كليد نبايد در ركوردهاي ديگر جدول تكرار شد ه باشد. شرط دوم را درنظر بگيريد، ستوني كه داراي داده يكتا در سرتاسر جدول باشد به عنوان فيلد كليد اصلي شناخته ميشود. كليد اصلي ميتواند شامل يك يا تركيبي از چند ستون باشد. يك فيلد كليد خارجي، فيلدي است كه يك جدول را به جدولي ديگر از طريق كليد اصلي يا كليد خارجي متصل ميكند.
جمله CREATE TABLE
قبل از آنكه جداول را با دادههاي واقعي پر كنيم، بايد نحوه ايجاد يك جدول را بدانيم. روند ايجاد يك جدول خيلي طولانيتر از ايجاد يك جمله CREATE TABLE ميباشد. جداول به سطرها و ستونها تقسيم ميشوند. هر سطر يك بخش از دادهها را نمايش ميدهد و هر ستون را ميتوان نماينده يك جز از آن بخش از دادهها درنظر گرفت.
معمولاً دادهها قالبها (formها)ي متنوعي دارند. به عنوان مثــال ميتوانند يك عدد صحيح، يك عدد حقيقي، يك رشته، يك عبارت تاريخ/ زمان (مانند 2002 – JAN – 25 03:22:50) و يا حتي در قالب باينري باشند.
وقتي كه ما يك جدول را تعريف ميكنيم، احتياج به تعيين نوع داده مربوط به هر سطر داريم. پايگاه دادهايهاي مختلف اجازه استفاده از نوع دادههاي مختلف را ميدهند. بنابراين بهتر است قبل از استفاده از اين جمله مستندات مربوطه را كنترل كنيم.
توجه ـ ميتوانيم نامهاي تكراري براي جداول در شماها يا كاربران مختلف داشته باشيم ولي نام جداول در يك شما بايد منحصر بفرد باشند. نام يك فيلد نيز ميتواند در داخل پايگاه دادهها تكراري باشد ولي محدوديتي كه در اينجا وجود دارد آن است كه نام فيلد در داخل يك جدول يكتا است.
نحوه نگارش پايهاي براي جمله CREATE TABLE:
کد:
CREATE TABLE table - name
(
column – name l datatype,
column – name 2 datatype,
……..
)
مثــال/
کد:
Create table bills (
Name char (30) ,
Amount NUMBER)
اين جمله يك جدول به نام Bills ايجاد كرده و در داخل يك جدول فيلدهاي Amount, Name و Account – ID قرار ميگيرند. نوع فيلد Name كاراكتري است و تا 30 رشته كاراكتري را ميپذيرد. فيلدهاي Account – ID , Amount نيز فقط مقادير عددي قبول ميكنند.
جمله ALTER TABLE
گاهي اوقات در طراحي پايگاه دادهها همه چيز را درنظر نميگيريم. همچنين نيازهاي كاربردي و پايگاه دادهاي همواره در حال تغيير است. جمله ALTER TABLE اداره كننده پايگاه دادهها يا طراح را قادر ميسازد تا ساختار يك جدول را پس از ايجاد، تغيير دهد.
جمله ALTER TABLE يك مشخصه قوي در SQL است كه ما را قادر ميسازد تا بتوانيم ساختار يك جدول را پس از آنكه ايجاد شد، تغيير دهيم. بدون دستور ALTER TABLE هرگاه بخواهيم ساختار آن را تغيير دهيم، مجبور به حذف جدول و دوباره ساختن آن ميباشيم. در اين بخش به دو مشخصه اصلي دستور ALTER TABLE پرداخته ميشود:
- 1ـ اضافه كردن ستوني به يك جدول موجود
- 2ـ تغيير يك ستون كه هم اكنون وجود دارد
نحوه نگارش ALTER TABLE به شكل زير است:
کد:
ALTER TABLE table – name
ADD column – name data – type | MODIFY column – name data – type
توجه ـ ميتوانيم طول ستون را افزايش يا كاهش دهيم ولي اگر اندازه يكي از مقادير اين ستون بزرگتر از مقداري باشد كه ميخواهيم براي اين ستون معين كنيم، نميتوانيم طول يك ستون را كاهش دهيم.
در هنگام استفاده از دستور ALTER محدوديتهاي زير وجود دارند:
- ـ ما از اين جمله نميتوانيم جهت اضافه نمودن يا حذف فيلدهايي به پايگاه دادهاي استفاده كنيم.
- ـ اين دستور ميتواند ستوني را از NOT NULL به NULL تغيير دهيد.
- ـ مشخصات يك ستون ميتواند از NULL بهNOT NULL تغيير كند. فقط اگر ستون مربوطه شامل مقادير NULL نباشد.
براي تغيير يك ستون NOT NULL به NULL از نحوه نگارش زير استفاده ميشود:
کد:
ALTER TABLE table – name MODIFY (column – name data – type NULL)
براي تغيير ستوني از NULL به NOT NULL، بايد مراحل زير را انجام داد:
- 1ـ تعيين اينكه آيا ستوني داراي مقادير NULL است.
- 2ـ مقادير NULL موجود را با حذف ركورد يا وارد كردن مقدار مناسب در آن از بين ببريم.
- 3ـ دستور ALTER TABLE را اجرا كنيم.
توجه ـ بعضي از سيستمهاي مديريت پايگاه دادهها امكان استفاده از شبه جمله MODIFY را ميدهند. بعضي ديگر شبه جملات ديگري را به جمله ALTER TABLE اضافه نمودهاند. در Oracle 8، ما ميتوانيم حتي پارامترهاي ذخيرهسازي جدول را تغيير دهيم. بنابراين در هنگام استفاده از اين جمله بايد مستندات مربوطه را كنترل كنيم.
جمله DROP TABLE
SQL داراي دستوري براي حذف كامل جدول از يك پايگاه دادهاي است. دستور DROP TABLE يك جدول را به همراه تمام محدوديتها و شاخصهايش حذف ميكند. وقتي اين دستور صادر شد، راه بازگشتي وجود ندارد. متداولترين نحوه استفاده از جمله DROP TABLE هنگامي است كه ما ميخواهيم يك جدول موقتي ايجاد شده را حذف كنيم. نحوه نگارش جمله DROP TABLE به شكل زير است:
کد:
DROP TABLE table – name
جمله DROP DATABASE
بعضي سيستمهاي مديريت پايگاه دادهاي همچنين از جمله DROP DATABASE استفاده ميكنند كه همان كاربرد جمله DROP TABLE را دارد. نحوه نگارش اين جمله به شكل زير است:
کد:
DROP DATABASE database – name
ايجاد شاخصها بر روي جداول جهت بهبود اجرا
شاخصها امكان دسترسي ما را به دادهها از مسير كوتاهتر فراهم ميسازند. يك شاخص راهي است جهت ارائه دادهها به شكلي متفاوت از آنچه آنها روي ديسك ظاهر ميشوند. نوع خاصي از شاخصها مكان فيزيكي ركورد را در داخل يك جدول دوباره مرتب ميكند. شاخصها ميتوانند روي يك ستون جدول يا تركيبي از ستونها ساخته شوند. وقتي يك شاخص به كار گرفته ميشود، دادهها به شكل مرتب شده ارائه ميشوند. اين كار را ميتوان با استفاده از جمله CREATE INDEX انجام داد. معمولاً ميتوانيم با استفاده از شاخص بندي روي فيلدها، در ذخيرهها و بازيابي اطلاعات سرعت بالايي داشته باشيم.
استفاده از شاخصها
علاوه بر ديدها، راه ديگري براي نمايش دادهها به فرمتي كه دادهها به شكل فيزيكي روي ديسك ذخيره شوند، استفاده از يك شاخص است. اضافه بر آن، شاخصها همچنين ميتوانند دادههاي ذخيره شده را روي ديسك (بعضي اوقات ديدها نميتوانند اين كار را انجام دهند) مرتب كنند. شاخصها در يك پايگاه دادهاي SQL به سه دليل اصلي زير استفاده ميشوند:
- براي اعمال محدوديتهاي جامعيت ارجاعي توسط استفاده از كلمات كليدي UNIQU يا PRIMARY KEY
- براي سادهسازي عمل مرتب نمودن دادهها بسته به محتويات فيلد يا فيلدهاي شاخص
- براي بهينهسازي سرعت اجراي پرس و جوها
شاخصها چه هستند؟
دادهها ميتوانند با استفاده از دو روش از داخل پايگاه دادهاي استخراج شوند. اولين روش غالباً به نام روش دسترسي ترتيبي ناميده ميشود. در اين روش SQL هر ركورد را براي تطبيق بررسي ميكند. (جستجوي ركوردها به شكل پيدرپي) اين روش جستجو كارا نميباشد ولي تنها راهي است كه SQL ركورد صحيح را پيدا ميكند.
اضافه كردن شاخصها به پايگاه دادهاي اين امكان را به SQL ميدهد تا از روش دسترسي مستقيم استفاده كند. SQL از ساختاري درخت براي ذخيره و بازيابي دادههاي شاخص استفاده ميكند. اشارهگرهايي كه به گروهي از دادهها اشاره ميكنند در راس درخت ذخيره ميشوند. اين گروه گرهها ناميده ميشوند. هر گره به گرههاي ديگر اشاره ميكند. گرههايي كه به گرههاي سمت چپ اشاره ميكنند شامل مقاديري كمتر از گره پدرشان است. گرههايي كه به گرههاي سمت راست اشاره ميكنند مقاديرشان از مقدار گره پدر بيشتر است. اوراكل اين نوع شاخص را يك شاخص B-Tree مينامد.
سيستم پايگاه دادهاي جستجوي خودش را از بالاترين گره شروع ميكند و اشارهگرها را دنبال ميكند تا موفق به پيدا كردن گره موردنظر شود.
توجه ـ نتيجه يك پرس و جو براي يك جدول غير شاخص شده معمولاً به جستجوي كامل جدول اشاره ميكند. جستجوي كامل جدول جرياني است كه توسط سرور پايگاه دادهاي براي جستجوي هر رديف جدول استفاده ميشود تا وقتي تمام رديفهاي جدول تحت شرايط داده شده برگشت داده شدند. در صورتيكه يك شاخص اين امكان را ميدهد تا سرور پايگاه دادهاي به رديف خاصي از دادهها در داخل يك جدول سريعاً اشاره كند.
نحوه نگارش اصلي SQL براي ايجاد شاخص شبيه زير است:
کد:
CREATE INDEX index – name
ON table – name (column – name l, [column – name 2], …)
همانگونه كه بارها ديديم، نحوه نگارش CREATE INDEX ميتواند در سيستمهاي مختلف پايگاه دادهاي فرق داشته باشد. جمله CEATE INDEX يك شاخص را از پايگاه دادهاي برميدارد. مثل هميشه، جمله CREATE INDEX در نسخههاي مختلف تفاوت دارد.
تذكر ـ وقتي جدولي حذف ميشود، تمام شاخصهاي وابسته به آن نيز حذف ميگردند.
پاسخ : آموزش SQL Server از صفر تا صد
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++
1 فایل پیوست
آموزش SQL Server از صفر تا صد بخش نهم
نكات شاخصبندي
فهرست زير چندين نكات را در هنگام استفاده از شاخصها متذكر ميشود:
- s براي جداول كوچك، شاخصها هيچ اثري در بهبود اجراي پايگاه دادهاي ندارند.
- s شاخصها بهترين اثر را خواهند داشت اگر ستونهايي كه شاخص ميشوند داراي يك طيف وسيعي از داده باشند.
- s شاخصها ميتوانند پرس و جوي ما را بهينه نمايند وقتي جواب پرس و جوها يك مقدار كمي داده باشد (مثلاً كمتر از 25% دادهها). اگر حجم زيادي از دادهها در يك زمان برگردانده ميشود، شاخصهاي نوع داده سربار محسوب ميشوند و عملاً كارايي ندارند.
- s شاخصها ميتوانند نرخ بازيابي دادهها را بهبود بخشند. به هرحال آنها بهنگام سازي دادهها را كند ميكنند.
- s هميشه روي فيلدهايي شاخصبندي را انجام دهيم كه در عمل اتصال بين جداول استفاده ميشوند. اين روش به طرز قابل ملاحظهاي سرعت اتصال را بالا ميبرد.
- s اكثر سيستمهاي پايگاه دادهاي امكان ايجاد شاخصي روي يك ديد را به ما نميدهند. اگر سيستم پايگاه دادهاي اين اجازه را ميدهد، از شبه جمله GROUP BY به همراه جمله SELECT استفاده كنيم تا ديدي براي مرتبسازي دادههاي آن ديد ايجاد كند (متأسفانه بسياري از سيستمها قادر نيستند از شبه جمله ORDER BY به همراه جمله CREATE VIEW استفاده كنند.
- s روي فيلدهايي كه مرتباً در حال بهنگام شدن يا تغييرند شاخص ايجاد نكنيم.
- s شاخصها و جداول را روي يك درايو فيزيكي ذخيره نكنيم. جداسازي اين اشيا رقابت بين درايو را حذف كرده و در نتيجه پرس و جوها سريعتر خواهد شد.
- s شاخصها نبايد روي فيلدهايي بنا شوند كه شامل تعداد زيادي مقدار NULL هستند.
شاخصبندي روي بيشتر از يك فيلد
SQL همچنين اين امكان را ميدهد كه روي بيشتر از يك فيلد شاخص ايجاد نماييم. اين نوع شاخص يك شاخص مركب ناميده ميشود.
استفاده از كلمه كليدي UNIQUE به همراه CREATE INDEX
شاخصهاي مركب اغلب به همراه كلمه كليدي UNIQUE براي جلوگيري از تكرار ركوردها استفاده ميشوند.
توجه ـ چنانچه كليد اصلي براي يك جدول مشخص شده باشد، شاخصها تلويحاً توسط پايگاه دادهاي ايجاد ميگردند. زيرا ميدانيم كه هر مقدار از داخل كليد اصلي بايد يكتا باشد. محدوديت كليد اصلي و يكتايي هر دو باعث ميشوند كه سيستم، شاخص ايجاد نمايد.
شاخصها و اتصالها
هنگام استفاده از اتصالهاي پيچيده در پرس و جوها، جمله SELECT ميتواند وقت زيادي مصرف كند. اگر جداول بزرگ باشند اين مقدار وقت ممكن است به چندين ثانيه برسد. اين نوع اجرا در يك محيط كلاينت سرور كه تعداد زيادي كاربر در آن واحد در حال كار كردن ميباشند ممكن است مدتهاي زيادي كاربران را در حالت انتظار بگذارد. ايجاد يك شاخص روي فيلدهايي كه اغلب اوقات در اتصالها استفاده ميشوند ميتواند اجراي پرس و جوي شما را به طرز قابل ملاحظهاي بهبود بخشد، به هر حال اگر تعداد زيادي شاخص ايجاد شوند، به جاي بالا بردن سرعت ميتوانند اجراي سيستم را پايين آورند.
ايجاد ديدها View ها
معرفي ديد
يك ديد اغلب به يك جدول مجازي اشاره ميكند و اين به آن معني است كه يك ديد شبيه جدول است و شبيه به يك جدول به آن مراجعه ميشود. به هرحال، ديدها شامل دادههايي مثل جداول نيستند. تنها رسانه موردنياز براي يك ديد، رسانهاي براي نگهداري تعريف ديد است. يك ديد به وسيله يك پرس و جو روي يك يا چند جدول پايگاه دادهاي تعريف ميشود. يك ديد چيزي جز يك پرس و جوي از قبل تعريف شده نيست. ديدها به وسيله جمله CREATE VIEW ايجاد ميشوند.
بعد از اينكه ديد ايجاد شد، ميتوانيم از دستورات SQL زير براي مراجعه به آن ديد استفاده كنيم:
- SELECT
- INSERT
- UPDATE
- DELETE
كاربرد ديدها
ما ميتوانيم از ديدها يا جداول مجازي براي پرس و جوهاي پيچيده استفاده كنيم. بعد از آنكه يك ديد يا مجموعهاي از دادهها ايجاد شدند، ميتوانيم از آن ديد همانند يك جدول استفاده نماييم. به هرحال محدوديتهاي خاصي براي تغيير دادهها در داخل ديدها ممكن است بوجود آيد. وقتي دادهاي در يك جدول تغيير ميكند، ديدهاي ايجاد شده نيز تغيير مينمايند البته بايد توجه داشته باشيم كه ديدها در پايگاه دادهاي همانند جدول فضاي فيزيكي اشغال نميكنند.
نحوه نگارش جمله CREATE VIEW به شكل زير است:
کد:
CREATE VIEW view – name [(column l, column 2, …)] AS
SELECT column – name(s)
FROM table – name
WHERE condition
تذكر ـ اگر بلافاصله پس از جمله CREATE VIEW (قبل از كلمه كليدي AS) مستقيماً فهرستي از ستونها را مشخص نكنيم، نام ستونها در ديد همان نام ستونهاي انتخاب شده جدول پايه خواهد بود.
تغيير نام ستونها
ديدها نحوه ارائه دادهها را آسان ميكنند. به علاوه با معرفي يك ديد با استفاده از جمله create view اين امكان به ما داده ميشود تا ستونهاي انتخابي را تغيير نام دهيم.
پردازش ديد در SQL ديدها ميتوانند دادههاي جداول را به شكلي خيلي راحتتر از آنچه در ساختار جدول پايگاه دادهاي وجود دارد، ارائه دهند. وقتي چندين پرس و جوي پيچيده را پشتسر هم اجرا ميكنيم، ديدها ميتوانند بينهايت كار را ساده نمايند.
محدوديتهاي استفاده از SELECT
SQL محدوديتهاي مشخصي را در هنگام استفاده از جمله SELECT براي ساختن يك ديد قرار ميدهد. قوائد زير هنگام استفاده از جمله SELECT بكار گرفته ميشوند:
s از عملگر UNION نميتوانيم استفاده كنيم.
s از شبه جمله ORDER نميتوانيم استفاده كنيم اما ميتوانيم از شبه جمله GROUP BY در يك ديد استفاده نماييم تا وظايف مشابه شبه جمله ORDER BY را اجرا كنيم.
تغيير دادهها در يك ديد
همانگونه كه گفته شد، با ايجاد يك ديد با استفاده از يك يا چند جدول فيزيكي در يك پايگاه دادهاي، ميتوانيم يك جدول مجازي بسازيم، تا از دستورات SQL يا يك برنامه كاربردي پايگاه دادهاي استفاده كنيم. بعد از اينكه يك ديد توسط جمله CREATE VIEW … SELECT ايجاد شد، ميتوانيم با استفاده از دستورات پردازش دادهها مثل DELETE, INSERT, UPDATE اعمال بهنگام سازي، درج و حذف دادهها را روي ديد انجام دهيم.
مشكلات تغيير دادهها با استفاده از ديدها
در زير فهرستي از محدوديتهاي متداول كه در هنگام كار با ديدها با آن مواجه هستيم آورده شده است:
ـ نميتوانيم از جملات DELETE در ديدهاي چندين جدول استفاده كنيم.
ـ نميتوانيم از جمله INSERT استفاده كنيم مگر آنكه تمام ستونهاي NOT NULL استفاده شده در جدول اصلي در ديد نيز باشند. اين محدوديت مورد اجرا گذاشته ميشود زيرا پردازنده SQL نميداند كه چه مقاديري را به داخل ستونهاي NOT NULL درج كند.
ـ اگر ركوردهايي را از طريق يك ديد اتصالي درج يا بهنگام كنيم، تمام ركوردهايي كه بهنگام شدهاند بايد متعلق به جدول فيزيكي يكساني باشند.
ـ اگر از شبه جمله DISTINCT براي ايجاد يك ديد استفاده كنيم، نميتوانيم ركوردها را در داخل يك ديد درج يا حذف نماييم.
ـ نميتوانيم يك ستون مجازي (ستوني كه نتيجه يك عبارت يا تابع است) را بهنگام كنيم.
كاربردهاي مشترك ديدها
در اينجا وظايفي كه ديدها ميتوانند اجرا كنند، آمده است:
s تهيه امكانات امنيتي براي كاربر
s تبديل بين واحدها
s ساده كردن و ساخت پرس و جوهاي پيچيده
s خلاصه نمودن دادهها از چندين جدول
ايجاد امنيت با استفاده از ديدها
امروزه تمام سيستمهاي پايگاههاي دادهاي داراي مجموعه كاملي از امكانات امنيتي هستند. كاربران سيستم پايگاه دادهاي معمولاً بسته به راهي كه آنها از پايگاه دادهاي استفاده ميكنند به گروههايي تقسيم ميشوند.
معموليترين نوع اين گروهها اداره كنندگان پايگاه دادهاي، طراحان پايگاه دادهاي، اشخاص وارد كننده اطلاعات و كاربران معمولي ميباشند. اين گروههاي كاربران داراي درجات مختلفي از حق دسترسي به پايگاه دادهاي ميباشند. اداره كننده پايگاه دادهاي احتمالا داراي بيشترين و كاملترين كنترل روي سيستم پايگاه دادهاي است. مثل حق DELETE, INSERT, UPDATE و ALTER در پايگاه دادهاي. كاربران عمومي ممكن است فقط امكان و حق اجراي دستور SELECT را داشته باشند و شايد بتوانند دادهها را از جدول خاصي انتخاب كنند. ديدها در اين حالت براي كنترل اطلاعاتي كه كاربران ميخواهند به آن دسترسي داشته باشند، استفاده ميشوند.
استفاده از ديدها براي تبديل واحدها
ديدها همچنين براي مواقعي سودمند هستند كه ما نياز داريم برخي از دادههاي پايگاه دادهاي را به شكلي متفاوت از دادههاي جدولهاي اصلي نمايش دهيم. مثلاً اگر فيلد amount واقعاً براي ذخيره سازي دلار آمريكا بكار ميرود و نخواهيم كه كاربران كانادايي هر بار مجبور به تبديل پولشان از طريق محاسبه جمعم amount به پول كانادايي باشند، ميتوانيم ديد جديدي بدين منظور ايجاد نماييم.
سادهسازي پرس و جوهاي پيچيده با استفاده از ديدها
ديدها همچنين در مواقعي كه نياز به اجراي چندين پرسوجو داريم، مفيد ميباشند. در اين حالت بعد از اينكه پرسوجوها به ديدهايي تقسيم ميشوند، پرس و جوي نهايي نسبتاً ساده ميباشد؛ همچنين ميتوانيم از ديدهاي جداگانه در مواقعي كه لازم است دوباره استفاده كنيم.
توجه ـ هر وقت در تعريف يك ديد از توابع استفاده ميكنيم، بايد يك نام مستعار براي ستون انتخاب كنيم زيرا هر قلم انتخاب شده يك ستون مجازي در يك جدول مجازي خواهد شد. يك ستون در يك جدول يا يك ديد نميتواند از نحوه نگارش يك تابع استفاده كند.
حذف ديدها با استفاده از جمله DROP VIEW
دستور DROP VIEW يك ديد را از پايگاه دادهاي حذف ميكند. حذف ديد تأثيري در جدول يا جداولي كه اين ديد از روي آنها ساخته شده است، نميگذارد. نحوه نگارش به شكل زير است:
کد:
DROP VIEW view – name
تنها چيزي را كه هنگام حذف يك ديد با استفاده از دستور DROP VIEW بايد درنظر داشته باشيم آن است كه تمام ديدهاي ديگري كه به اين ديد مراجعه ميكنند نامعتبر ميگردند.
توجه ـ يك ديد ميتواند حذف شود بدون آنكه جدول اصلي تغيير كند و اين مطلب به اين موضوع اشاره ميكند كه چرا ما به ديدها جداول مجازي ميگوييم.
اتصال جداول
يكي از مهمترين و قويترين مشخصههاي SQL، توانايي جمع كردن و پردازش دادهها از طريق جداول مختلف است.
جمله JOIN در SQL اين امكان را به ما ميدهد تا به جاي جداول بزرگ، جداول كوچكتر اختصاصيتري كه نگهداري آنها آسانتر از جداول بزرگ ميباشد، طراحي كنيم.
اتصال جدولها به شرط تساوي
اين اتصال با استفاده از دستور SELECT ايجاد ميشود. هدف از اين اتصال، جور كردن مقادير يك ستون با مقادير ستوني قرينه از جدول ديگر ميباشد. همچنين ميتوانيم خروجي را نيز از طريق گذاشتن شروط بيشتر در شبه جمله WHERE مشروطتر نماييم.
مثــال/
کد:
SELECT Employees. Name
FROM Employees, Orders
WHERE Employees. Employee – ID = Orders. Employee – ID
AND Orders. Product = ‘Printer’
با استفاده از مثــال فوق، كساني كه سفارش پرينتر دادهاند، مشخص ميشوند.
تذكر ـ اگر دو يا چند جدول را بدون استفاده از شبه جمله WHERE انتخاب كنيم در واقع اتصال كارتزين را اجرا نمودهايم. اين اتصال تمام رديفهاي تمام جداول جلوي شبه جمله FROM را با يكديگر تركيب ميكند. اگر هر جدول 200 رديف داشته باشد، در جدول جواب 40000 رديف (200 * 200) خواهيم داشت. بنابراين هميشه جداول را در شبه جمله WHERE اتصال ميدهيم مگر اينكه واقعاً نياز به اتصال تمام رديفهاي انتخابي داشته باشيم.
اتصال جدولها به شرط عدم تساوي
SQL امكان اتصال جدولها را به شرط عدم تساوي نيز دارد. در اين حالت به جاي علامت مساوي (=) از علامت نامساوي استفاده ميكند. در دنياي واقعي نيز اتصال به شرط تساوي از اتصال به شرط غير تساوي متدوالتر و مرسومتر است ولي به هرحال ممكن است با شرايطي مواجه شويم كه كاربرد موردنظر ما نتايج بهتري را با اتصال به شرط غير تساوي ايجاد كند.
پاسخ : آموزش SQL Server از صفر تا صد
2 فایل پیوست
آموزش SQL Server از صفر تا صد بخش دهم
اتصال جدولها با استفاده از كلمه كليدي JOIN
اتصال دروني INNER JOIN)) : يك اتصال دروني هنگامي است كه رديفهاي جدولها با يكديگر تركيب ميگردند و تعدادي رديف جديد توليد ميكنند كه مساوي حاصل ضريب رديفهاي آنها ميباشد. همچنين اتصال دروني از اين رديفها براي تعيين نتيجه شبه عبارت WHERE استفاده ميكند.
کد:
SELECT field l , field 2 , field 3
FROM first – table
INNER JOIN second – table
ON first – table. Keyfield = second – table. Foreing – keyfield
اتصال بيروني (OUTER JOIN): يك اتصال بيروني، دو جدول را به طريقي ديگر گروهبندي ميكند. اين اتصال تمام رديفهاي دادهاي را از يك جدول نمايش ميدهد حتي اگر دادههاي جور شده در جدول اتصالي (جدول جواب) قرار نگيرند. به عبارت ديگر در اين اتصال همه سطرهاي يك جدول با سطرهاي خاصي از جدول ديگر ادغام ميشوند.
در اتصال بيروني سمت راست (RIGHT OUTER JOIN)، SQL يك مجموعه كامل از دادههاي جدول سمت راست و در اتصال بيروني سمت چپ (LEFT OUTER JOIN)، يك مجموعه كامل از دادههاي جدول سمت چپ را برميگرداند.
اتصال يك جدول با خودش
يك خود اتصالي، يك جدول را به خودش متصل ميكند كه زياد متداول نيست ولي دانستن آن مهم است. نحوه نگارش اين عمل نيز شبيه به اتصال دو جدول ميباشد.
كنترل جامعيت دادهها
معرفي محدوديتها
محدوديت در يك پايگاه دادهاي رابطهاي عاملي است كه توسط آن قوانيني به مجموعه دادههاي در حال اضافه شدن به يك ستون از يك جدول اعمال ميكند. در SQL انواع مختلفي از محدوديتها وجود دارد.
جامعيت دادهها
محدوديتها براي اطمينان از صحت و سازگاري دادهها در يك پايگاه اطلاعاتي رابطهاي بكار ميروند. جامعيت دادهها اطمينان از صحت و سازگاري دادهها در پايگاه دادهاي است. جامعيت دادهها يك پايگاه اطلاعاتي رابطهاي را از طريق اعمال محدوديت روي جداول كنترل ميكند. هر وقت افراد دادههايي را به داخل پايگاه دادهاي وارد ميكنند (دادهها مجبور هستند كه به نحوي وارد شوند) اشتباهات در هنگام ورود ممكن است منجر به عدم صحت اطلاعات شوند.
جامعيت دادهها درگير صحت ورود اطلاعات و سازگاري ذخيره سازي آنها در داخل پايگاه دادهها ميباشد. بطور مثــال شما نميخواهيد كه شماره تلفن شخصي را يك اپراتور به صورت 3178889222 وارد كند و اپراتور ديگري به صورت (317) 888-9222.
دادهها بايد دقيق و صحيح باشند و به شكل سازگاري در پايگاه دادهاي ذخيره شوند و امكان بازيابي دقيق داده از پايگاه دادهاي فراهم آيد و نيز امكان مقايسه دقيق بين دادهها انجام شود.
چرا از محدوديتها استفاده ميكنيم؟
براي پاسخ به اين سئوال، نگاهي به محتويات اصلي جامعيت داده مياندازيم (صحت و سازگاري دادهها) و اينكه چگونه جامعيت دادهها را در يك پايگاه دادهاي از طريق كاربرد محدوديتها اعمال ميكنيم.
صحت دادهها درگير وضع قوانيني (محدوديتهايي) روي ستونهاي جدول هستند، طوريكه سيستم پايگاه دادهاي فقط امكان درج دادههاي خاصي را در پايگاه ميسر سازد. مثلاً شما ميخواهيد كه فقط دادههاي عددي به داخل يك ستون كه حاوي نرخ ساعتي كارمندي است وارد شود و نيز ميخواهيد مطمئن شويد كه ستون Name مقادير الفباي عددي را قبول ميكند. در ضمن مطمئن شويد كه ستون State – Code شامل مقاديري باشد كه فقط دو كاراكتر را ميپذيرد.
دو را متفاوت براي اطمينان از صحت دادههاي وارده وجود دارد. اولين كاري كه انجام ميدهيد قرار دادن محدوديتهايي روي ستونهاي جدول خودتان است كه به اين وسيله ميتوان نوع داده خاصي با طول معيني وارد شوند. در ستونهايي مثل Phone – Number, SSN، فقط مقادير خودشان بايد ذخيره شوند و نه علامت (ـ).
دادهها ميتوانند به طريقي استخراج شوند كه شامل علامت (ـ) و ساير كاراكترهات باشند. بنابراين خروجي يك سيستم را خواناتر خواهد كرد. يك برنامه بايد داراي امكانات تصحيح باشد به شكلي كه انواع مقاديري را كه به داخل يك جدول اضافه ميشوند كنترل كند و يا امكان انتخاب يك مقدار از يك فهرست را براي كاربر مهيا سازد. مجموعه محدوديتهاي يك پايگاه دادهاي و نيز تصحيح آن بايد اين امكان را فراهم آورد تا با تلفيق آنها با يكديگر بهترين جامعيت دادهها فراهم آيد.
نرمالسازي پايگاه دادهاي نيز همچنين كمك موثري در سازگاري دادهها ميكند طوريكه تكرار دادهها در داخل پايگاه دادهاي و در نتيجه امكان عدم صحت و سازگاري آنها كاهش مييابد.
توجه ـ بدون استفاده از محدوديتها، مديريت دادهها خيلي مشكل و گاهي غيرممكن است. مخصوصاً كار با چندين هزار يا چندين ميليون رديف پايگاه دادهها صرف وقت بيشتر جهت طراحي يك پايگاه دادهاي و ايجاد محدوديتها و صرف وقت كمتر در مديريت دادهها ميشود.
مروري بر انواع محدوديتها
انواع محدوديتهايي كه ميتوانند روي جداول پايگاه دادهها ايجاد شوند:
- محدوديتهاي NOT NULL
- محدوديتهاي كليد اصلي
- محدوديتهاي يكتايي
- محدوديتهاي كليد خارجي
- محدوديتهاي كنترل
هر كدام از اين محدوديتها وظايف خود را دارند.
محدوديتهاي NOT NULL
وقتي جدولي را ايجاد ميكنيم، بايد نوع داده را براي هر ستون مشخص نماييم. وقتي نوعت دادهاي را براي يك ستون معين كرديم، اين ستون به پايگاه دادهاي ميگويد كه چه نوع دادهاي ميتواند به داخل ستون يك جدول اضافه شود. انواع مختلف دادههاي اصلي شامل دادههاي كاراكتري، عددي، تاريخ و زمان ميباشند.
وقتي يك ستون ايجاد شد، محدوديت NOT NULL ميتواند براي آن ستون درنظر گرفته شود. NULL معادل يك مقدار ناشناخته يا غيرقابل اعمال است. هنگامي كه رديفي را داخل جدول درج ميكنيم، اگر در داخل ستوني از اين رديف مقدار قرار ندهيم، مقدار آن ستون NULL ميشود. اگر مقدار ستوني را با NOT NULL مشخص كرديم، بدان معني است كه مقادير NULL اجازه وارد شدن در اين ستون را ندارند. NOT NULL به اين معني است كه به آن ستون نياز داريم.
توجه ـ اگر يك ستون NOT NULL معرفي نشود، مقادير NULL اجازه وارد شدن به آن ستون را دارند.
محدوديتهاي كليد اصلي
كليد اصلي اصطلاحاً به كليدي گفته ميشود كه براي شناسايي يك يا چند ستون از يك جدول بكار ميرود بطوريكه آن رديف از دادهها را يكتا ميكند. گرچه كليد اصلي عموماً فقط يك ستون از جدول را شامل ميشود ولي ممكن است بيشتر از يك ستون به عنوان كليد اصلي درنظر گرفته شود. مثلاً كليد اصلي منطقي براي جدول Employee شماره پرسنلي آن شخص است.
هدف، داشتن يك كليد اصلي يكتا براي هر ركورد است. در اين روش تعريف كليد در اثناي ايجاد جدول شكل ميگيرد. كليد اصلي در اين حالت يك محدوديت ضمني ناميده ميشود.
محدوديتهاي يكتايي
محدوديت يكتايي شبيه به يك كليد اصلي است به شكلي كه مقدار هر ستون بايد منحصر بفرد باشد. هنگاميكه يك محدوديت كليد اصلي در روي ستوني قرار ميگيرد، ميتوانيم محدوديت يكتايي روي ستوني ديگر قرار دهيم حتي اگر اين ستون به عنوان كليد اصلي بكار نرود.
محدوديت كليد خارجي
يك كليد خارجي ستوني در جدول فرزند است بطوريكه به يك جدول پدر اشاره ميكند. محدوديت كليد خارجي مكانيزم اصلي استفاده شده براي اعمال جامعيت ارجاعي بين جداول يك پايگاه دادهاي رابطهاي است. ستوني كه به عنوان كليد خارجي معرفي ميشود، به يك ستون تعريف شده به عنوان كليد خارجي در جدولي ديگر اشاره ميكند.
ارتباط جدول پدر/ فرزند
اين يك ارتباط پدر/ فرزند ناميده ميشود. جدول پدر، جدول Emplotee-TBL است و جدول Emplotee-PAY-TBL يك جدول فرزند است.
ارتباط جدول پدر/ جدول فرزند
(هر حقوق بايد با نام يك كارمند منطبق شود)
در شكل فوق ستون EMP-ID از جدول فرزند اشاره به ستون EMP-ID از جدول پدر دارد. براي آنكه يك مقدار به EMP-ID در جدول فرزند اضافه شود، حتماً بايد يك EMP-ID در جدول پدر وجود داشته باشد. به همين ترتيب، اگر يك مقدار براي EMP-ID بايد از جدول پدر حذف شود، تمام مقادير EMP-ID مربوطه نيز بايد از جدول فرزند حذف شوند. اين موضوع چگونگي كاركرد جامعيت ارجاعي را نشان ميدهد. همانند كليدهاي اصلي، كليد خارجي ميتواند از طريق دستور ALTER TABLE به جدول اضافه شود.
محدوديتهاي كنترل
محدوديتهاي كنترل ممكن است براي كنترل صحت دادههاي وارد شده به داخل يك ستون جدول مورد استفاده قرار گيرند. محدوديتهاي كنترل جهت تهيه ويرايشهاي انتهايي پايگاه دادهاي بكار ميروند. گرچه ويرايشها معمولاً در ابتداي كاربردها انجام ميشوند. ويرايشهاي عمومي مقاديري را كه ميتوانند به داخل ستونها، اشيا و يا در داخل پايگاه دادهاي و نيز روي كاربردهاي ويندوز وارد شوند، محدود ميكنند. محدوديت كنترل راهي جهت تهيه لايه محافظ ديگري براي ورود دادهها است.
محدوديتهاي مديريتي
براي اعمال محدوديتهاي مديريتي در يك پايگاه دادهاي اول بايد ارتباطات بين جداول را در پايگاه دادهاي خود بشناسيم چه وابستگيهايي وجود دارند؟ چه ستونهايي به ستونهاي ديگر وابسته است؟ آيا ستوني يك مقدار NULL داشته باشد يا بايد شامل داده باشد؟ آيا فهرستي از اين مقادير براي هر ستون وجود دارد؟ چگونه جداول بوسيله يك برنامه در دسترس قرار ميگيرند؟
بايد دقت زيادي را در مرحله طراحي پايگاه داده خود بگذاريم تا از اين ساختار خوب و بيعيب و درست و منطقي مطمئن باشيم. وقتيكه پايگاه دادهاي را ايجاد كرديم مجبور هستيم كه چگونگي ارتباط بين جداول را شناسايي كنيم و مشخص نماييم چه محدوديتهايي در داخل پايگاه دادهاي وجود دارند. اگر نميدانيم كه چه محدوديتهايي در داخل پايگاه دادهاي وجود دارند (يا احتمالاً به دليل بزرگي پايگاه دادهاي نميخواهيم)، ميتوانيم هميشه اين اطلاعات را از داخل كاتالوگ سيستم پايگاه دادهاي پيدا كنيم.
استفاده از ترتيب صحيح
وقتي جداولي با محدوديتهايي با استفاده از دستور CREATE TABLE ايجاد ميكنيم و يا محدوديتهايي با استفاده از دستور ALTER TABLE به جدولي اضافه مينماييم، محدوديتهايي جامعيت ارجاعي بايد به طرز صحيحي مشخص شوند. مثلاً بايد قبل از آنكه كليد خارجي را تعريف كنيم، ابتدا كليد اصلي را معين كرده باشيم زيرا ميدانيم كليد خارجي به كليد اصلي مراجعه و اشاره ميكند.
علاوهبر اين، وقتي جدولي را با استفاده از دستور DROP TABLE حذف ميكنيم و يا محدوديتي را از طريق دستور ALTER TABLE DROP برميداريم، بايد تمام محدوديتها را به ترتيب مناسبي برداريم. بعضي از كاربردهاي SQL مثل اوراكل اين امكان را به ما ميدهند تا يك جدول به همراه محدوديتهاي وابسته را با استفاده از دستور DROP TABLE table – name CASCADE CONTRAINTS حذف كنيم ما نميتوانيم محدوديت كليد اصلي را از جدولي حذف كنيم وقتيكه هنوز يك كليد خارجي به اين كليد اصلي در حال اشاره كردن ميباشد. در واقع بايد تمام محدوديتهاي كليد خارجي مربوطه را قبل از حذف كليد اصلي يك جدول حذف كرده باشيم نميتوانيم جدولي را كه داراي كليد اصلي است، حذف كنيم. در حاليكه كليد خارجي جدول ديگري به اين كليد اصلي اشاره ميكند.
مفهوم مشابهي روي دادهها اعمال ميشود. نميتوانيم ركورد فرزندي را ايجاد كنيم مگر آنكه قبل از آن ركورد پدر را ايجاد كرده باشيم، همچنين ممكن نيست بتوانيم ركورد پدري را قبل از حذف ركوردهاي فرزند، حذف كنيم.
روشهاي مختلف در ايجاد محدوديتها
اصولاً دو روش براي ايجاد و حذف محدوديتها در جداول وجود دارد. يك راه با استفاده از تعريف محدوديتها در جمله DROP TABLE مشخص ميشود، راه ديگر با مشخص كردن تعريف محدوديت روي يك جدول با استفاده از دستور ALTER TABLE تعيين ميشود. هر دو روش عالي هستند يعني از كاربران يكي را بر ديگري ترجيح ميدهند.
ما معمولاً تمام تعاريف محدوديتها را در جمله CREATE TABLE قرار ميدهيم، خصوصاً براي پايگاههاي دادهاي كوچك، بعضي اوقات براي پايگاههاي دادهاي بزرگ، اول جدول را ايجاد ميكنيم و سپس محدوديتها را روي جداول با استفاده از دستور ALTER TABLE اضافه مينماييم.
نرمالسازي پايگاه دادهها
پايگاه دادهاي خام
هنگامي كه شروع به طراحي يك پايگاه داده ميكنيم، يا اينكه آن را از يك نسخه SQL به نسخه ديگر منتقل ميكنيم، با حجم زيادي از دادهها مواجه ميشويم. همه دادهها موجود ميباشند ولي قابل كنترل نيستند. يك پايگاه دادهاي كه نرمال نشده است ممكن است شامل دادههايي باشد كه در يك يا چند جدول مختلف به دلايلي قرار گرفته باشند. اين مطلب از نقطهنظر امنيت، فضاي مورد استفاده ديسك، سرعت پرس و جوها، كارايي بهنگام سازي پايگاه دادهها و مهمتر از همه جامعيت و يكپارچگي دادهها خوب نيست.
يك پايگاه دادهاي قبل از عمل نرمالسازي، به جداول منطقي كوچكتر و قابل كنترلتر شكسته نشده است. براساس تجربيات، پايگاههاي دادهاي ميتواند فقط شامل يك زوج جدول باشند، هر جدول صدها ستون (يا فيلد) دادهاي را در خود جا داده است.
طراحي پايگاه دادهاي منطقي
هر پايگاه دادهاي بايد با توجه به نياز كاربر طراحي شود. طراحي پايگاه دادهاي منطقي، همچنين به مدل منطقي اشاره ميكند يعني پردازش دادهها مرتب شده به صورت منطقي و سازماندهي آنها به گروههايي كه ميتوانند به سادگي نگهداري شوند و توسط كاربران نهايي مورد استفاده قرار گيرند. طراحي منطقي يك پايگاه دادهاي بايد تكرار دادهها را كاهش دهد يا حتي كاملاً از بين ببرد. به هر حال، چرا يك داده را دوباره ذخيره ميكنيم؟
طراحي پايگاه دادهاي منطقي اولين مرحله و قدم در بكارگيري و پيادهسازي يك پايگاه دادهاي فيزيكي نيست، بلكه اولين قدم تهيه محيط يك پايگاه دادهاي است بطوري كه ساختار و محدوديتهاي فيزيكي براي كاربران روشن باشد.
نيازهاي كاربر نهايي چيست؟
نيازهاي كاربران نهايي بايد در صدر فهرست ملاحظات در هنگام طراحي يك پايگاه دادهاي باشد. بايد توجه شود كه كاربران نهايي مردمي هستند كه سرانجام از پايگاه دادهاي استفاده ميكنند و ورود اطلاعات از طريق همين كاربران انجام ميشود، در نتيجه در طراحي پايگاه دادهاي اين موضوع بايد درنظر گرفته شود.
برنامهاي كه آنها بتوانند از طريق آن به پايگاه دادهاي دستيابي پيدا كنند، بايد ساده باشد ضمن آن كه اجراي مناسب نيز درنظر گرفته شود در غير اينصورت نياز كاربران ناديده گرفته خواهد شد. ساختار فيزيكي پايگاه دادهاي ميتواند شفاف باشد، اگر يك طراحي منطقي مناسب به كار گرفته شود.
در اينجا سئوالاتي كه بايد از كاربران نهايي پرسيده شوند، آورده شده است:
- چه دادههايي بايد در پايگاه دادهاي نگهداري و ذخيره شود؟
- دادهها چطور بايد در داخل پايگاه دادهاي دستهبندي شوند؟
- چطور كاربران به پايگاه دادهاي دسترسي داشته باشند؟
- چطور تمام دادهها مربوط به پايگاه دادهاي ميشود؟
- چه معياري براي صحت دادهها بايد درنظر گرفته ميشود؟
افزونگي دادهها
دادهها نبايد افزونگي داشته باشند، بدين معني كه تكرار دادهها به چند دليل بايد در حداقل نگهداري شود. مثلا، لازم نيست كه آدرس منزل كارمندي را در بيشتر از يك جدول نگهداري كنيم. يك آدرس براي يك كارمند در داخل يك جدول ممكن است با آدرس همان كارمند در جدولي ديگر يكسان نباشد. كدام جدول صحيح است؟ آيا مستنداتي براي كنترل آدرس جاري كارمند وجود دارد؟ ممكن است اين طور باشد و ممكن است نباشد. در اينجا افزونگي دادهها ممكن است تبديل به يك مشكل بزرگ گردد.
پاسخ : آموزش SQL Server از صفر تا صد بخش نهم
----------------------------------
1 فایل پیوست
آموزش SQL Server از صفر تا صد بخش یازدهم
فرمهاي نرمال
فرمهاي نرمال راهي براي اندازهگيري سطح يك پايگاه دادهاي كه نرمال شده است، ميباشند، سه فرم نرمال متداول عبارتند از:
- فرم اول نرمال
- فرم دوم نرمال
- فرم سوم نرمال
هر فرم نرمال بستگي دارد به گامهاي نرمال سازي كه در فرم نرمال قبلي برداشته شده است. به طور مثــال، براي نرمالسازي يك پايگاه دادهاي با استفاده از فرم دوم نرمال، پايگاه دادهاي بايد در فرم اول نرمال قرار گرفته باشد. براي نرمال سازي پايگاه دادهاي توسط فرم سوم نرمال اين پايگاه بايد در فرم دوم نرمال قرار داشته باشد. (اين بدان معني است كه پايگاه دادهاي در فرم اول نرمال ميباشد)
فرمهاي نرمال بايد به شكل ترتيبي به كار گرفته شود.
فرم اول نرمال
هدف از فرم اول نرمال آن است كه دادههاي منطقي كه جداول ناميده ميشوند، تقسيم كنيم. وقتي كه جدولي طراحي شد، يك كليد اوليه يا اصلي به آن جدول اختصاص مييابد. كليد اصلي در يك جدول يك يا چند ستوني است كه هر رديف از آن جدول را منحصر بفرد ميكند. در اين حالت به جاي داشتن يك جدول بزرگ، چندين جدول كوچكتر با قابليت كنترل بهتر خواهيم داشت.
فرم دوم نرمال
هدف از فرم دوم نرمال داشتن دادههايي است كه فقط تا حدي به كلي اوليه وابسته است و آن دادهها را در جدول ديگري ذخيره ميكند. فرم دوم نرمال را از فرم اول نرمال بوسيله تقسيم جدول اصلي به دو جدول بيرون ميكشيم؛ طوريكه هر كدام از جداول داراي يك موضوع خاص خود ميباشند.
فرم سوم نرمال
هدف از فرم سوم نرمال برداشتن دادهها از جدولي است كه به كليد اوليه وابسته نميباشد. در تبديل جدولها به فرم سوم نرمال، جداول جديدتري ايجاد ميكنيم تا دادههاي بيشتري را در آنها جاي دهيم.
مزاياي نرمالسازي
نرمال سازي مزاياي بيشماري براي يك پايگاه دادهاي ايجاد ميكند. بعضي از مزاياي اصلي شامل موارد زير است:
- سازماندهي كليتر پايگاه دادهها
- كاهش افزونگي دادهها
- سازگاري دادهها در داخل پايگاه دادهها
- طراحي بسيار انعطافپذيرتر پايگاه دادهها
- امكمان امنيت بهتر پايگاه دادهها
سازماندهي از جريان نرمالسازي بدست ميآيد و كار هر شخص را سادهتر ميكند، از كاربري كه به جداول پايگاه دادهها دسترسي دارد تا طراح و اداره كننده بانك (DBA) كه مسئوليت اداره بانك اطلاعات به عهده او ميباشد. افزونگي دادهها كاهش مييابد، به اين ترتيب ساختار دادهها سادهتر ميگردد و در مصرف ديسك صرفهجوي خواهد شد. چون تكرار دادهها كم ميگردد، امكان ناسازگاري دادهها بطور چشمگيري كاهش مييابد.
چون پايگاه دادهاي نرمال، به جداول كوچكتري شكسته شده است، وقتي ساختار موجود را تغيير ميدهيم، انعطاف بيشتري داريم. خيلي آسانتر است هرگاه جدول كوچكي را با تعداد كم داده تغيير دهيم، تا اينكه بخواهيم جدول بزرگي را با تمام دادههاي حياتي پايگاه دادهها تغيير دهيم. وقتي عمل نرمالسازي انجام شده باشد امكان اعمال امنيت بهتر خواهد شد. بنابراين كار هر شخص سادهتر ميگردد و كاربر نهايي راضي خواهد شد.
معايب نرمالسازي
گرچه اكثر پايگاههاي دادهاي موفق در درجاتي از نرمال ميباشند ولي يك عيب اساسي در يك بانك اطلاعاتي نرمال شده وجود دارد؛ و آن كاهش سرعت پردازش دادهها است. قبول كاهش سرعت پردازش پايگاه دادهها، مستلزم آگاهي است چون هر پرس و جو يا درخواست تغيير به پايگاه دادهها فرستاده ميشود، در نتيجه عواملي در اجرا و سرعت پردازش آن دخالت دارند از جمله نحوه كاركرد CPU، نحوه كار حافظه و امكانات ورودي/ خروجي (I/O).
يك پايگاه اطلاعاتي نرمال شده به دليل پردازش تغييرات و پرس و جوهاي پايگاه دادهاي به CPU، حافظه و I/O بيشتري نياز دارد تا يك پايگاه دادهاي نرمال نشده. اين بهخاطر آن است كه ابتدا بايد جداول به هم متصل شوند و سپس دادههاي موردنياز كاربر از داخل اين جداول اتصالي بازيابي گردند.
از نرمال درآوردن يك پايگاه اطلاعاتي
از نرمال در آوردن، روند تغيير ساختار جدول يك پايگاه نرمال شده به شكلي است كه اجازه افزونگي كنترل شده به جهت اجراي بهتر و سريعتر را به پايگاه دادهاي ميدهد. تنها دليل از نرمال در آوردن يك پايگاه دادهاي بهبود اجراي پايگاه دادهها ميباشد. يك پايگاه دادهاي از حالت پايگاه دادهاي روند كاهش در حالت نرمال يك پايگاه دادهاي، به اندازه يك يا دو درجه است. البته بايد به خاطر داشته باشيم كه نرمالسازي واقعاً ممكن است اجراي پايگاه دادهاي را كندكند چون نياز به اتصال جدولها ميباشد. خارج كردن پايگاه دادهاي از حالت نرمال نيازمند تركيب جداول جدا شده است و احتمال ايجاد دادههاي تكراري در داخل جداول وجود دارد.
انجام اين كار نتيجهاي كاهش تعداد I / O و زمان صرف شده كمتري توسط CPU است؛ بنابراين سرعت اجرا افزايش خواهد يافت. به هرحال، عمل خارج كردن پايگاه دادهها از حالت نرمال هزينه بر ميباشد. در يك پايگاه اطلاعاتي نرمال شده، ستونهايي كه براي تقسيم جداول انتخاب شده بودند در هنگام تركيب جداول باعث اتصال آنها خواهند شد و در نتيجه افزونگي دادهها افزايش مييابد. وقتي يك پايگاه دادهاي نرمال شده، از حالت نرمال بيرون ميآيد. ما با دادههاي مربوط به هم در جدولي بزرگتر (برخلاف چندين جدول كوچك) روبرو هستيم در نتيجه يك پرس و جود در يك جدول بزرگتر، سريعتر اجرا خواهد شد زيرا دادهها در كنار هم در يك جا ذخيره شدهاند. به هرحال هم نرمال سازي و هم از حالت نرمال درآوردن پايگاه دادهها نياز به دانستن اطلاعاتي درباره دادههاي واقعي و طبيعت حرفهاي دارد كه ميخواهيم پايگاه دادهها را در آن محل اعمال نماييم.