SlideShare a Scribd company logo
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
1 | Saba Creative Company
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬
‫ويرايش‬‫كننده‬ ‫تهيه‬‫كننده‬ ‫بررسي‬‫كننده‬ ‫تاييد‬‫تهيه‬ ‫تاريخ‬‫تغييرات‬
1‫كمالي‬ ‫احسان‬1/12/95
2‫كمالي‬ ‫احسان‬23/11/97
3‫كمالي‬ ‫احسان‬15/08/98
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
2 | Saba Creative Company
‫مقدمه‬
‫د‬ ‫های‬ ‫پایگاه‬ ‫موضوع‬ ‫با‬ ،‫صنایع‬ ‫رشته‬ ‫در‬ ‫کارشناسی‬ ‫مقطع‬ ‫در‬ ‫تحصیلم‬ ‫های‬ ‫سال‬ ‫طی‬ ‫در‬‫برنامه‬ ‫زبان‬ ‫و‬ ‫اده‬
‫شد‬ ‫آشنا‬ ‫نویسی‬‫خیلی‬ ‫و‬ ‫داشتند‬ ‫تئوری‬ ‫جنبه‬ ‫بیشتر‬ ‫که‬ ‫شد‬ ‫آموخته‬ ‫ما‬ ‫به‬ ‫هایی‬ ‫زبان‬ ‫متاسفانه‬ ‫اما‬ .‫م‬
‫از‬ ‫کار‬ ‫بازار‬ ‫در‬‫ها‬ ‫آن‬‫برامون‬ ‫آشنایی‬ ‫حد‬ ‫در‬ ‫رو‬ ‫اکسس‬ ‫داده‬ ‫پایگاه‬ ‫مثال‬ ‫عنوان‬ ‫به‬ .‫کرد‬ ‫استفاده‬ ‫شد‬ ‫نمی‬
‫ساده‬ ‫جدول‬ ‫سری‬ ‫یک‬ ‫طراحی‬ ‫صرفا‬ ‫حد‬ ‫در‬ ‫داده‬ ‫پایگاه‬ ‫این‬ ‫با‬ ‫ما‬ ‫کردن‬ ‫کار‬ ‫توانایی‬ ‫تمام‬ ‫و‬ ‫دادند‬ ‫توضیح‬
.‫بود‬ ‫آنها‬ ‫به‬ ‫اطالعات‬ ‫ورود‬ ‫و‬
‫ش‬ ‫تر‬ ‫تخصصی‬ ‫همچنین‬ ‫و‬ ‫تحصیل‬ ‫با‬ ‫همزمان‬ ‫کار‬ ‫به‬ ‫بودنم‬ ‫مشغول‬ ‫علت‬ ‫به‬‫دن‬‫ام‬ ‫کاری‬ ‫محیط‬‫سال‬ ‫در‬
‫کارشناسی‬ ‫مقطع‬ ‫در‬ ‫دانشگاهی‬ ‫رشته‬ ‫دو‬ ‫در‬ ‫تحصیل‬ ‫ادامه‬ ‫با‬ ‫همزمانی‬ ‫و‬ ‫کارشناسی‬ ‫دوره‬ ‫از‬ ‫پس‬ ‫های‬
‫باز‬ ‫در‬ ‫نیاز‬ ‫مورد‬ ‫الزامات‬ ‫با‬ ،‫ارشد‬‫ار‬‫با‬ ‫نیاز‬ ‫مورد‬ ‫موارد‬ ‫از‬ ‫خیلی‬ ‫که‬ ‫کردم‬ ‫مشاهده‬ ‫و‬ ‫شدم‬ ‫آشنا‬ ‫بیشتر‬ ‫کار‬
‫ها‬ ‫رشته‬ ‫درسی‬ ‫های‬ ‫واحد‬ ‫در‬ ‫شده‬ ‫داده‬ ‫آموزش‬ ‫های‬ ‫تئوری‬‫ی‬‫دانشگاهی‬‫عنوان‬ ‫به‬ .‫باشد‬ ‫می‬ ‫متفاوت‬
‫داده‬ ‫پایگاه‬ ‫از‬ ‫اطالعات‬ ‫نگهداری‬ ‫برای‬ ‫ها‬ ‫شرکت‬ ‫اغلب‬ ‫کار‬ ‫محیط‬ ‫در‬ ‫نمونه‬SQL.‫کردند‬ ‫می‬ ‫استفاده‬
‫رقابتی‬ ‫بازار‬ ‫در‬ ‫ماندن‬ ‫باقی‬ ‫برای‬ ‫که‬ ‫دیگری‬ ‫اطالعات‬ ‫یادگیری‬ ‫به‬ ‫کنم‬ ‫شروع‬ ‫که‬ ‫شد‬ ‫باعث‬ ‫موضوع‬ ‫این‬
.‫داشتم‬ ‫نیاز‬ ‫کار‬
‫سر‬ ‫بر‬ ‫موجود‬ ‫موانع‬ ‫از‬ ‫یکی‬( ‫فردی‬ ‫آموزش‬ ‫و‬ ‫مطالعه‬ ‫راه‬Self Study)‫متنوع‬ ‫و‬ ‫زیاد‬ ‫بسیار‬ ‫منابع‬ ‫وجود‬ ،
‫بود‬ ‫حوزه‬ ‫هر‬ ‫در‬‫می‬ ‫بیشتر‬ ‫منبع‬ ‫انتخاب‬ ‫جهت‬ ‫سردرگمی‬ ‫حس‬ ،‫منابع‬ ‫برای‬ ‫انتخاب‬ ‫حق‬ ‫رفتن‬ ‫باال‬ ‫با‬ ‫که‬
‫شود‬‫داده‬ ‫پایگاه‬ ‫در‬ ‫مثال‬ .SQL‫آموزشی‬ ‫منابع‬ ‫تعداد‬ ،‫افزار‬ ‫نرم‬ ‫این‬ ‫از‬ ‫زیاد‬ ‫های‬ ‫نسخه‬ ‫وجود‬ ‫علت‬ ‫به‬
‫کامپیوتر‬ ‫حوزه‬ ‫در‬ ‫افراد‬ ‫دانش‬ ‫برپایه‬ ‫و‬ ‫تخصصی‬ ‫بسیار‬ ‫ها‬ ‫آموزش‬ ‫این‬ ‫اغلب‬ ‫و‬ ‫بودند‬ ‫می‬ ‫زیاد‬ ‫بسیار‬ ‫هم‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
3 | Saba Creative Company
‫های‬ ‫تئوری‬ ‫خصوص‬ ‫در‬ ‫منابع‬ ‫آن‬ ‫ابتدای‬ ‫در‬ ‫سنگین‬ ‫بسیار‬ ‫های‬ ‫فصل‬ ‫وجود‬ ‫همچنین‬ ‫و‬ ‫موضوع‬ ‫این‬ .‫بود‬
‫و‬ ‫داده‬ ‫پایگاه‬،‫تخصصی‬ ‫عبارات‬ ‫از‬ ‫کردن‬ ‫استفاده‬‫نمود‬ ‫می‬ ‫سخت‬ ‫بسیار‬ ‫را‬ ‫فردی‬ ‫آموزش‬ ‫فرآیند‬.
‫فرد‬ ‫یک‬ ‫دانشی‬ ‫قدرت‬ ‫از‬ ‫صحبت‬ ‫هروقت‬ ‫گذشته‬ ‫در‬‫بود‬‫می‬ ‫تاکید‬ ‫فرد‬ ‫جستجوی‬ ‫توانایی‬ ‫بر‬ ‫بیشتر‬ ،‫گردید‬
‫طریق‬ ‫این‬ ‫از‬ ‫که‬‫فرد‬ ‫آن‬‫که‬ ‫صورتی‬ ‫در‬،‫شود‬ ‫می‬ ‫مواجه‬ ‫سوالی‬ ‫با‬‫کردن‬ ‫جستجو‬ ‫با‬ ‫تا‬ ‫دارد‬ ‫توانایی‬ ‫چقدر‬
‫ص‬ ‫در‬‫را‬ ‫افراد‬ ‫این‬ ‫و‬ ‫برسد‬ ‫خود‬ ‫سوال‬ ‫پاسخ‬ ‫به‬ ‫اینترنت‬ ‫فحات‬Search Engine‫می‬ ‫معرفی‬‫نمودند‬‫اما‬ .
‫فرد‬ ‫آن‬ ‫که‬ ‫شود‬ ‫می‬ ‫توجه‬ ‫نکته‬ ‫این‬ ‫به‬ ‫بیشتر‬ ،‫شود‬ ‫می‬ ‫فرد‬ ‫یک‬ ‫دانشی‬ ‫قدرت‬ ‫از‬ ‫صحبت‬ ‫وقتی‬ ‫امروزه‬
‫ا‬ ‫نموده‬ ‫کسب‬ ‫که‬ ‫را‬ ‫دانشی‬ ‫تواند‬ ‫می‬ ‫و‬ ‫دارد‬ ‫دانش‬ ‫انتشار‬ ‫توانایی‬ ‫میزان‬ ‫چه‬ ‫بحث‬ ‫مورد‬ ‫حوزه‬ ‫در‬‫ست‬
‫استفاده‬ ‫وی‬ ‫توسط‬ ‫شده‬ ‫ارائه‬ ‫مطالب‬ ‫از‬ ‫بتوانند‬ ‫نیاز‬ ‫صورت‬ ‫در‬ ‫سایرین‬ ‫و‬ ‫دهد‬ ‫انتقال‬ ‫نیز‬ ‫دیگران‬ ‫به‬
.‫نمایند‬‫امروزه‬ ‫عبارتی‬ ‫به‬Uploader‫انتقال‬ ‫با‬ ‫آن‬ ‫در‬ ‫که‬ ‫آید‬ ‫می‬ ‫حساب‬ ‫به‬ ‫ارزشی‬ ‫مالک‬ ‫یک‬ ‫بودن‬
‫ا‬ ‫بهبود‬ ‫و‬ ‫رشد‬ ‫باعث‬ ‫دیگران‬ ‫به‬ ‫خود‬ ‫دانش‬‫هرچه‬ ‫و‬ ،‫شویم‬ ‫می‬ ‫مختلف‬ ‫های‬ ‫زمینه‬ ‫در‬ ‫فراد‬‫مطالب‬ ‫کیفیت‬
.‫شوند‬ ‫معرفی‬ ‫رفرنس‬ ‫یک‬ ‫عنوان‬ ‫به‬ ‫تواند‬ ‫می‬ ‫باشد‬ ‫باالتر‬ ‫شده‬ ‫ارائه‬
‫که‬ ‫گرفتم‬ ‫تصمیم‬ ‫علت‬ ‫همین‬ ‫به‬،‫بازارکار‬ ‫از‬ ‫تجربیاتم‬ ‫و‬ ‫ام‬ ‫دیده‬ ‫که‬ ‫هایی‬ ‫آموزش‬ ‫برپابه‬‫آموزشی‬ ‫فایل‬
‫و‬ ‫باشد‬ ‫نیاز‬ ‫مورد‬ ‫واژگان‬ ‫و‬ ‫اطالعات‬ ‫با‬ ‫افراد‬ ‫کردن‬ ‫آشنا‬ ‫حد‬ ‫در‬ ‫صرفا‬ ‫ها‬ ‫تئوری‬ ‫آن‬ ‫در‬ ‫تا‬ ‫کنم‬ ‫تهیه‬‫سپس‬
‫داده‬ ‫پایگاه‬ ‫با‬ ‫ارتباط‬ ‫برقراری‬ ‫برای‬ ‫توانایی‬ ‫جهت‬ ‫فرد‬ ‫هر‬ ‫که‬ ‫ای‬ ‫پایه‬ ‫دستورات‬ ‫به‬SQL‫معرفی‬ ،‫دارد‬ ‫نیاز‬
.‫شود‬
‫جدید‬ ‫های‬ ‫نسخه‬ ‫در‬ ‫که‬ ‫دستورهایی‬ ‫از‬ ‫برخی‬ ‫کتاب‬ ‫این‬ ‫سوم‬ ‫ویرایش‬ ‫در‬SQL‫برای‬ ‫و‬ ‫است‬ ‫شده‬ ‫اضافه‬
‫که‬ ‫دستورات‬ ‫از‬ ‫برخی‬ ‫و‬ ‫اضافه‬ ‫متن‬ ‫به‬ ‫است‬ ‫نیاز‬ ‫مورد‬ ‫ای‬ ‫پایه‬ ‫اطالعات‬‫منسوخ‬ ‫جدید‬ ‫های‬ ‫نسخه‬ ‫در‬
.‫است‬ ‫گردیده‬ ‫حذف‬ ‫است‬ ‫شده‬
‫متن‬ ‫این‬‫شوم‬ ‫می‬ ‫ممنون‬ ‫پس‬ .‫بود‬ ‫نخواهد‬ ... ‫و‬ ‫کاربردی‬ ،‫مفهومی‬ ،‫امالیی‬ ‫اشتباهات‬ ‫از‬ ‫خالی‬ ‫قطعا‬
‫که‬،‫پیشنهادات‬ ،‫نظرات‬‫اشتباهات‬... ‫و‬‫خود‬‫ایمیل‬ ‫طریق‬ ‫از‬ ‫را‬@gmail.com84Ehsan.Kamali.‫و‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
4 | Saba Creative Company
‫آدرس‬ ‫به‬ ‫من‬ ‫لینکدین‬ ‫پروفایل‬ ‫در‬ ‫یا‬Linkedin‫آن‬ ‫اصالح‬ ‫با‬ ‫تا‬ ‫بدید‬ ‫اطالع‬‫برا‬ ‫مفید‬ ‫منبع‬ ‫یک‬ ‫ها‬‫ی‬
‫مندان‬ ‫عالقه‬.‫کنیم‬ ‫ایجاد‬
‫کمالی‬ ‫احسان‬
‫سوم‬ ‫ویرایش‬
‫آبان‬1398
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
5 | Saba Creative Company
‫فهرست‬
‫مقدمه‬..............................................................................................................................................................2
‫مفاه‬‫ی‬‫م‬............................................................................................................................................................8
Database...................................................................................................................................................8
Table........................................................................................................................................................10
Field..........................................................................................................................................................11
Record......................................................................................................................................................12
SQL‫چ‬‫ی‬‫ست‬................................................................................................................................................13
‫تار‬‫ی‬‫خچه‬......................................................................................................................................................13
‫ها‬ ‫استاندارد‬.................................................................................................................................................15
‫مزا‬‫ی‬‫ا‬‫ی‬‫از‬ ‫استفاده‬SQL..................................................................................................................................16
‫معا‬‫ی‬‫ب‬‫از‬ ‫استفاده‬SQL.................................................................................................................................16
‫پ‬‫ی‬‫ش‬‫ن‬‫ی‬‫از‬‫ها‬‫ی‬‫آموزش‬SQL Server...............................................................................................................17
‫دستورات‬........................................................................................................................................................18
SELECT.....................................................................................................................................................18
WHERE.....................................................................................................................................................20
AND..........................................................................................................................................................22
LIKE..........................................................................................................................................................22
JOIN.........................................................................................................................................................24
‫دستورات‬ ‫انواع‬JOIN..................................................................................................................................26
AGGREGATE FUNCTIONS:..........................................................................................................................31
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
6 | Saba Creative Company
AVG.........................................................................................................................................................31
COUNT....................................................................................................................................................32
COUNT_BIG.............................................................................................................................................32
MAX........................................................................................................................................................32
MIN........................................................................................................................................................33
SUM.......................................................................................................................................................33
GROUP BY..............................................................................................................................................34
WITH ROLLUP.........................................................................................................................................35
WITH CUBE.............................................................................................................................................37
GROUPING.............................................................................................................................................38
HAVING...................................................................................................................................................39
UNION‫و‬UNION ALL...............................................................................................................................40
EXCEPT...................................................................................................................................................43
INTERSECT..............................................................................................................................................44
CROSS APPLY..........................................................................................................................................45
Scalar Valued Function..............................................................................................................................53
‫تار‬ ‫توابع‬‫ی‬‫خ‬‫زمان‬ ‫و‬......................................................................................................................................53
GETDATE............................................................................................................................................53
DATEPART..........................................................................................................................................53
DATEADD...........................................................................................................................................53
DATEDIFF...........................................................................................................................................54
‫ا‬ ‫رشته‬ ‫توابع‬‫ی‬.............................................................................................................................................55
LEFT.....................................................................................................................................................55
RIGHT..................................................................................................................................................56
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
7 | Saba Creative Company
UPPER................................................................................................................................................57
LOWER...............................................................................................................................................58
SUBSTRING..........................................................................................................................................59
REPLACE..............................................................................................................................................60
STUFF...................................................................................................................................................61
LEN.......................................................................................................................................................61
‫اضاف‬ ‫توابع‬‫ی‬...............................................................................................................................................62
DATALENGTH......................................................................................................................................62
CHARINDEX........................................................................................................................................63
‫دستورات‬Rank...........................................................................................................................................65
ROW_NUMBER...................................................................................................................................65
RANK..................................................................................................................................................67
DENSE_RANK.....................................................................................................................................68
NTILE...................................................................................................................................................69
‫دستورات‬Paging........................................................................................................................................71
OFFSET................................................................................................................................................71
PIVOT.................................................................................................................................................74
Temp Table............................................................................................................................................78
#TempTable.......................................................................................................................................78
@TempTable.......................................................................................................................................79
CTE......................................................................................................................................................80
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
8 | Saba Creative Company
‫مفاهیم‬
‫آموزش‬ ‫از‬ ‫بهتر‬ ‫درک‬ ‫برای‬SQL‫تا‬ ‫است‬ ‫نیاز‬ ‫اطالعاتی‬ ‫بانک‬ ‫بهتر‬ ‫شناخت‬ ‫و‬‫ابتدا‬‫مفاهیم‬ ‫از‬ ‫برخی‬ ‫با‬
.‫شویم‬ ‫آشنا‬
Database
‫اطالعاتی‬ ‫بانک‬(DataBase)‫منظم‬ ‫ساختار‬ ‫با‬ ‫اطالعات‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫به‬ ‫داده‬ ‫پایگاه‬ ‫یا‬‫گفته‬‫می‬‫شود‬.
‫این‬‫پایگاه‬‫های‬‫اطالعاتی‬ً‫ال‬‫معمو‬‫در‬‫قالبی‬‫که‬‫برا‬‫دسترسی‬ ‫قابل‬ ‫و‬ ‫خواندن‬ ‫قابل‬ ‫ها‬ ‫رایانه‬ ‫و‬ ‫ها‬ ‫دستگاه‬ ‫ی‬
‫شوند‬ ‫می‬ ‫ذخیره‬ ‫باشند‬.
‫است‬ ‫اطالعات‬ ‫از‬ ‫یافته‬ ‫سازمان‬ ‫ای‬ ‫مجموعه‬ ‫اصل‬ ‫در‬ ‫داده‬ ‫پایگاه‬.‫ای‬‫سرچشمه‬ ‫رایانه‬ ‫دانش‬ ‫از‬ ‫واژه‬ ‫ن‬
‫پایگاه‬ ‫اروپایی‬ ‫مرکز‬ ‫که‬ ‫است‬ ‫ای‬ ‫اندازه‬ ‫به‬ ‫وسعت‬ ‫این‬ ،‫دارد‬ ‫نیز‬ ‫عمومی‬ ‫و‬ ‫وسیع‬ ‫کاربر‬ ‫،اما‬ ‫گیرد‬ ‫می‬
‫برای‬ ‫الکترونیکی‬ ‫غیر‬ ‫تعاریف‬ ‫شامل‬ )‫کند‬ ‫می‬ ‫ایجاد‬ ‫داده‬ ‫پایگاه‬ ‫برای‬ ‫ای‬ ‫خردمندانه‬ ‫تعاریف‬ ‫(که‬ ‫داده‬
‫باشد‬ ‫می‬ ‫داده‬ ‫پایگاه‬.
‫عبارتی‬ ‫به‬)‫(اصولی‬ ‫سیستماتیک‬ ‫روش‬ ‫یک‬ ‫با‬ ‫رایانه‬ ‫در‬ ‫شده‬ ‫ذخیره‬ ‫های‬ ‫رکورد‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫داده‬ ‫پایگاه‬
‫دهد‬ ‫پاسخ‬ ‫کاربر‬ ‫سواالت‬ ‫به‬ ‫تواند‬ ‫می‬ ‫که‬ ‫است‬ ‫ای‬ ‫رایانه‬ ‫برنامه‬ ‫یک‬ ‫مثل‬.،‫بهتر‬ ‫بازیابی‬ ‫و‬ ‫ذخیره‬ ‫برای‬
‫گر‬ ‫می‬ ‫سازماندهی‬ ‫ها‬ ‫رویداد‬ ‫یا‬ ‫ای‬ ‫داده‬ ‫اجزای‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫صورت‬ ‫به‬ ‫معموال‬ ‫رکورد‬ ‫هر‬‫دد‬.
‫کاربرد‬ ‫تصمیم‬ ‫یک‬ ‫اتخاذ‬ ‫برای‬ ‫که‬ ‫شود‬ ‫می‬ ‫تبدیل‬ ‫اطالعاتی‬ ‫به‬ ‫پرسش‬ ‫هر‬ ‫در‬ ‫شده‬ ‫بازیابی‬ ‫های‬ ‫بخش‬
‫دارد‬.‫را‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫ای‬ ‫داده‬ ‫های‬ ‫پایگاه‬ ‫بین‬ ‫پاسخ‬ ‫و‬ ‫پرسش‬ ‫و‬ ‫مدیریت‬ ‫برای‬ ‫که‬ ‫ای‬ ‫رایانه‬ ‫برنامه‬
‫اختصار‬ ‫به‬ ‫یا‬ ‫ای‬ ‫داده‬ ‫پایگاه‬ ‫سیستم‬ ‫مدیر‬(DBMS)‫نامیم‬ ‫می‬.
‫اطالعات‬ ‫بانک‬‫ی‬‫در‬‫ا‬ ‫مجموعه‬ ‫واقع‬‫ی‬‫آور‬ ‫جمع‬ ‫اطالعات‬ ‫از‬‫ی‬‫در‬ ‫شده‬‫ی‬‫ک‬‫کنار‬ ‫در‬ ‫و‬ ‫مکان‬‫ی‬‫کد‬‫ی‬‫گر‬‫است‬
‫ا‬ ‫گونه‬ ‫به‬ ‫و‬‫ی‬‫کنار‬ ‫در‬‫ی‬‫کد‬‫ی‬‫گر‬‫ده‬ ‫سامان‬ ‫و‬ ‫اند‬ ‫گرفته‬ ‫قرار‬‫ی‬‫دسترس‬ ‫گونه‬ ‫هر‬ ‫تا‬ ‫اند‬ ‫شده‬‫ی‬‫(ذخ‬ ‫آن‬ ‫به‬‫ی‬‫ره‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
9 | Saba Creative Company
‫باز‬ ‫و‬‫ی‬‫اب‬‫ی‬‫اطالعات‬‫راحت‬ ‫با‬ )‫ی‬‫ب‬ ‫چه‬ ‫هر‬ ‫سرعت‬ ‫و‬‫ی‬‫شتر‬‫شود‬ ‫انجام‬.‫ها‬ ‫بانک‬ ‫در‬‫ی‬‫اطالعات‬‫ی‬‫ا‬ ‫رابطه‬‫ی‬
(Relational DataBase)‫سامانده‬ ،‫ی‬( ‫ها‬ ‫جدول‬ ‫اساس‬ ‫بر‬ ‫اطالعات‬Tables‫م‬ ‫صورت‬ )‫ی‬‫گ‬‫ی‬‫رد‬.
‫اطالعات‬ ‫بانک‬‫ی‬( ‫سرور‬DataBase Server)‫ی‬ ،‫ک‬‫افزار‬ ‫نرم‬ ‫برنامه‬‫ی‬‫سرو‬ ‫که‬ ‫است‬‫ی‬‫س‬‫اطالعات‬ ‫بانک‬‫ی‬
‫برا‬‫ی‬‫ذخ‬‫ی‬‫ره‬‫باز‬ ‫و‬‫ی‬‫اب‬‫ی‬‫برا‬ ‫را‬ ‫اطالعات‬‫ی‬‫س‬‫ی‬‫ستم‬‫ها‬‫ی‬‫د‬‫ی‬‫گر‬‫و‬‫ی‬‫ا‬‫ها‬ ‫برنامه‬‫ی‬‫افزار‬ ‫نرم‬‫ی‬‫کاربرد‬‫ی‬‫د‬‫ی‬‫گر‬‫فراهم‬
‫م‬‫ی‬‫کند‬.‫ا‬‫ی‬‫ن‬‫اطالعات‬ ‫بانک‬ ‫با‬ ‫ها‬ ‫افزار‬ ‫نرم‬‫ی‬‫م‬ ‫سرور‬‫ی‬‫رو‬ ‫توانند‬‫ی‬‫ی‬‫ک‬‫س‬‫ی‬‫ستم‬‫و‬ ‫باشند‬ ‫نصب‬‫ی‬‫ا‬‫ا‬‫ی‬‫نکه‬
‫رو‬‫ی‬‫س‬‫ی‬‫ستم‬‫ها‬‫ی‬‫طر‬ ‫از‬ ‫و‬ ‫باشند‬ ‫نصب‬ ‫جداگانه‬‫ی‬‫ق‬‫ها‬ ‫شبکه‬‫ی‬‫داخل‬‫ی‬‫و‬‫ی‬‫ا‬‫ا‬ ‫بستر‬‫ی‬‫نترنت‬‫با‬‫ی‬‫کد‬‫ی‬‫گر‬‫در‬
‫باشند‬ ‫ارتباط‬.
‫موجودیت‬ ‫برای‬ ‫ای‬ ‫یافته‬ ‫ساخت‬ ‫توصیف‬ ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫در‬ ‫نوعا‬‫داده‬ ‫پایگاه‬ ‫در‬ ‫شده‬ ‫داری‬ ‫نگه‬ ‫های‬
‫شود‬ ‫می‬ ‫شناخته‬ ‫مدل‬ ‫یا‬ ‫الگو‬ ‫یک‬ ‫با‬ ‫توصیف‬ ‫این‬ :‫دارد‬ ‫وجود‬.‫و‬ ‫داده‬ ‫های‬ ‫پایگاه‬ ‫اشیا‬ ،‫توصیفی‬ ‫مدل‬
‫دهد‬ ‫می‬ ‫نشان‬ ‫را‬ ‫آنها‬ ‫بین‬ ‫ارتباط‬.‫به‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫ها‬ ‫مدل‬ ‫این‬ ‫سازماندهی‬ ‫برای‬ ‫متفاوتی‬ ‫های‬ ‫روش‬
‫داده‬ ‫پایگاه‬ ‫های‬ ‫مدل‬ ‫آنها‬‫می‬‫گوییم‬.
‫ت‬ ‫پرکاربرد‬‫صورت‬ ‫به‬ ‫عام‬ ‫طور‬ ‫به‬ ‫که‬ ‫است‬ ‫ای‬ ‫رابطه‬ ‫مدل‬ ،‫شود‬ ‫می‬ ‫استفاده‬ ‫بسیار‬ ‫امروزه‬ ‫که‬ ‫مدلی‬ ‫رین‬
‫ستونها‬ ‫و‬ ‫ها‬ ‫سطر‬ ‫از‬ ‫هریک‬ ‫که‬ ‫مرتبط‬ ‫جداول‬ ‫فرم‬ ‫به‬ ‫که‬ ‫اطالعاتی‬ ‫تمام‬ ‫نمایش‬ :‫شود‬ ‫می‬ ‫تعریف‬ ‫زیر‬
‫است‬ ‫شده‬ ‫تشکیل‬)‫شود‬ ‫می‬ ‫برسی‬ ‫ریاضیات‬ ‫علم‬ ‫در‬ ‫آن‬ ‫حقیقی‬ ‫(تعریف‬.‫به‬ ‫ها‬ ‫وابستگی‬ ‫مدل‬ ‫این‬ ‫در‬
‫م‬ ‫کمک‬‫شود‬ ‫می‬ ‫داده‬ ‫نشان‬ ‫جدول‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫در‬ ‫مشترک‬ ‫قادیر‬.‫سلسله‬ ‫مدل‬ ‫مثل‬ ‫دیگری‬ ‫های‬ ‫مدل‬
‫دهند‬ ‫می‬ ‫نشان‬ ‫را‬ ‫ها‬ ‫ارتباط‬ ‫تری‬ ‫صریح‬ ‫طور‬ ‫به‬ ‫ای‬ ‫شبکه‬ ‫مدل‬ ‫و‬ ‫مراتب‬.
‫تعریف‬ ‫هم‬ ‫با‬ ‫مرتبط‬ ‫های‬ ‫رکورد‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫صورت‬ ‫به‬ ‫داده‬ ‫پایگاه‬ ‫اصطالح‬ ‫تر‬ ‫تخصصی‬ ‫مباحث‬ ‫در‬
‫شود‬ ‫می‬.‫یک‬ ‫ایجاد‬ ‫منظور‬ ‫به‬ ‫یکسان‬ ‫خصوصیات‬ ‫با‬ ‫هایی‬ ‫داده‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫ها‬ ‫ای‬ ‫حرفه‬ ‫از‬ ‫بسیاری‬
‫کنند‬ ‫می‬ ‫استفاده‬ ‫یکتا‬ ‫ای‬ ‫داده‬ ‫پایگاه‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
10 | Saba Creative Company
‫معموال‬DBMS،‫ارتباطی‬ :‫شوند‬ ‫می‬ ‫بندی‬ ‫تقسیم‬ ‫کنند‬ ‫می‬ ‫استفاده‬ ‫که‬ ‫هایی‬ ‫مدل‬ ‫اساس‬ ‫بر‬،‫گرا‬ ‫شی‬
‫آن‬ ‫امثال‬ ‫و‬ ‫ای‬ ‫شبکه‬.‫زبان‬ ‫تعیین‬ ‫به‬ ‫ای‬ ‫داده‬ ‫های‬ ‫مدل‬‫های‬‫مند‬ ‫عالقه‬ ‫داده‬ ‫های‬ ‫پایگاه‬ ‫به‬ ‫دسترسی‬
‫هستند‬.‫مهندسی‬ ‫از‬ ‫توجهی‬ ‫قابل‬ ‫بخش‬DBMS‫ها‬ ‫مدل‬ ‫از‬ ‫مستقل‬‫همچون‬ ‫هایی‬ ‫فاکتور‬ ‫به‬ ‫و‬ ‫باشد‬ ‫می‬
،‫همزمانی‬ ،‫اجرا‬‫وابس‬ ‫افزاری‬ ‫سخت‬ ‫خطاهای‬ ‫از‬ ‫بازیافت‬ ‫و‬ ‫جامعیت‬‫ت‬‫است‬ ‫ه‬.‫های‬ ‫تفاوت‬ ‫سطح‬ ‫این‬ ‫در‬
‫دارد‬ ‫وجود‬ ‫محصوالت‬ ‫بین‬ ‫بسیاری‬.
Table
‫پای‬ ‫در‬ ‫ها‬ ‫داده‬‫یا‬ ‫جدول‬ ‫داخل‬ ‫داده‬ ‫گاه‬Table‫میشوند‬ ‫ذخیره‬.‫هر‬Database‫چندین‬ ‫شامل‬ ‫میتواند‬
‫جدول‬‫باشد‬.‫است‬ ‫شده‬ ‫تشکیل‬ ‫ستون‬ ‫و‬ ‫سطر‬ ‫تعدادی‬ ‫از‬ ‫جدول‬ ‫هر‬.
‫به‬ ‫بسته‬ ‫دیتابیس‬ ‫در‬ ‫ها‬ ‫ستون‬ ‫تمام‬ ‫برای‬، ‫کنید‬ ‫تعریف‬ ‫را‬ ‫خود‬ ‫نظر‬ ‫مورد‬ ‫نوع‬ ‫میتوانید‬ ‫آن‬ ‫کارکرد‬ ‫نوع‬
‫باشد‬ ‫داشته‬ ‫مطابقت‬ ‫فیلد‬ ‫انتخابی‬ ‫نوع‬ ‫با‬ ‫بایستی‬ ‫میشود‬ ‫ذخیره‬ ‫فیلد‬ ‫هر‬ ‫درون‬ ‫که‬ ‫مقدارهایی‬‫ادامه‬ ‫(در‬
)‫شد‬ ‫خواهیم‬ ‫آشنا‬ ‫آن‬ ‫انواع‬ ‫با‬.
‫و‬ ‫ها‬ ‫ستون‬ ‫از‬ ‫که‬ ‫هم‬ ‫به‬ ‫وابسته‬ ‫و‬ ‫مرتبط‬ ‫شده‬ ‫ثبت‬ ‫اطالعات‬ ‫از‬ ‫است‬ ‫ای‬ ‫مجموعه‬ ‫یک‬ ‫جدول‬‫ها‬ ‫ردیف‬
‫است‬ ‫شده‬ ‫تشکیل‬.‫نگهداری‬ ‫و‬ ‫ذخیره‬ ‫برای‬ ‫که‬ ، ‫هستند‬ ‫داده‬ ‫پایگاه‬ ‫های‬ ‫سیستم‬ ‫عناصر‬ ‫مهمترین‬ ‫جداول‬
‫گیرند‬ ‫می‬ ‫قرار‬ ‫استفاده‬ ‫مورد‬ ‫اطالعات‬ ‫یافته‬ ‫سازمان‬.
‫است‬ ‫داده‬ ‫پایگاه‬ ‫از‬ ‫بخشی‬ ‫جدول‬.‫یک‬‫پایگاه‬‫داده‬‫از‬‫جداول‬‫مختلف‬‫تشکیل‬‫شده‬‫است‬.
‫مثال‬:‫ذخیره‬ ‫برای‬‫مختلف‬ ‫انواع‬ ‫سازی‬‫جداگانه‬ ‫جداول‬ ‫ایجاد‬ ‫نیازمند‬ ‫شما‬ ‫ها‬ ‫داده‬‫هستید‬ ‫ای‬.،‫مثال‬ ‫برای‬
‫مدیریت‬ ‫افزار‬ ‫نرم‬ ‫یک‬ ‫شما‬ ‫اگر‬‫مدرسه‬‫باشد‬ ‫زیر‬ ‫جداول‬ ‫ایجاد‬ ‫به‬ ‫نیاز‬ ‫است‬ ‫ممکن‬ ،‫دارید‬:
‫آموز‬ ‫دانش‬–‫آموزان‬ ‫دانش‬ ‫اطالعات‬ ‫نگهداری‬ ‫جهت‬ ‫جدولی‬
‫معلم‬–‫مدرسه‬ ‫معلمان‬ ‫اطالعات‬ ‫نگهداری‬ ‫جهت‬ ‫جدولی‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
11 | Saba Creative Company
‫درس‬–‫نگ‬ ‫جهت‬ ‫جدولی‬‫شوند‬ ‫می‬ ‫تدریس‬ ‫مدرسه‬ ‫آن‬ ‫در‬ ‫که‬ ‫هایی‬ ‫درس‬ ‫اطالعات‬ ‫هداری‬
‫غیاب‬ ‫و‬ ‫حضور‬–‫مدرسه‬ ‫آموزان‬ ‫دانش‬ ‫غیاب‬ ‫و‬ ‫حضور‬ ‫اطالعات‬ ‫نگهداری‬ ‫جهت‬ ‫جدولی‬
‫و‬...
Field
‫جدول‬ ‫یک‬ ‫ستون‬ ‫های‬ ‫خانه‬ ‫از‬ ‫یک‬ ‫هر‬ ‫به‬‫فیلد‬( Field )‫گویند‬ ‫می‬.‫آن‬ ‫خصوصیات‬ ‫از‬ ‫یکی‬ ‫فیلد‬ ‫هر‬
‫کند‬ ‫می‬ ‫مشخص‬ ‫آن‬ ‫مقدار‬ ‫همراه‬ ‫به‬ ‫را‬ ‫موجودیت‬.
‫بر‬ ‫در‬ ‫فیلد‬ ‫هر‬‫دارای‬ ‫که‬ ،‫باشد‬ ‫می‬ ‫موجودیت‬ ‫برای‬ ‫ویژگی‬ ‫و‬ ‫صفت‬ ‫یک‬ ‫گیرنده‬2‫است‬ ‫اصلی‬ ‫جزء‬:
‫کند‬ ‫می‬ ‫تعیین‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫صفت‬ ‫نام‬ :‫صفت‬ ‫اسم‬.‫خانوادگی‬ ‫نام‬ ،‫نام‬ ‫فیلد‬ ‫مثال‬ ‫برای‬،...‫و‬‫در‬
‫جدول‬‫اطالعات‬‫مربوط‬‫به‬‫شخص‬.
‫است‬ ‫نظر‬ ‫مورد‬ ‫صفت‬ ‫برای‬ ‫مقدار‬ ‫برگیرنده‬ ‫در‬ :‫صفت‬ ‫مقدار‬.‫مقدار‬ ‫مثال‬ ‫برای‬"‫سعید‬"‫به‬
‫نام‬ ‫فیلد‬ ‫برای‬ ‫مقدار‬ ‫عنوان‬.
‫یک‬ ‫نشانه‬ ‫فیلد‬ ‫یک‬‫است‬ ‫جدول‬ ‫در‬ ‫ستون‬.‫است‬ ‫فیلدها‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫رکورد‬ ‫یک‬.‫در‬ ‫رکوردها‬ ‫تمام‬
‫را‬ ‫فیلدها‬ ‫همان‬ ‫جدول‬ ‫همان‬‫داشت‬ ‫خواهند‬.
‫مثال‬ ‫عنوان‬ ‫به‬‫نام‬ ‫با‬ ‫جدول‬ ‫یک‬ ‫شما‬ ‫اگر‬“Students”‫است‬ ‫ممکن‬ ،‫باشید‬ ‫داشته‬‫فیلد‬‫مورد‬ ‫زیر‬ ‫های‬
‫باشند‬ ‫نیاز‬:
Name:‫آموز‬ ‫دانش‬ ‫خانوادگی‬ ‫نام‬ ‫و‬ ‫نام‬ ‫ذخیره‬ ‫برای‬
Address:‫آدرس‬ ‫ذخیره‬ ‫برای‬
DateofBirth:‫آموز‬ ‫دانش‬ ‫تولد‬ ‫تاریخ‬ ‫ذخیره‬ ‫برای‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
12 | Saba Creative Company
RegistrationDate:‫آموز‬ ‫دانش‬ ‫نام‬ ‫ثبت‬ ‫تاریخ‬ ‫ذخیره‬ ‫برای‬
...‫و‬
‫خواهد‬ ‫اضافه‬ ‫جدول‬ ‫آن‬ ‫موجود‬ ‫رکوردهای‬ ‫تمام‬ ‫به‬ ‫فیلد‬ ‫این‬ ،‫کنید‬ ‫اضافه‬ ‫جدول‬ ‫به‬ ‫را‬ ‫فیلدی‬ ‫شما‬ ‫اگر‬
‫شد‬.‫در‬ ‫جدول‬ ‫رکوردهای‬ ‫تمامی‬ ،‫فوق‬ ‫مثال‬ ‫در‬“Students”‫همان‬4‫داشت‬ ‫خواهند‬ ‫را‬ ‫فیلد‬.
Record
‫رکورد‬‫به‬‫سطرهای‬‫یک‬‫جدول‬‫رکورد‬( Record )‫میشود‬ ‫گفته‬.‫طبقه‬ ‫اطالعات‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫رکورد‬ ‫هر‬
‫درباره‬ ‫شده‬ ‫بندی‬‫موجودیت‬ ‫یک‬‫است‬ ‫خاص‬.
‫موجودیت‬،‫پدیده‬،‫را‬ ‫آن‬ ‫به‬ ‫مربوط‬ ‫اطالعات‬ ‫خواهیم‬ ‫می‬ ‫که‬ ‫است‬ ‫داده‬ ‫پایگاه‬ ‫محیط‬ ‫در‬ ‫فردی‬ ‫یا‬ ‫شی‬
‫کنیم‬ ‫نگهداری‬.
‫مثال‬:‫از‬ ‫عبارتند‬ ‫ها‬ ‫موجودیت‬ ‫انواع‬ ،‫آموزشی‬ ‫محیط‬ ‫یک‬ ‫داده‬ ‫پایگاه‬ ‫محیط‬ ‫در‬:‫دانشجو‬،‫کالس‬،
‫درسی‬ ‫واحدهای‬،‫استاد‬،‫دانشکده‬‫و‬...
‫نشان‬ ‫رکورد‬ ‫یک‬‫است‬ ‫جدول‬ ‫در‬ ‫ورودی‬ ‫یک‬ ‫دهنده‬.‫باشد‬ ‫داشته‬ ‫رکورد‬ ‫تعداد‬ ‫هر‬ ‫تواند‬ ‫می‬ ‫جدول‬ ‫یک‬.
‫داده‬ ‫پایگاه‬ ‫در‬ ‫رکورد‬ ‫از‬ ‫مثال‬:‫جدول‬ ‫شما‬ ‫اگر‬“Students”‫داشته‬ ‫آموزان‬ ‫دانش‬ ‫اطالعات‬ ‫ذخیره‬ ‫برای‬
‫یک‬ ‫جدول‬ ‫این‬ ‫در‬ ،‫باشید‬‫رکورد‬‫بود‬ ‫خواهد‬ ‫آموز‬ ‫دانش‬ ‫یک‬ ‫دهنده‬ ‫نشان‬.‫آموز‬ ‫دانش‬ ‫کردن‬ ‫اضافه‬ ‫برای‬
‫ب‬ ‫به‬‫جدول‬ ‫به‬ ‫رکورد‬ ‫یک‬ ‫باید‬ ،‫رنامه‬“Students”‫کنید‬ ‫اضافه‬.‫اطالعات‬ ‫ویرایش‬ ‫یا‬ ‫کردن‬ ‫پاک‬ ‫برای‬
‫کنید‬ ‫حذف‬ ‫جدول‬ ‫این‬ ‫از‬ ‫را‬ ‫رکورد‬ ‫یک‬ ‫شما‬ ‫باید‬ ‫هم‬ ‫آموز‬ ‫دانش‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
13 | Saba Creative Company
SQL‫چیست‬
SQL‫اینکه‬ ‫برای‬ ‫دیگر‬ ‫عبارت‬ ‫به‬ ‫است‬ ‫ها‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫اطالعات‬ ‫تغییر‬ ‫و‬ ‫دسترسی‬ ‫استاندارد‬ ‫زبان‬
‫بگوئیم‬sql‫چه‬:‫گفت‬ ‫باید‬ ‫است‬ ‫چیزی‬"‫جبر‬ ‫ریاضی‬ ‫و‬ ‫پایین‬ ‫سطح‬ ‫زبان‬ ‫بر‬ ‫مبتنی‬ ‫باال‬ ‫سطح‬ ‫است‬ ‫زبانی‬
‫رابطه‬‫داده‬ ‫بازیابی‬ ‫و‬ ،‫تغییر‬ ،‫ایجاد‬ ‫برای‬ ‫که‬ ‫ای‬‫به‬ ‫آنها‬ ‫روی‬ ‫بر‬ ‫عملیات‬ ‫همچنین‬ ‫و‬ ‫ها‬‫می‬ ‫کار‬‫رود‬."
‫عبارت‬SQL‫مخفف‬Structured Query Language‫است‬ ‫یافته‬ ‫ساخت‬ ‫جستجوی‬ ‫زبان‬ ‫همان‬ ‫یا‬.
SQL‫شما‬ ‫به‬‫را‬ ‫آنها‬ ‫و‬ ‫کرده‬ ‫پیدا‬ ‫دسترسی‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫موجود‬ ‫اطالعات‬ ‫به‬ ‫تا‬ ‫دهد‬ ‫می‬ ‫را‬ ‫امکان‬ ‫این‬
‫دهید‬ ‫تغییر‬.
‫تاریخچه‬
‫اصلی‬ ‫منشأ‬SQL‫مقاله‬ ‫به‬‫سال‬1970‫کاد‬ ‫ادگار‬‫عنوان‬ ‫تحت‬«‫رابطه‬ ‫مدل‬‫داده‬ ‫ای‬‫بانک‬ ‫برای‬ ‫ها‬‫های‬
‫داده‬ ‫بزرگ‬‫اشتراکی‬ ‫های‬»‫بازمی‬‫دهه‬ ‫در‬ .‫گردد‬70‫شرکت‬ ‫از‬ ‫گروهی‬IBM‫شهر‬ ‫در‬‫خوزه‬ ‫سان‬‫روی‬ ‫بر‬
‫سیستم‬‫داده‬ ‫پایگاه‬‫های‬‫سیستم‬R‫می‬ ‫کار‬ ‫مقاله‬ ‫این‬ ‫به‬ ‫توجه‬ ‫بدون‬‫زبان‬ ‫و‬ ‫کردند‬SEQUEL‫منظور‬ ‫به‬ ‫را‬
‫و‬ ‫عملیات‬‫اطالعات‬ ‫بازیابی‬‫سیستم‬ ‫در‬ ‫شده‬ ‫ذخیره‬R‫چه‬ ‫اگر‬ .‫کردند‬ ‫ایجاد‬SQL‫تالش‬ ‫از‬ ‫ناشی‬‫کاد‬ ‫های‬
‫ریموند‬ ‫و‬ ‫چامبرلین‬ ‫دونالد‬ ‫اما‬ ‫بود‬‫زبان‬ ‫طراحان‬ ‫عنوان‬ ‫به‬ ‫بویس‬SEQUEL‫می‬ ‫شناخته‬‫شوند‬.
‫رابطه‬ ‫مدل‬ ‫مزایای‬ ‫مورد‬ ‫در‬ ‫مباحثی‬ ‫و‬ ‫اطالعاتی‬ ‫بانک‬ ‫فناوری‬ ‫زمینه‬ ‫در‬ ‫سمینارهایی‬‫برگزار‬ ‫جدید‬ ‫ای‬
‫تا‬ .‫گردید‬1976‫که‬ ‫بود‬ ‫مشخص‬IBM‫رابطه‬ ‫اطالعاتی‬ ‫بانک‬ ‫فناوری‬ ‫جدی‬ ‫طرفدار‬ ‫که‬‫توجه‬ ،‫بوده‬ ‫ای‬
‫زبان‬ ‫به‬ ‫نسبت‬ ‫زیادی‬SEQUEL.‫دارد‬‫سیستم‬ ‫زمینه‬ ‫در‬ ‫تبلیغات‬R‫در‬ ‫مهندسین‬ ‫از‬ ‫گروهی‬ ‫جذب‬ ‫باعث‬
‫در‬ ‫پارک‬ ‫منلو‬‫کالیفرنیا‬‫تحقیقات‬ ‫که‬ ‫رسیدند‬ ‫نتیجه‬ ‫این‬ ‫به‬ ‫گروه‬ ‫این‬ .‫گردید‬IBM‫بازار‬ ‫یک‬ ‫به‬ ‫منجر‬
‫برای‬ ‫تجاری‬‫بانک‬‫رابطه‬ ‫اطالعاتی‬ ‫های‬‫ای‬‫گردید‬ ‫خواهد‬.
‫در‬1977‫اینک‬ ‫نام‬ ‫به‬ ‫شرکتی‬ ‫گروه‬ ‫این‬(Inc)‫سافتویر‬ ‫رلیشنال‬ ‫و‬(Relational Software)‫تأسیس‬
‫یک‬ ‫تا‬ ‫نمودند‬‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬‫داده‬ ‫های‬‫رابطه‬‫اساس‬ ‫بر‬ ‫ای‬SEQUEL‫بساز‬‫نام‬ ‫به‬ ‫محصولی‬ .‫ند‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
14 | Saba Creative Company
Oracle‫در‬1979‫اولین‬ ‫و‬ ،‫گردید‬ ‫عرضه‬‫داده‬ ‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬‫رابطه‬‫این‬ ‫به‬ .‫آمد‬ ‫وجود‬ ‫به‬ ‫ای‬
‫محصول‬ ‫ترتیب‬Oracle‫محصول‬ ‫اولین‬ ‫گردید‬ ‫باعث‬IBM‫مدت‬ ‫برای‬2.‫باشد‬ ‫رکود‬ ‫دچار‬ ‫بازار‬ ‫در‬ ‫سال‬
‫دیجیتال‬ ‫وکس‬ ‫کامپیوترهای‬ ‫مینی‬ ‫روی‬ ‫بر‬ ‫محصول‬ ‫این‬(VAx Digital)‫می‬ ‫اجرا‬‫از‬ ‫خیلی‬ ‫که‬ ‫شد‬
‫بزرگ‬ ‫کامپیوترهای‬IBM‫ارزان‬‫بودند‬ ‫تر‬.
‫نام‬ ‫با‬ ‫شرکت‬ ‫این‬ ‫امروزه‬Oracle‫سیستم‬ ‫فروشنده‬ ‫اولین‬‫مدیریت‬ ‫های‬‫اطالعاتی‬ ‫بانک‬‫رابطه‬.‫است‬ ‫ای‬
‫آزم‬ ‫استادان‬‫ایشگاه‬‫در‬ ‫کامپیوتر‬ ‫های‬‫کالیفرنیا‬ ‫برکلی‬ ‫دانشگاه‬‫د‬ ‫نیز‬‫دهه‬ ‫نیمه‬ ‫ر‬1970‫تحقیق‬ ‫مشغول‬
‫زمینه‬ ‫در‬‫بانک‬‫اطالعاتی‬ ‫های‬‫رابطه‬‫تحقیق‬ ‫تیم‬ ‫(مانند‬ ‫بودن‬ ‫ای‬IBM‫نمونه‬ ‫یک‬ ‫نیز‬ ‫فوق‬ ‫گروه‬ ،)
‫از‬‫مدیریت‬ ‫سامانه‬‫رابطه‬ ‫داده‬ ‫پایگاه‬‫اینگرس‬ ‫را‬ ‫خود‬ ‫سیستم‬ ‫و‬ ‫نمودند‬ ‫ایجاد‬ ‫ای‬(Ingres)‫نام‬‫نهادند‬.
‫پرس‬ ‫زبان‬ ‫یک‬ ‫شامل‬ ‫اینگرس‬ ‫پروژه‬‫نام‬ ‫به‬ ‫وجو‬QUEL‫از‬ ‫چه‬ ‫اگر‬ ،‫بود‬SEQUEL‫تر‬ ‫یافته‬ ‫ساخت‬ ‫خیلی‬
‫به‬ ‫آن‬ ‫شباهت‬ ‫اما‬ ،‫بود‬‫انگ‬ ‫زبان‬‫لیسی‬‫بود‬ ‫کمتر‬.
‫حالیکه‬ ‫در‬Oracle‫و‬Ingres‫سیستم‬ ‫پروژه‬ ،‫بودند‬ ‫رقابت‬ ‫در‬ ‫تجاری‬ ‫محصوالت‬ ‫ارائه‬ ‫برای‬R‫شرکت‬
IBM‫بوده‬ ‫تالش‬ ‫در‬‫نام‬ ‫با‬ ‫تجاری‬ ‫ل‬ ‫محصو‬ ‫یک‬ ‫که‬ ‫است‬SQL/Data system‫یا‬ (SQL/DS)‫عرضه‬
.‫نماید‬IBM‫موجودیت‬SQL/DS‫در‬ ‫را‬1981‫در‬ ‫و‬ ،‫اعالم‬1982‫در‬ .‫نمود‬ ‫خود‬ ‫محصول‬ ‫عرضه‬ ‫به‬ ‫شروع‬
‫سال‬1983،IBM‫نسخه‬ ‫یک‬SQL/DS‫برای‬ ‫را‬VM/CMS‫(سیستم‬‫بزرگ‬ ‫کامپیوتر‬ ‫در‬ ‫که‬ ‫عاملی‬IBM
‫نمود‬ ‫اعالم‬ ،)‫بود‬ ‫شده‬ ‫استفاده‬ ً‫ا‬‫غالب‬.
‫سال‬ ‫در‬ ‫همچنین‬1983‫شرکت‬IBM‫محصول‬ ،DB2‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬ ‫یک‬ ‫که‬ ‫نمود‬ ‫معرفی‬ ‫را‬
‫رابطه‬ ‫داده‬‫سیستم‬ ‫برای‬ ‫ای‬.‫بود‬ ‫شرکت‬ ‫آن‬ ‫بزرگ‬ ‫های‬DB2‫سیستم‬ ‫تحت‬‫عامل‬VMS‫(سیستم‬‫عامل‬
‫می‬ ‫اجرا‬ )‫بزرگ‬ ‫کامپیوتری‬ ‫مراکز‬‫نسخه‬ ‫اولین‬ .‫شد‬DB2‫در‬1985‫مسئولین‬ ‫و‬ ،‫گردید‬ ‫عرضه‬IBM‫اعالم‬
‫نرم‬ ‫تکنولوژی‬ ‫برای‬ ‫استراتژیک‬ ‫برنامه‬ ‫یک‬ ‫محصول‬ ‫این‬ ‫که‬ ‫نمودند‬‫افزاری‬IBM‫می‬‫تاریخ‬ ‫آن‬ ‫از‬ .‫باشد‬
‫تاکنون‬DB2‫رابطه‬ ‫داده‬ ‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬‫و‬ ‫بوده‬ ‫شاخصی‬ ‫ای‬IBM‫ا‬‫زبان‬ ‫و‬ ‫نموده‬ ‫حمایت‬ ‫آن‬ ‫ز‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
15 | Saba Creative Company
«SEQUEL DB2»‫بوده‬ ‫اطالعاتی‬ ‫بانک‬ ‫زبان‬ ‫عملی‬ ‫استاندارد‬‫است‬.‫مخفف‬SEQUEL‫به‬ ‫بعدها‬SQL
‫تغ‬‫یی‬‫ر‬‫ز‬ ‫کرد‬‫ی‬‫را‬SEQUEL‫ی‬‫ک‬‫تجار‬ ‫عالمت‬‫ی‬‫هواپ‬ ‫شرکت‬ ‫از‬‫ی‬‫ما‬‫یی‬‫س‬ ‫هاوکر‬‫ی‬‫دل‬‫ی‬‫بر‬‫ی‬‫تان‬‫ی‬‫ا‬.‫بود‬
‫ها‬ ‫استاندارد‬
‫سال‬ ‫در‬1986‫استاندارد‬ ‫های‬ ‫گروه‬ ،ANSI (American National Standards Institute)‫و‬ISO
(International Organization for Standardization)‫استاندارد‬ ‫تعریف‬«‫داده‬ ‫پایگاه‬ ‫زبان‬SQL»
‫از‬ ‫مختلفی‬ ‫های‬ ‫استاندارد‬ ‫کنون‬ ‫تا‬ ‫زمان‬ ‫آن‬ ‫از‬ .‫اند‬ ‫پذیرفته‬ ‫رسمی‬ ‫طور‬ ‫به‬ ‫را‬SQL‫که‬ ‫است‬ ‫شده‬ ‫عرضه‬
‫های‬ ‫سال‬ ‫در‬ ‫آنها‬1989،1992،1996،1999،2003،2006،2008،2011،2016‫اخیرا‬ ‫و‬2019‫منتشر‬
.‫اند‬ ‫شده‬
‫با‬ ‫که‬ ‫کارهایی‬SQL‫دهید‬ ‫انجام‬ ‫توانید‬ ‫می‬:
‫اجرای‬query‫داده‬ ‫پایگاه‬ ‫در‬ ‫ها‬
‫داده‬ ‫پایگاه‬ ‫از‬ ‫ها‬ ‫داده‬ ‫بازیابی‬
‫داده‬ ‫پایگاه‬ ‫به‬ ‫رکوردها‬ ‫کردن‬ ‫اضافه‬ ‫و‬ ‫ورود‬
‫داده‬ ‫پایگاه‬ ‫در‬ ‫رکوردها‬ ‫ویرایش‬
‫داده‬ ‫پایگاه‬ ‫در‬ ‫رکوردها‬ ‫حذف‬
‫ایجاد‬‫جدید‬ ‫داده‬ ‫پایگاه‬
‫داده‬ ‫پایگاه‬ ‫در‬ ‫جدید‬ ‫جداول‬ ‫ایجاد‬
‫ساخت‬stored procedures‫داده‬ ‫پایگاه‬ ‫در‬
‫ساخت‬views‫داده‬ ‫پایگاه‬ ‫در‬ )‫ها‬ ‫(دیدگاه‬ ‫ها‬
، ‫ها‬ ‫جدول‬ ‫دسترسی‬ ‫سطوح‬ ‫کردن‬ ‫تنظیم‬procedures،views‫ها‬
... ‫و‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
16 | Saba Creative Company
‫از‬ ‫استفاده‬ ‫مزایای‬SQL
‫اطالعاتی‬ ‫بانک‬ ،‫حاضر‬ ‫حال‬ ‫در‬SQL server‫دلیل‬ ‫به‬ ‫برتری‬ ‫این‬ .‫است‬ ‫برتر‬ ‫اطالعاتی‬ ‫بانک‬ ‫سه‬ ‫از‬ ‫یکی‬
‫است‬ ‫زیر‬ ‫های‬ ‫مزیت‬:
‫های‬ ‫مزیت‬ ‫مهمترین‬ ‫از‬ ‫یکی‬SQL server‫و‬ ‫افزاری‬ ‫نرم‬ ‫دهندگان‬ ‫توسعه‬ ‫میان‬ ‫در‬ ‫را‬ ‫آن‬ ‫که‬
‫ها‬ ‫داده‬ ‫پایگاه‬ ‫مدیران‬‫آموزش‬ .‫است‬ ‫آن‬ ‫از‬ ‫استفاده‬ ‫سادگی‬ ‫است‬ ‫کرده‬ ‫طرفدار‬ ‫پر‬ ‫بسیار‬SQL
.‫باشد‬ ‫می‬ ‫سریع‬ ‫آن‬ ‫یادگیری‬ ‫و‬
‫قدرت‬ ‫ابزارهای‬‫همچون‬ ‫مندی‬SQL Server Profiler, SQL Server Management Studio,
DataBase Tuning... ‫و‬‫با‬ ‫کار‬ ‫تا‬ ‫است‬ ‫شده‬ ‫باعث‬ ‫همگی‬‫بانک‬‫های‬‫اطالعاتی‬SQL Server
.‫گیرد‬ ‫انجام‬ ‫سرعت‬ ‫به‬ ‫آن‬ ‫در‬ ‫خطایابی‬ ‫و‬
‫در‬ ‫اولیه‬ ‫تنظیمات‬ ‫و‬ ‫اندازی‬ ‫راه‬ ‫و‬ ‫نصب‬SQL Server‫های‬ ‫بانک‬ ‫سایر‬ ‫با‬ ‫مقایسه‬ ‫در‬ ‫بخصوص‬
. ‫است‬ ‫سریع‬ ‫و‬ ‫ساده‬ ‫ای‬ ‫رابطه‬ ‫اطالعاتی‬
،‫مشکل‬ ‫بروز‬ ‫صورت‬ ‫در‬SQL Server‫پشتیبانی‬ ‫دارای‬Online‫همینطور‬ ‫و‬ ‫است‬ ‫قوی‬‫مستندات‬
‫بسیار‬‫خوب‬‫و‬‫کارایی‬‫دارد‬.
... ‫و‬
‫از‬ ‫استفاده‬ ‫معایب‬SQL
‫جدید‬ ‫های‬ ‫ورژن‬SQL‫به‬ ‫احتیاج‬‫سخت‬‫افزارهای‬‫پیشرفته‬‫ای‬‫دارند‬‫و‬‫این‬‫می‬‫تواند‬‫هزینه‬‫زیادی‬
‫را‬‫در‬‫هنگام‬‫استفاده‬‫از‬SQL.‫کند‬ ‫تحمیل‬
‫استفاده‬ ‫برای‬‫از‬SQL‫تا‬ ‫است‬ ‫نیاز‬FrameWork .Net‫گرفتن‬ ‫باعث‬ ‫این‬ ‫که‬ ‫شود‬ ‫نصب‬ ‫نیز‬
.‫شد‬ ‫خواهد‬ ‫بیشتری‬ ‫فضای‬
... ‫و‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
17 | Saba Creative Company
‫آموزش‬ ‫های‬ ‫نیاز‬ ‫پیش‬SQL Server
‫گیری‬ ‫یاد‬ ‫برای‬SQL‫زبان‬ .‫نیست‬ ‫خاصی‬ ‫نیاز‬ ‫پیش‬ ‫به‬ ‫نیاز‬SQL‫باشد‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫اولین‬ ‫تواند‬ ‫می‬
‫گیرید‬ ‫می‬ ‫یاد‬ ‫که‬.‫با‬‫نصب‬‫یک‬‫نسخه‬‫از‬SQL‫راحتی‬ ‫به‬ ‫توان‬ ‫می‬ ‫آن‬ ‫قدرتمند‬ ‫مستندات‬ ‫از‬ ‫استفاده‬ ‫و‬
‫قدم‬ ‫به‬ ‫قدم‬ ‫را‬ ‫آن‬ ‫از‬ ‫استفاده‬‫یاد‬‫بگیرید‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
18 | Saba Creative Company
‫دستورات‬
‫مورد‬ ‫دستورات‬ ‫تا‬ ‫شود‬ ‫می‬ ‫سعی‬ ‫بخش‬ ‫این‬ ‫در‬‫به‬ ‫داده‬ ‫پایگاه‬ ‫با‬ ‫کار‬ ‫برای‬ ‫که‬ ‫را‬ ‫کارشناس‬ ‫هر‬ ‫برای‬ ‫نیاز‬
.‫شود‬ ‫داده‬ ‫نمایش‬ ‫تصویری‬ ‫صورت‬ ‫به‬ ‫هایی‬ ‫مثال‬ ‫با‬ ‫همراه‬ ‫دارد‬ ‫نیاز‬ ‫آنها‬
SELECT
‫به‬ ‫مربوط‬ ‫دستورات‬ ‫ترین‬ ‫ابتدایی‬ ‫جزو‬ ‫دستور‬ ‫این‬SQL‫اطالعات‬ ‫دیدن‬ ‫و‬ ‫انتخاب‬ ‫برای‬ ‫که‬ ‫باشد‬ ‫می‬
‫نهایت‬ ‫در‬ ‫و‬ ‫جدول‬ ‫چند‬ ‫یا‬ ‫جدول‬ ‫یک‬ ‫از‬ ‫درخواستی‬‫ادغام‬‫کردن‬‫اطالعات‬‫و‬‫دیدن‬‫آنها‬‫در‬‫یک‬‫جدول‬‫استفاده‬
‫می‬. ‫شود‬
: ‫شود‬ ‫می‬ ‫استفاده‬ ‫زیر‬ ‫شکل‬ ‫به‬ ‫دستور‬ ‫این‬
‫نظر‬ ‫مورد‬ ‫های‬ ‫ستون‬ ‫یا‬ ‫ستون‬ ‫نام‬SELECT
‫جدول‬ ‫نام‬FROM
‫های‬ ‫ستون‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬ProductNumber, Name‫جدول‬ ‫از‬ ‫را‬Production.Product
‫دهد‬ ‫می‬ ‫نمایش‬
SELECT NAME,
ProductNumber
FROM Production.Product
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
19 | Saba Creative Company
.‫کنیم‬ ‫می‬ ‫استفاده‬ ‫ستون‬ ‫نام‬ ‫قسمت‬ ‫در‬ * ‫عالمت‬ ‫از‬ ‫نظر‬ ‫مورد‬ ‫جدول‬ ‫های‬ ‫ستون‬ ‫کلیه‬ ‫مشاهده‬ ‫برای‬
.‫باشد‬ ‫می‬ ‫ها‬ ‫ستون‬ ‫کل‬ ‫انتخاب‬ ‫برای‬ ‫سریع‬ ‫روشی‬ * ‫کاراکتر‬ ‫عبارتی‬ ‫به‬
‫جدول‬ ‫های‬ ‫ستون‬ ‫تمام‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬Production.Product‫دهد‬ ‫می‬ ‫نمایش‬
SELECT *
FROM Production.Product
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
20 | Saba Creative Company
‫و‬ ‫نشوند‬ ‫داده‬ ‫نمایش‬ ‫تکراری‬ ‫موارد‬ ‫بخواهید‬ ‫و‬ ‫باشید‬ ‫داشته‬ ‫تکراری‬ ‫موارد‬ ‫خود‬ ‫جداول‬ ‫در‬ ‫که‬ ‫صورتی‬ ‫در‬
‫دستور‬ ‫از‬ ‫پس‬ ‫است‬ ‫کافی‬ ، ‫دهد‬ ‫نمایش‬ ‫را‬ ‫آنها‬ ‫بار‬ ‫یک‬ ‫صرفا‬SELECT‫عبارت‬ ‫از‬DISTINCT‫استفاده‬
.‫نمایید‬
.‫کند‬ ‫می‬ ‫شناسایی‬ ‫تکراری‬ ‫را‬ ‫موارد‬ ‫شود‬ ‫مشخص‬ ‫آن‬ ‫ادامه‬ ‫در‬ ‫که‬ ‫هایی‬ ‫فیلد‬ ‫ازای‬ ‫به‬ ‫دستور‬ ‫این‬ :‫نکته‬
‫های‬ ‫فیلد‬ ‫که‬ ‫باشد‬ ‫داشته‬ ‫وجود‬ ‫رکوردی‬ ‫که‬ ‫صورتی‬ ‫در‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬ProductNumber,
Name: ‫داند‬ ‫می‬ ‫تکرای‬ ‫را‬ ‫آن‬ ‫باشد‬ ‫یکسان‬ ‫آنها‬
SELECT DISTINCT NAME,
ProductNumber
FROM Production.Product
WHERE
‫دستورات‬ ‫پرکاربردترین‬ ‫البته‬ ‫و‬ ‫ترین‬ ‫ابتدایی‬ ‫جزو‬ ‫نیز‬ ‫دستور‬ ‫این‬SQL‫یا‬ ‫شرط‬ ‫افزودن‬ ‫برای‬ ‫که‬ ‫باشد‬ ‫می‬
.‫باشد‬ ‫می‬ ‫جستجو‬ ‫نتایج‬ ‫کردن‬ ‫محدود‬ ‫برای‬ ‫هایی‬ ‫شرط‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
21 | Saba Creative Company
‫دستور‬ ‫از‬ ‫بعد‬ ‫باید‬ ‫دستور‬ ‫این‬SELECT‫می‬ ‫همچنین‬ ‫و‬ ‫شود‬ ‫استفاده‬‫عملگرهای‬ ‫از‬ ‫توان‬AND‫و‬OR‫و‬
.‫نمود‬ ‫ادغام‬ ‫باهم‬ ‫را‬ ‫شرط‬ ‫چندین‬ ‫توان‬ ‫می‬ ‫پرانتز‬ ‫عالمت‬ ‫و‬ ‫ها‬ ‫عملگر‬ ‫این‬ ‫کمک‬ ‫به‬ .‫نمود‬ ‫استفاده‬ ...
‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
SELECT Name, ProductNumber,MakeFlag
FROM Production.Product
WHERE MakeFlag=1
‫بین‬ ‫را‬ ‫مقدار‬ ‫باید‬ ‫ای‬ ‫رشته‬ ‫مقادیر‬ ‫برای‬ : ‫نکته‬‘‘: ‫دهید‬ ‫قرار‬
SELECT Name, ProductNumber
FROM Production.Product
WHERE NAME='LL Mountain Seat Assembly'
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
22 | Saba Creative Company
AND
‫دستور‬ ‫از‬ ‫توان‬ ‫می‬ ‫ها‬ ‫شرط‬ ‫ادغام‬ ‫و‬ ‫شرط‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫اعمال‬ ‫برای‬AND.‫نمود‬ ‫استفاده‬
‫خواهیم‬ ‫می‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
SELECT *
FROM Production.Product
WHERE Color='Silver' AND ReorderPoint=750
LIKE
‫شرط‬ ‫با‬ ‫که‬ ‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫مقادیری‬ ‫و‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫جستجو‬ ‫های‬ ‫شرط‬ ‫بهبود‬ ‫برای‬ ‫دستور‬ ‫این‬
.‫باشد‬ ‫داشته‬ ‫مشابهت‬ ‫شده‬ ‫تعیین‬
‫به‬: ‫نمایید‬ ‫مشاهده‬ ‫زیر‬ ‫های‬ ‫دستور‬ ‫در‬ ‫را‬ ‫آن‬ ‫مختلف‬ ‫های‬ ‫کاربرد‬ ‫مثال‬ ‫عنوان‬
‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬‫با‬‫حرف‬p‫شروع‬‫می‬‫شود‬‫را‬‫نمایش‬‫می‬‫دهد‬
SELECT *
FROM Production.Product
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
23 | Saba Creative Company
WHERE NAME LIKE 'P%'
‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬‫با‬‫حرف‬ng‫میابد‬ ‫خاتمه‬‫را‬‫نمایش‬‫می‬‫دهد‬
SELECT *
FROM Production.Product
WHERE NAME LIKE '%ng'
‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬‫حر‬ ‫شامل‬‫و‬‫ف‬wash‫باشد‬ ‫می‬‫را‬‫نمایش‬‫می‬‫دهد‬
SELECT *
FROM Production.Product
WHERE NAME LIKE '%wash%'
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
24 | Saba Creative Company
‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬13‫حرف‬ ‫با‬ ‫و‬ ‫باشد‬ ‫می‬ ‫حرفی‬F‫شود‬ ‫می‬ ‫شروع‬‫را‬‫نمایش‬‫می‬
‫دهد‬
SELECT *
FROM Production.Product
WHERE NAME LIKE 'F____________'
: ‫نکته‬‫عالمت‬%‫به‬‫معنای‬‫هر‬‫چند‬‫کاراکتر‬‫یا‬‫حرف‬‫دلخواه‬‫در‬‫قالب‬‫ارائه‬‫شده‬‫و‬‫عالمت‬_‫نمایانگر‬‫یک‬
‫کاراکتر‬‫دلخواه‬‫است‬.
JOIN
‫باهم‬ ‫جداول‬ ‫آن‬ ‫مرتبط‬ ‫های‬ ‫فیلد‬ ‫طریق‬ ‫از‬ ‫یکدیگر‬ ‫به‬ ‫جدول‬ ‫چند‬ ‫یا‬ ‫دو‬ ‫کردن‬ ‫متصل‬ ‫برای‬ ‫دستور‬ ‫این‬
‫چند‬ ‫یا‬ ‫دو‬ ‫در‬ ‫اطالعاتی‬ ‫که‬ ‫باشد‬ ‫می‬ ‫مفهوم‬ ‫این‬ ‫به‬ ‫یکدیگر‬ ‫به‬ ‫جداول‬ ‫کردن‬ ‫متصل‬ .‫شود‬ ‫می‬ ‫استفاده‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
25 | Saba Creative Company
‫دیگر‬ ‫جدول‬ ‫در‬ ‫متناظری‬ ‫مقدار‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫فیلدی‬ ‫کدام‬ ‫هر‬ ‫در‬ ‫و‬ ‫دارد‬ ‫وجود‬ ‫متفاوت‬ ‫جدول‬‫با‬ ‫و‬ ‫دارد‬
.‫شود‬ ‫می‬ ‫برقرار‬ ‫ارتباط‬ ‫آنها‬ ‫بین‬ ‫منطقی‬ ‫ارتباط‬ ‫این‬ ‫کمک‬
‫اطالعات‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫از‬ ‫متفاوتی‬ ‫جداول‬ ‫در‬ ‫کاال‬ ‫هر‬ ‫اطالعات‬ ‫و‬ ‫کاال‬ ‫هر‬ ‫فروش‬ ‫به‬ ‫مربوط‬
‫خروجی‬ ‫یک‬ ‫عنوان‬ ‫به‬ ‫را‬ ‫نهایی‬ ‫نتیجه‬ ‫و‬ ‫داده‬ ‫ارتباط‬ ‫یکدیگر‬ ‫با‬ ‫را‬ ‫اطالعات‬ ‫این‬ ‫روش‬ ‫این‬ ‫با‬ .‫دارند‬ ‫قرار‬ ‫هم‬
‫م‬.‫کرد‬ ‫خواهیم‬ ‫شاهده‬
SELECT sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.ProductID,
sod.OrderQty,
p.Name,
p.ProductNumber
FROM [Sales].[SalesOrderDetail] sod
INNER JOIN Production.Product p
ON p.ProductID = sod.ProductID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
26 | Saba Creative Company
‫دستورات‬ ‫انواع‬JOIN
INNER JOIN‫یا‬JOIN:‫در‬‫این‬‫روش‬‫سطرهایی‬‫نمایش‬‫داده‬‫می‬‫شوند‬‫که‬‫در‬‫هر‬‫دو‬‫جدولی‬‫که‬
‫با‬‫هم‬Join‫شده‬‫اند‬‫وجود‬‫دارند‬‫رابطه‬ ‫یک‬ ‫حداقل‬ ‫که‬ ‫باشد‬ ‫می‬ ‫سطرهایی‬ ‫دستور‬ ‫این‬ ‫خروجی‬ ‫واقع‬ ‫در‬ ‫و‬
‫باشد‬ ‫داشته‬ ‫جدول‬ ‫دو‬ ‫در‬.‫خروجی‬ ‫در‬ ،‫باشد‬ ‫نشده‬ ‫پر‬ ‫سنجش‬ ‫واحد‬ ‫فیلد‬ ‫کاالیی‬ ‫برای‬ ‫اگر‬ ‫ها‬ ‫کاال‬ ‫مثال‬ ‫در‬
.‫شود‬ ‫نمی‬ ‫داده‬ ‫نمایش‬ ‫دستور‬ ‫این‬
‫تفاوت‬‫دستور‬Join‫و‬‫دستور‬Inner Join‫در‬performance‫آنها‬‫ن‬‫می‬‫باشد‬.‫می‬ ‫این‬ ‫تفاوت‬ ‫تنها‬
‫دستور‬ ‫که‬ ‫باشد‬Join‫دستور‬ ‫به‬ ‫نسبت‬Inner Join‫نگارش‬ ‫نحوه‬ ‫در‬ ‫طرفی‬ ‫از‬ ‫و‬ ‫باشد‬ ‫می‬ ‫تر‬ ‫قدیمی‬
Inner Join،‫است‬ ‫شده‬ ‫تر‬ ‫متداول‬ ‫آن‬ ‫از‬ ‫استفاده‬ ،‫دارد‬ ‫ارتباطی‬ ‫های‬ ‫کلیدواژه‬ ‫سایر‬ ‫به‬ ‫شباهت‬ ‫چون‬
.‫ندارد‬ ‫وجود‬ ‫تفاوتی‬ ‫صورت‬ ‫این‬ ‫غیر‬ ‫در‬
(
The question is what is the difference between above two syntax.
Here is the answer – They are equal to each other. There is absolutely no difference between them.
They are equal in performance as well as implementation. JOIN is actually shorter version of INNER
JOIN.
Personally I prefer to write INNER JOIN because it is much cleaner to read and it avoids any confusion
if there is related to JOIN. For example if users had written INNER JOIN instead of JOIN there would
have been no confusion in mind and hence there was no need to have original question.
Reference: Pinal Dave (https://blog.sqlauthority.com)
)
OUTER JOIN:‫در‬‫این‬‫روش‬‫سطرهایی‬‫از‬‫جدول‬‫اصلی‬‫که‬‫سطر‬‫متناظرشان‬‫در‬‫جدول‬‫دیگر‬‫وجود‬‫ندارد‬
‫هم‬‫در‬‫خروجی‬‫می‬‫آیند‬.‫بسته‬‫به‬‫اینکه‬‫بخواهیم‬‫کدامیک‬‫از‬‫سطرهایی‬‫که‬‫در‬‫جدول‬‫دیگر‬‫متناظر‬‫ندارند‬
‫هم‬‫در‬‫خروجی‬،‫بیایند‬‫سه‬‫نوع‬Outer Join‫بصورت‬‫زیر‬‫تعریف‬‫می‬‫شود‬:
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
27 | Saba Creative Company
1)LEFT OUTER JOIN:‫تمام‬‫سطرهای‬‫جدول‬‫اولی‬(‫جدولی‬‫که‬‫در‬‫سمت‬‫چپ‬Join‫قرار‬‫گرفته‬
‫است‬)‫در‬‫خروجی‬‫ظاهر‬‫می‬‫شوند‬.‫ولی‬‫سطرهایی‬‫از‬‫جدول‬‫دوم‬‫که‬‫متناظری‬‫در‬‫جدول‬‫اول‬‫ندارند‬‫در‬‫خروجی‬
‫نمی‬‫آیند‬.‫بعنوان‬‫مثال‬‫دستور‬‫تمام‬ ‫اطالعات‬ ‫زیر‬‫کاال‬ ‫عنوان‬ ‫به‬ ‫آن‬ ‫کاالی‬ ‫حتی‬ ‫که‬ ‫را‬ ‫هایی‬ ‫فروش‬
: ‫دهد‬ ‫می‬ ‫نمایش‬ ‫نیز‬ ‫را‬ ‫است‬ ‫نشده‬ ‫مشخص‬
SELECT sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.ProductID,
sod.OrderQty,
p.Name,
p.ProductNumber
FROM [Sales].[SalesOrderDetail] sod
LEFT OUTER JOIN Production.Product p
ON p.ProductID = sod.ProductID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
28 | Saba Creative Company
2)RIGHT OUTER JOIN:‫تمام‬‫سطرهای‬‫جدول‬‫دومی‬(‫جدولی‬‫که‬‫در‬‫سمت‬‫راست‬Join‫قرار‬
‫گرفته‬‫است‬)‫در‬‫خروجی‬‫ظاهر‬‫می‬‫شوند‬.
3)FULL OUTER JOIN:‫تمام‬‫سطرهای‬‫هر‬‫دو‬‫جدول‬‫در‬‫خروجی‬‫می‬‫آیند‬‫چه‬‫در‬‫جدول‬‫دیگر‬
‫متناظر‬‫داشته‬‫باشند‬‫چه‬‫نداشته‬‫باشند‬.
SELECT sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.ProductID,
sod.OrderQty,
p.Name,
p.ProductNumber
FROM [Sales].[SalesOrderDetail] sod
FULL OUTER JOIN Production.Product p
ON p.ProductID = sod.ProductID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
29 | Saba Creative Company
CROSS JOIN:‫نتیجه‬‫این‬Join‫تمام‬‫ترکیباتی‬‫است‬‫که‬‫از‬‫قرار‬‫گرفتن‬‫هر‬‫سطر‬‫از‬‫جدول‬‫اولی‬‫در‬
‫کنار‬‫تمام‬‫سطرهای‬‫جدول‬‫دومی‬‫بدست‬‫می‬‫آید‬(‫همانند‬‫حاصلضرب‬‫دکارتی‬.)‫به‬ ‫نیاز‬ ‫دیگر‬ ‫حالت‬ ‫این‬ ‫در‬
.‫باشد‬ ‫نمی‬ ‫جداول‬ ‫ارتباط‬ ‫برای‬ ‫کلیدی‬ ‫معرفی‬
SELECT sod.SalesOrderID,
sod.SalesOrderDetailID,
sod.ProductID,
sod.OrderQty,
p.Name,
p.ProductNumber
FROM [Sales].[SalesOrderDetail] sod
CROSS JOIN Production.Product p
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
30 | Saba Creative Company
:‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫عکس‬ ‫به‬ ‫ها‬ ‫تفاوت‬ ‫بهتر‬ ‫تفهیم‬ ‫برای‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
31 | Saba Creative Company
AGGREGATE FUNCTIONS:
‫دستورات‬ ‫این‬:‫دهد‬ ‫می‬ ‫انجام‬ ‫شده‬ ‫نوشته‬ ‫دستورات‬ ‫در‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫های‬ ‫محاسبات‬
AVG
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫مقادیر‬ ‫میانگین‬ ‫تابع‬ ‫این‬
‫جدول‬ ‫در‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫میانگین‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫برای‬‫را‬ ‫فروش‬ ‫اطالعات‬:‫دهد‬ ‫می‬ ‫نمایش‬
SELECT AVG(OrderQty)
FROM [Sales].[SalesOrderDetail]
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
32 | Saba Creative Company
COUNT
‫چند‬ ‫خروجی‬ ‫رکوردهای‬ ‫تعداد‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫و‬ ‫باشد‬ ‫می‬ ‫رکوردها‬ ‫تعداد‬ ‫شمارش‬ ‫برای‬ ‫تابع‬ ‫این‬
.‫باشد‬ ‫می‬ ‫رکورد‬
‫در‬ ‫مقدار‬ ‫فیلد‬ ‫های‬ ‫رکورد‬ ‫تعداد‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫برای‬‫فروش‬ ‫اطالعات‬ ‫جدول‬: ‫نماید‬ ‫می‬ ‫مشخص‬ ‫را‬
SELECT COUNT(OrderQty)
FROM [Sales].[SalesOrderDetail]
COUNT_BIG
‫دستور‬ ‫همانند‬ ‫نیز‬ ‫تابع‬ ‫این‬COUNT‫ها‬ ‫رکورد‬ ‫تعداد‬ ‫که‬ ‫صورتی‬ ‫در‬ ‫اما‬ ‫دارد‬ ‫را‬ ‫ها‬ ‫داده‬ ‫شمارش‬ ‫وظیفه‬
‫آنها‬ ‫شمارش‬ ‫توان‬ ‫می‬ ‫دستور‬ ‫این‬ ‫کمک‬ ‫با‬ ‫باشد‬ ‫خارج‬ ‫صحیح‬ ‫عدد‬ ‫بازه‬ ‫از‬ ‫آن‬ ‫مقدار‬ ‫و‬ ‫باشد‬ ‫زیاد‬ ‫بسیار‬
.‫داد‬ ‫انجام‬ ‫را‬
SELECT COUNT_BIG(OrderQty)
FROM [Sales].[SalesOrderDetail]
MAX
‫کردن‬ ‫مشخص‬ ‫برای‬ ‫تابع‬ ‫این‬.‫باشد‬ ‫می‬ ‫خروجی‬ ‫یک‬ ‫در‬ ‫ماکزیمم‬ ‫مقدار‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
33 | Saba Creative Company
‫در‬ ‫شده‬ ‫ثبت‬ ‫مقدار‬ ‫بزرگترین‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫فروش‬ ‫اقالم‬ ‫جدول‬:‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬
SELECT MAX(OrderQty)
FROM [Sales].[SalesOrderDetail]
MIN
.‫باشد‬ ‫می‬ ‫خروجی‬ ‫یک‬ ‫در‬ ‫مینیمم‬ ‫مقدار‬ ‫کردن‬ ‫مشخص‬ ‫برای‬ ‫تابع‬ ‫این‬
‫د‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫در‬ ‫شده‬ ‫ثبت‬ ‫مقدار‬ ‫کوچکترین‬ ‫زیر‬ ‫دستور‬ ‫ر‬‫فروش‬ ‫اقالم‬ ‫جدول‬:‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬
SELECT MIN(OrderQty)
FROM [Sales].[SalesOrderDetail]
SUM
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫فیلد‬ ‫در‬ ‫موجود‬ ‫مقادیر‬ ‫جمع‬ ‫تابع‬ ‫این‬
‫در‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫مجموع‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫اقالم‬ ‫جدول‬‫فروش‬:‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬
SELECT SUM(OrderQty)
FROM [Sales].[SalesOrderDetail]
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
34 | Saba Creative Company
GROUP BY
‫مقادیر‬ ‫توان‬ ‫می‬ ‫آن‬ ‫کمک‬ ‫با‬ ‫و‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫محاسباتی‬ ‫دستورات‬ ‫با‬ ‫همراه‬ ‫اغلب‬ ‫دستور‬ ‫این‬
.‫نمود‬ ‫محاسبه‬ ‫مختلفی‬ ‫های‬ ‫بندی‬ ‫دسته‬ ‫ازای‬ ‫به‬ ‫را‬ ‫محاسباتی‬
‫در‬ ‫را‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫ماکزیمم‬ ‫و‬ ‫میانگین‬ ، ‫مینیمم‬ ‫مقادیر‬ ‫خواهیم‬ ‫می‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫برای‬
‫اقالم‬‫فروش‬‫هر‬ ‫ازای‬ ‫به‬‫کاال‬: ‫نماییم‬ ‫محاسبه‬
SELECT ProductID,
MIN(OrderQty) AS MinQty,
AVG(OrderQty) AS AVGAty,
MAX(OrderQty) AS MaxQty
FROM [Sales].[SalesOrderDetail]
GROUP BY
ProductID
SELECT ProductID,ModifiedDate,
MIN(OrderQty) AS MinQty,
AVG(OrderQty) AS AVGAty,
MAX(OrderQty) AS MaxQty
FROM [Sales].[SalesOrderDetail]
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
35 | Saba Creative Company
GROUP BY
ProductID,ModifiedDate
WITH ROLLUP
‫اصلی‬ ‫بندی‬ ‫گروه‬ ‫برای‬ ،‫بندی‬ ‫گروه‬ ‫مالک‬ ‫هر‬ ‫برای‬ ‫محاسبه‬ ‫بر‬ ‫عالوه‬ ‫محاسباتی‬ ‫مقادیر‬ ‫که‬ ‫داریم‬ ‫نیاز‬ ‫گاهی‬
.‫شود‬ ‫محاسبه‬ ‫جداگانه‬ ‫نیز‬‫زیر‬ ‫ساختار‬ ‫بندی‬ ‫گروه‬ ‫در‬ ‫موجود‬ ‫های‬ ‫فیلد‬ ‫ترتیب‬ ‫اساس‬ ‫بر‬ ‫دستور‬ ‫این‬ ‫در‬
. ‫دهد‬ ‫می‬ ‫شکل‬ ‫را‬ ‫ای‬ ‫مجموعه‬
‫مثال‬ ‫عنوان‬ ‫به‬:‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
SELECT T.[Group] AS N'Region',
T.CountryRegionCode AS N'Country',
S.Name AS N'Store',
H.SalesPersonID,
SUM(TotalDue) AS N'Total Sales'
FROM Sales.Customer C
INNER JOIN Sales.Store S
ON C.StoreID = S.BusinessEntityID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
36 | Saba Creative Company
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN (N'DE', N'FR')
AND H.SalesPersonID IN (287, 290, 288)
AND SUBSTRING(S.Name, 1, 4)IN (N'Vers', N'Spa ')
GROUP BY
T.[Group],
T.CountryRegionCode,
S.Name,
H.SalesPersonID
WITH ROLLUP
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
37 | Saba Creative Company
WITH CUBE
‫همانند‬ ‫دستور‬ ‫این‬ ‫خروجی‬WITH ROLLUP‫که‬ ‫تفاوت‬ ‫این‬ ‫با‬ ‫باشد‬ ‫می‬‫اساس‬ ‫بر‬ ‫دستور‬ ‫این‬ ‫در‬
. ‫دهد‬ ‫می‬ ‫شکل‬ ‫را‬ ‫ای‬ ‫مجموعه‬ ‫زیر‬ ‫ساختار‬ ‫بندی‬ ‫گروه‬ ‫در‬ ‫موجود‬ ‫های‬ ‫فیلد‬ ‫ترتیب‬
‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
SELECT T.[Group] AS N'Region',
T.CountryRegionCode AS N'Country',
S.Name AS N'Store',
H.SalesPersonID,
SUM(TotalDue) AS N'Total Sales'
FROM Sales.Customer C
INNER JOIN Sales.Store S
ON C.StoreID = S.BusinessEntityID
INNER JOIN Sales.SalesTerritory T
ON C.TerritoryID = T.TerritoryID
INNER JOIN Sales.SalesOrderHeader H
ON C.CustomerID = H.CustomerID
WHERE T.[Group] = N'Europe'
AND T.CountryRegionCode IN (N'DE', N'FR')
AND H.SalesPersonID IN (287, 290, 288)
AND SUBSTRING(S.Name, 1, 4)IN (N'Vers', N'Spa ')
GROUP BY
T.[Group],
T.CountryRegionCode,
S.Name,
H.SalesPersonID
WITH CUBE
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
38 | Saba Creative Company
GROUPING
‫حاصل‬ ‫که‬ ‫رکوردی‬ ‫تشخیص‬ ‫باال‬ ‫دستورات‬ ‫خروجی‬ ‫در‬‫کمی‬ ‫باشد‬ ‫می‬ ‫باالتر‬ ‫سطح‬ ‫یک‬ ‫در‬ ‫محاسبات‬ ‫انجام‬
‫دستور‬ ‫کمک‬ ‫با‬ ‫توان‬ ‫می‬ ‫راحتی‬ ‫برای‬ ‫و‬ ‫باشد‬ ‫می‬ ‫سخت‬GROUPING‫در‬ ‫نظر‬ ‫مورد‬ ‫فیلد‬ ‫که‬ ‫صورتی‬ ‫در‬
‫مقدار‬ ‫باشد‬ ‫نکرده‬ ‫شرکت‬ ‫اگر‬ ‫و‬ ‫صفر‬ ‫مقدار‬ ‫باشد‬ ‫کرده‬ ‫شرکت‬ ‫رکورد‬ ‫آن‬ ‫محاسبات‬1.‫دهد‬ ‫نمایش‬ ‫را‬
‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
SELECT SalesQuota,
SUM(SalesYTD) 'TotalSalesYTD',
GROUPING(SalesQuota) AS 'Grouping'
FROM Sales.SalesPerson
GROUP BY
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
39 | Saba Creative Company
SalesQuota WITH ROLLUP
HAVING
‫که‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫دیگری‬ ‫های‬ ‫دستور‬ ‫در‬ ‫دادن‬ ‫قرار‬ ‫شرط‬ ‫برای‬ ‫دستور‬ ‫این‬ ‫از‬‫ساختار‬ ‫از‬ ‫متفاوت‬ ‫ساختاری‬
‫به‬ .‫دارد‬ ‫عادی‬ ‫های‬ ‫رکورد‬‫عبارت‬‫دیگر‬Having‫برای‬‫اعمال‬‫شرط‬‫به‬‫ستون‬‫ها‬‫اعمال‬‫می‬‫شود‬‫و‬‫همان‬
‫کاری‬‫را‬‫می‬‫کند‬‫که‬Where‫در‬‫رکوردها‬‫انجام‬‫می‬.‫دهد‬
‫نکته‬:‫دستور‬Having‫معموال‬‫با‬Group By‫می‬‫آید‬.
‫خواهیم‬ ‫می‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫سند‬ ‫اقالم‬ ‫در‬ ‫را‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫ماکزیمم‬ ‫و‬ ‫میانگین‬ ، ‫مینیمم‬ ‫مقادیر‬
‫سند‬ ‫نوع‬ ‫هر‬ ‫ازای‬ ‫به‬‫مالی‬ ‫سال‬ ‫در‬3: ‫نماییم‬ ‫محاسبه‬
SELECT ProductID,
SpecialOfferID,
MIN(OrderQty) AS MinQty,
AVG(OrderQty) AS AVGAty,
MAX(OrderQty) AS MaxQty
FROM [Sales].[SalesOrderDetail]
GROUP BY
ProductID,
SpecialOfferID
HAVING SpecialOfferID = 1
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
40 | Saba Creative Company
UNION‫و‬UNION ALL
‫از‬‫دستور‬Union‫برای‬‫ترکیب‬‫و‬‫ادغام‬‫دو‬‫یا‬‫چند‬‫ستون‬‫مختلف‬‫از‬2‫یا‬‫چند‬‫جدول‬‫و‬‫نشان‬‫دادن‬‫آنها‬‫در‬
‫یک‬‫ستون‬‫مشترک‬‫استفاده‬‫می‬‫شود‬.
‫در‬‫این‬‫دستور‬،‫نوع‬‫داده‬‫ای‬‫ستون‬‫های‬‫انتخاب‬‫شده‬‫برای‬‫ترکیب‬‫باید‬‫یکسان‬‫باشند‬.‫دستور‬Union
‫در‬‫هنگام‬‫ترکیب‬‫فیلد‬‫ها‬،‫در‬‫صورت‬‫برخورد‬‫با‬‫مقادیر‬‫تکراری‬‫آنها‬‫را‬‫حذف‬‫کرده‬‫و‬‫از‬‫هر‬‫مقدار‬‫یک‬‫نمونه‬
‫را‬‫نمایش‬‫می‬‫دهد‬.‫برای‬‫مشاهده‬‫تمام‬‫مقادیر‬،‫حتی‬‫مقادیر‬‫تکراری‬‫باید‬‫از‬‫دستور‬Union ALL
‫استفاده‬‫کرد‬.
‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
IF OBJECT_ID('dbo.Gloves', 'U') IS NOT NULL
DROP TABLE dbo.Gloves;
GO
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
41 | Saba Creative Company
-- Create Gloves table.
SELECT ProductModelID,
NAME
INTO dbo.Gloves
FROM Production.ProductModel
WHERE ProductModelID IN (3, 4);
GO
-- Here is the simple union.
-- Uses AdventureWorks
SELECT ProductModelID,
NAME
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION
SELECT ProductModelID,
NAME
FROM dbo.Gloves
ORDER BY
NAME;
GO
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
42 | Saba Creative Company
‫می‬ ‫استفاده‬ ‫زیر‬ ‫دستور‬ ‫از‬ ‫شوند‬ ‫داده‬ ‫نمایش‬ ‫مقادیر‬ ‫تمام‬ ‫و‬ ‫نشوند‬ ‫حذف‬ ‫تکراری‬ ‫مقادیر‬ ‫که‬ ‫این‬ ‫برای‬
: ‫کنیم‬
SELECT ProductModelID,
NAME
FROM Production.ProductModel
WHERE ProductModelID NOT IN (3, 4)
UNION ALL
SELECT ProductModelID,
NAME
FROM dbo.Gloves
ORDER BY
NAME;
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
43 | Saba Creative Company
EXCEPT
‫کاری‬ ‫دستور‬ ‫این‬‫مشابه‬‫با‬‫دستور‬union‫دهد‬ ‫می‬ ‫انجام‬‫و‬‫تفاوت‬‫آ‬‫ن‬‫با‬‫این‬‫دستور‬‫این‬‫است‬‫این‬ ‫که‬
‫دستور‬‫که‬ ‫را‬ ‫مواردی‬ ‫تمام‬ ‫و‬ ‫کند‬ ‫می‬ ‫انتخاب‬ ‫را‬ ‫اول‬ ‫جدول‬ ‫های‬ ‫ردیف‬‫داخل‬ ‫از‬ ‫دارد‬ ‫وجود‬ ‫دوم‬ ‫جدول‬ ‫در‬
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫مانده‬ ‫باقی‬ ‫و‬ ‫کند‬ ‫می‬ ‫حذف‬ ‫آن‬
‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫جدول‬ ‫در‬ ‫که‬ ‫شود‬ ‫می‬ ‫مشاهده‬ ‫کاالهایی‬ ‫های‬ ‫سریال‬ ‫شماره‬Product
‫جدول‬ ‫در‬ ‫و‬ ‫دارد‬ ‫وجود‬WorkOrder‫ندارد‬ ‫وجود‬
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
44 | Saba Creative Company
INTERSECT
‫دستور‬ ‫این‬‫مانند‬‫دستور‬union‫نیز‬‫با‬‫دو‬‫جمله‬‫کار‬‫میکند‬.‫اما‬‫تفاوت‬‫اینجاست‬‫که‬‫دستور‬union‫در‬
‫اصل‬‫مانند‬‫یک‬OR‫کار‬‫میکند‬‫و‬‫تمام‬‫رکوردهای‬‫غیر‬‫تکراری‬‫را‬‫بر‬‫میدارد‬.‫اما‬‫این‬‫دستور‬‫مانند‬AND
‫کار‬‫میکند‬‫و‬‫رکورد‬‫های‬‫مشترک‬‫را‬‫بر‬‫میدارد‬.
‫دستور‬ ‫با‬ ‫آن‬ ‫تفاوت‬EXCEPT‫دستور‬ ‫آن‬ ‫در‬ ‫که‬ ‫است‬ ‫این‬‫جدول‬ ‫از‬ ‫ناموجود‬ ‫اطالعات‬ ‫صرفا‬‫اول‬‫در‬ ‫را‬
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫دوم‬ ‫جدول‬‫مقادیر‬ ‫و‬ ‫داده‬ ‫قرار‬ ‫هم‬ ‫کنار‬ ‫در‬ ‫جدول‬ ‫دو‬ ‫هر‬ ‫از‬ ‫را‬ ‫اطالعات‬ ‫دستور‬ ‫این‬ ‫اما‬
‫و‬ ‫کند‬ ‫می‬ ‫حذف‬ ‫آن‬ ‫از‬ ‫را‬ ‫تکراری‬‫از‬ ‫اطالعاتی‬ ‫و‬ ‫نیست‬ ‫موجود‬ ‫دوم‬ ‫جدول‬ ‫در‬ ‫که‬ ‫اول‬ ‫جدول‬ ‫از‬ ‫اطالعاتی‬
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫نیست‬ ‫موجود‬ ‫اول‬ ‫جدول‬ ‫در‬ ‫که‬ ‫دوم‬ ‫جدول‬
‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫جدول‬ ‫در‬ ‫که‬ ‫شود‬ ‫می‬ ‫مشاهده‬ ‫کاالهایی‬ ‫های‬ ‫سریال‬ ‫شماره‬ ‫زیر‬Product
‫جدول‬ ‫در‬ ‫و‬ ‫دارد‬ ‫وجود‬WorkOrder‫جد‬ ‫هردو‬ ‫در‬ ‫اما‬ ‫دارد‬ ‫وجود‬ ‫نیز‬.‫ندارد‬ ‫وجود‬ ‫ول‬
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
45 | Saba Creative Company
FROM Production.WorkOrder
CROSS APPLY
‫دهیم‬ ‫ارتباط‬ ‫تابع‬ ‫یک‬ ‫مثال‬ ‫دیگری‬ ‫شی‬ ‫با‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫اطالعات‬ ‫تا‬ ‫داریم‬ ‫نیاز‬ ‫گاهی‬‫تابع‬ ‫انواع‬ ‫از‬ ‫برخی‬ (
‫نمی‬ ‫توابع‬ ‫این‬ ‫ارتباط‬ ‫برای‬ ،‫شود‬ ‫می‬ ‫شامل‬ ‫را‬ ‫فیلد‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫و‬ ‫باشد‬ ‫می‬ ‫جدولی‬ ‫آنها‬ ‫خروجی‬ ‫مقدار‬
) ‫داد‬ ‫قرار‬ ‫اسکریپت‬ ‫متن‬ ‫در‬ ‫را‬ ‫آن‬ ‫توان‬‫برای‬ ‫است‬ ‫ممکن‬ ‫حالت‬ ‫این‬ ‫در‬ .‫کنیم‬ ‫مشاهده‬ ‫را‬ ‫آن‬ ‫خروجی‬ ‫و‬
‫باش‬ ‫داشته‬ ‫مقدار‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫تابع‬ ‫مقدار‬ ‫ها‬ ‫رکورد‬ ‫از‬ ‫برخی‬‫دستور‬ ‫از‬ ‫علت‬ ‫همین‬ ‫به‬ ‫د‬CROSS APPLY
.‫نماییم‬ ‫می‬ ‫استفاده‬
‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬
--Create Employees table and insert values.
CREATE TABLE Employees
(
empid INT NOT NULL,
mgrid INT NULL,
empname VARCHAR(25) NOT NULL,
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
46 | Saba Creative Company
salary MONEY NOT NULL
CONSTRAINT PK_Employees PRIMARY KEY(empid)
);
GO
INSERT INTO Employees
VALUES
(
1,
NULL,
'Nancy',
$10000.00
);
INSERT INTO Employees
VALUES
(
2,
1,
'Andrew',
$5000.00
);
INSERT INTO Employees
VALUES
(
3,
1,
'Janet',
$5000.00
);
INSERT INTO Employees
VALUES
(
4,
1,
'Margaret',
$5000.00
);
INSERT INTO Employees
VALUES
(
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
47 | Saba Creative Company
5,
2,
'Steven',
$2500.00
);
INSERT INTO Employees
VALUES
(
6,
2,
'Michael',
$2500.00
);
INSERT INTO Employees
VALUES
(
7,
3,
'Robert',
$2500.00
);
INSERT INTO Employees
VALUES
(
8,
3,
'Laura',
$2500.00
);
INSERT INTO Employees
VALUES
(
9,
3,
'Ann',
$2500.00
);
INSERT INTO Employees
VALUES
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
48 | Saba Creative Company
(
10,
4,
'Ina',
$2500.00
);
INSERT INTO Employees
VALUES
(
11,
7,
'David',
$2000.00
);
INSERT INTO Employees
VALUES
(
12,
7,
'Ron',
$2000.00
);
INSERT INTO Employees
VALUES
(
13,
7,
'Dan',
$2000.00
);
INSERT INTO Employees
VALUES
(
14,
11,
'James',
$1500.00
);
GO
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
49 | Saba Creative Company
--Create Departments table and insert values.
CREATE TABLE Departments
(
deptid INT NOT NULL PRIMARY KEY,
deptname VARCHAR(25) NOT NULL,
deptmgrid INT NULL REFERENCES Employees
);
GO
INSERT INTO Departments
VALUES
(
1,
'HR',
2
);
INSERT INTO Departments
VALUES
(
2,
'Marketing',
7
);
INSERT INTO Departments
VALUES
(
3,
'Finance',
8
);
INSERT INTO Departments
VALUES
(
4,
'R&D',
9
);
INSERT INTO Departments
VALUES
(
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
50 | Saba Creative Company
5,
'Training',
4
);
INSERT INTO Departments
VALUES
(
6,
'Gardening',
NULL
);
GO
CREATE FUNCTION dbo.fn_getsubtree
(
@empid AS INT
)
RETURNS @TREE TABLE
(
empid INT NOT NULL,
empname VARCHAR(25) NOT NULL,
mgrid INT NULL,
lvl INT NOT NULL
)
AS
BEGIN
WITH Employees_Subtree(empid, empname, mgrid, lvl)
AS
(
-- Anchor Member (AM)
SELECT empid,
empname,
mgrid,
0
FROM Employees
WHERE empid = @empid
UNION ALL
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
51 | Saba Creative Company
-- Recursive Member (RM)
SELECT e.empid,
e.empname,
e.mgrid,
es.lvl + 1
FROM Employees AS e
JOIN Employees_Subtree AS es
ON e.mgrid = es.empid
)
INSERT INTO @TREE
SELECT *
FROM Employees_Subtree;
RETURN
END
GO
SELECT D.deptid,
D.deptname,
D.deptmgrid,
ST.empid,
ST.empname,
ST.mgrid
FROM Departments AS D
CROSS APPLY fn_getsubtree(D.deptmgrid) AS ST
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
52 | Saba Creative Company
‫آنها‬ ‫خروجی‬ ‫توابع‬ ‫برخی‬ : ‫نکته‬(‫باشد‬ ‫می‬ ‫فیلد‬ ‫یک‬ ‫در‬ ‫مقدار‬ ‫یک‬Scalar Valued Function‫می‬ ‫که‬ )
.‫نمود‬ ‫استفاده‬ ‫اسکریپت‬ ‫متن‬ ‫در‬ ‫را‬ ‫توابع‬ ‫این‬ ‫توان‬
‫دستور‬ ‫از‬ ‫آن‬ ‫برای‬ ‫که‬ ‫نماییم‬ ‫مشاهده‬ ‫را‬ ‫فروش‬ ‫های‬ ‫فاکتور‬ ‫شمسی‬ ‫تاریخ‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫عنوان‬ ‫به‬
: ‫کنیم‬ ‫می‬ ‫استفاده‬ ‫زیر‬
SELECT q.QuotationID,
q.Number,
q.Date,
sys3.fn_DateToShamsiDate(q.Date)
FROM SLS3.Quotation q
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
53 | Saba Creative Company
Scalar Valued Function
‫در‬SQL‫کدام‬ ‫هر‬ ‫و‬ ‫کنند‬ ‫می‬ ‫عمل‬ ‫فیلدها‬ ‫از‬ ‫خاصی‬ ‫نوع‬ ‫روی‬ ‫بر‬ ‫کدام‬ ‫هر‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫گوناگونی‬ ‫توابع‬
.‫دارند‬ ‫متفاوتی‬ ‫های‬ ‫خروجی‬
‫می‬ ‫توابع‬ ‫این‬ ‫از‬ ‫برخی‬ ‫به‬ ‫قسمت‬ ‫این‬ ‫در‬.‫پردازیم‬
‫زمان‬ ‫و‬ ‫تاریخ‬ ‫توابع‬
GETDATE‫تاریخ‬ :‫و‬‫ساعت‬‫جاری‬‫را‬‫برمی‬‫گرداند‬
:‫دهیم‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫سیستم‬ ‫جاری‬ ‫تاریخ‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬
SELECT GETDATE()
DATEPART‫یکی‬ :‫از‬‫بخش‬‫های‬‫عبارت‬date/time‫را‬‫برمی‬‫گرداند‬
‫و‬ ‫معرفی‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫بخش‬ ‫ابتدا‬ ‫منظور‬ ‫این‬ ‫برای‬.‫کنیم‬ ‫می‬ ‫معرفی‬ ‫را‬ ‫تاریخ‬ ‫فیلد‬ ‫سپس‬
‫زیر‬ ‫دستور‬ ‫با‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫نمود‬ ‫مشاهده‬ ‫توان‬ ‫می‬ ‫را‬ ‫روز‬ ‫تاریخ‬ ‫مختلف‬ ‫های‬ ‫بخش‬
SELECT GETDATE(),
DATEPART(YEAR, GETDATE()),
DATEPART(MONTH, GETDATE()),
DATEPART(DAY, GETDATE()),
DATEPART(dayofyear, GETDATE()),
DATEPART(weekday, GETDATE())
DATEADD‫این‬ ‫برای‬ ‫نماییم‬ ‫کم‬ ‫یا‬ ‫اضافه‬ ‫را‬ ‫مقداری‬ ‫تاریخ‬ ‫یک‬ ‫از‬ ‫بخشی‬ ‫به‬ ‫خواهیم‬ ‫می‬ ‫گاهی‬ :
‫اضافه‬ ‫آن‬ ‫به‬ ‫خواهیم‬ ‫می‬ ‫که‬ ‫را‬ ‫بخشی‬ ‫ابتدا‬ ‫تابع‬ ‫این‬ ‫در‬ .‫نمود‬ ‫استفاده‬ ‫تابع‬ ‫این‬ ‫از‬ ‫توان‬ ‫می‬ ‫منظور‬
‫اضا‬ ‫مقدار‬ ‫سپس‬ ‫و‬ ‫مشخص‬ ‫را‬ ‫نماییم‬.‫کنیم‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫تاریخ‬ ‫انتها‬ ‫در‬ ‫و‬ ‫را‬ ‫شدن‬ ‫فه‬
‫تاریخ‬ ‫به‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬: ‫نماییم‬ ‫اضافه‬ ‫را‬ ‫متفاوتی‬ ‫های‬ ‫بخش‬ ،‫روز‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
54 | Saba Creative Company
SELECT DATEADD(quarter, 4, GETDATE()) AS 'Quarter',
DATEADD(MONTH, 13, GETDATE()) AS 'Month',
DATEADD(dayofyear, 365, GETDATE()) AS 'Dayofyear',
DATEADD(DAY, 365, GETDATE()) AS 'Day',
DATEADD(week, 5, GETDATE()) AS 'Week'
SELECT DATEADD(weekday, 31, GETDATE()) AS 'Weekday',
DATEADD(hour, 23, GETDATE()) AS 'Hour',
DATEADD(minute, 59, GETDATE()) AS 'Minute',
DATEADD(second, 59, GETDATE()) AS 'Second',
DATEADD(millisecond, 1, GETDATE()) AS 'Millisecond'
DATEDIFF‫از‬ ‫منظور‬ ‫این‬ ‫برای‬ .‫نماییم‬ ‫مشص‬ ‫را‬ ‫زمانی‬ ‫بازه‬ ‫دو‬ ‫بین‬ ‫اختالف‬ ‫تا‬ ‫داریم‬ ‫نیاز‬ ‫گاهی‬ :
‫تابع‬DATEDIFF‫در‬ ‫و‬ ‫شروع‬ ‫تاریخ‬ ‫بعد‬ ،‫نظر‬ ‫مورد‬ ‫تاریخی‬ ‫بخش‬ ‫اول‬ ‫قسمت‬ ‫در‬ ‫که‬ ‫کنیم‬ ‫می‬ ‫استفاده‬
.‫دهیم‬ ‫می‬ ‫را‬ ‫پایان‬ ‫تاریخ‬ ‫انتها‬
‫تفاضل‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬‫جدول‬ ‫در‬ ‫موجود‬ ‫تاریخ‬ ‫بزرگترین‬ ‫و‬ ‫تاریخ‬ ‫کوچکترین‬ ‫بین‬ ‫روز‬ ‫تعداد‬
SalesOrderHeader: ‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬
SELECT DATEDIFF(
DAY,
(
SELECT MIN(OrderDate)
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
55 | Saba Creative Company
FROM Sales.SalesOrderHeader
),
(
SELECT MAX(OrderDate)
FROM Sales.SalesOrderHeader
)
)
‫ای‬ ‫رشته‬ ‫توابع‬
LEFT
‫این‬‫می‬ ‫نمایش‬ ‫چپ‬ ‫سمت‬ ‫از‬ ‫نمایید‬ ‫اعالم‬ ‫آن‬ ‫از‬ ‫بعد‬ ‫پارامتر‬ ‫در‬ ‫که‬ ‫را‬ ‫مشخصی‬ ‫حروف‬ ‫تعداد‬ ‫تابع‬
.‫دهد‬
‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬5‫جدول‬ ‫در‬ ‫را‬ ‫نام‬ ‫ستون‬ ‫از‬ ‫چپ‬ ‫سمت‬ ‫کاراکتر‬Product:‫دهد‬ ‫می‬ ‫نمایش‬
SELECT LEFT(NAME, 5)
FROM Production.Product
ORDER BY
ProductID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
56 | Saba Creative Company
RIGHT
‫می‬ ‫نمایش‬ ‫راست‬ ‫سمت‬ ‫از‬ ‫نمایید‬ ‫اعالم‬ ‫آن‬ ‫از‬ ‫بعد‬ ‫پارامتر‬ ‫در‬ ‫که‬ ‫را‬ ‫مشخصی‬ ‫حروف‬ ‫تعداد‬ ‫تابع‬ ‫این‬
.‫دهد‬
‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬5‫جدول‬ ‫در‬ ‫را‬ ‫نام‬ ‫ستون‬ ‫از‬ ‫راست‬ ‫سمت‬ ‫کاراکتر‬Product:‫دهد‬ ‫می‬ ‫نمایش‬
SELECT RIGHT(NAME, 5)
FROM Production.Product
ORDER BY
ProductID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
57 | Saba Creative Company
UPPER
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫بزرگ‬ ‫حروف‬ ‫های‬ ‫کاراکتر‬ ‫با‬ ‫را‬ ‫فیلد‬ ‫در‬ ‫موجود‬ ‫حروف‬ ‫تابع‬ ‫این‬
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫بزرگ‬ ‫حروف‬ ‫با‬ ‫را‬ ‫افراد‬ ‫نام‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬
SELECT UPPER(LastName),
LastName
FROM Person.Person
ORDER BY
LastName
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
58 | Saba Creative Company
LOWER
‫حروف‬ ‫تابع‬ ‫این‬.‫دهد‬ ‫می‬ ‫نمایش‬ ‫کوچک‬ ‫حروف‬ ‫های‬ ‫کاراکتر‬ ‫با‬ ‫را‬ ‫فیلد‬ ‫در‬ ‫موجود‬
.‫دهد‬ ‫می‬ ‫نمایش‬ ‫کوچک‬ ‫حروف‬ ‫با‬ ‫را‬ ‫افراد‬ ‫نام‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬
SELECT LOWER(LastName),
LastName
FROM Person.Person
ORDER BY
LastName
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
59 | Saba Creative Company
SUBSTRING
‫که‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫زمانی‬ ‫تابع‬ ‫این‬‫نمایش‬ ‫فیلد‬ ‫یک‬ ‫از‬ ‫را‬ ‫مشخصی‬ ‫کاراکتر‬ ‫تا‬ ‫کاراکتر‬ ‫از‬ ‫بخواهیم‬
.‫دهیم‬
‫زیر‬ ‫دستور‬ ‫مثال‬ ‫برای‬‫فیلد‬ ‫اول‬ ‫کاراکتر‬NAME‫عنوان‬ ‫به‬ ‫را‬Initial‫به‬ ‫را‬ ‫چهارم‬ ‫و‬ ‫سوم‬ ‫های‬ ‫کاراکتر‬ ‫و‬
‫عنوان‬ThirdAndFourthCharacters: ‫دهد‬ ‫می‬ ‫نمایش‬
SELECT NAME,
SUBSTRING(NAME, 1, 1) AS Initial,
SUBSTRING(NAME, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
60 | Saba Creative Company
REPLACE
‫نمایش‬ ‫و‬ ‫تعویض‬ ‫فیلد‬ ‫یک‬ ‫در‬ ‫ها‬ ‫کاراکتر‬ ‫از‬ ‫دیگر‬ ‫برخی‬ ‫با‬ ‫را‬ ‫ها‬ ‫کاراکتر‬ ‫از‬ ‫برخی‬ ‫که‬ ‫است‬ ‫الزم‬ ‫گاهی‬
.‫دهیم‬
.‫کنیم‬ ‫می‬ ‫استفاده‬ ‫تابع‬ ‫این‬ ‫از‬ ‫منظور‬ ‫این‬ ‫برای‬
‫در‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫عبارت‬'abcdefghicde'‫کلمه‬ ‫ترکیب‬ ‫هرجا‬ ،cde‫آن‬ ،‫شود‬ ‫مشاهده‬
‫با‬ ‫را‬xxx:‫نماید‬ ‫می‬ ‫تعویض‬
SELECT REPLACE('abcdefghicde', 'cde', 'xxx')
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
61 | Saba Creative Company
STUFF
‫کند‬ ‫می‬ ‫تعویض‬ ‫دیگری‬ ‫های‬ ‫کاراکتر‬ ‫با‬ ‫را‬ ‫ها‬ ‫کاراکتر‬ ‫از‬ ‫برخی‬ ‫قبل‬ ‫دستور‬ ‫همانند‬ ‫نیز‬ ‫تابع‬ ‫این‬‫به‬ ‫اما‬
.‫شود‬ ‫اعمال‬ ‫آن‬ ‫در‬ ‫تغییرات‬ ‫خواهیم‬ ‫می‬ ‫که‬ ‫است‬ ‫فیلدی‬ ‫آن‬ ‫به‬ ‫شده‬ ‫داده‬ ‫اول‬ ‫مقدار‬ ‫که‬ ‫صورت‬ ‫این‬
‫کاراکتر‬ ‫واقع‬ ‫در‬ .‫باشد‬ ‫می‬ ‫تغییر‬ ‫این‬ ‫پایان‬ ‫کاراکتر‬ ‫سوم‬ ‫مقدار‬ ‫تغییرو‬ ‫این‬ ‫شروع‬ ‫کاراکتر‬ ‫دوم‬ ‫مقدار‬
.‫شود‬ ‫می‬ ‫تعویض‬ ‫چهارم‬ ‫ورودی‬ ‫مقدار‬ ‫با‬ ‫و‬ ‫شوند‬ ‫می‬ ‫حذف‬ ‫مقدار‬ ‫دو‬ ‫این‬ ‫بین‬ ‫های‬
‫در‬ ‫خواهیم‬ ‫می‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫عبارت‬'abcdef'‫آن‬ ‫سوم‬ ‫تا‬ ‫دوم‬ ‫های‬ ‫کاراکتر‬ ‫جای‬ ‫به‬
‫عبارت‬ijklmn:‫دهیم‬ ‫قرار‬ ‫را‬
SELECT STUFF('abcdef', 2, 3, 'ijklmn')
LEN
.‫نماییم‬ ‫مشخص‬ ‫را‬ ‫فیلد‬ ‫هر‬ ‫طول‬ ‫که‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫منظور‬ ‫این‬ ‫به‬ ‫تابع‬ ‫این‬
‫در‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬:‫باشد‬ ‫می‬ ‫کاراکتر‬ ‫چند‬ ‫نام‬ ‫هر‬ ‫طول‬ ‫که‬ ‫کنیم‬ ‫مشخص‬ ‫زیر‬ ‫دستور‬
SELECT LEN(FirstName) AS Length,
FirstName,
LastName
FROM Sales.vIndividualCustomer
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
62 | Saba Creative Company
‫اضافی‬ ‫توابع‬
DATALENGTH
‫به‬ ‫بایت‬ ‫مقدار‬ ‫چه‬ ‫خود‬ ‫اطالعات‬ ‫ذخیره‬ ‫برای‬ ‫فیلد‬ ‫هر‬ ‫بدانیم‬ ‫تا‬ ‫است‬ ‫نیاز‬ ‫گاهی‬.‫است‬ ‫داده‬ ‫تخصیص‬ ‫خود‬
.‫کنیم‬ ‫می‬ ‫استفاده‬ ‫دستور‬ ‫این‬ ‫از‬ ‫کار‬ ‫این‬ ‫برای‬
‫داده‬ ‫تخصیص‬ ‫خود‬ ‫به‬ ‫فضا‬ ‫بایت‬ ‫چند‬ ‫کاال‬ ‫نام‬ ‫هر‬ ‫کنیم‬ ‫می‬ ‫مشخص‬ ‫زیر‬ ‫دستور‬ ‫کمک‬ ‫با‬ ‫مثال‬ ‫عنوان‬ ‫به‬
:‫است‬
SELECT DATALENGTH(NAME) AS length,
NAME
FROM Production.Product
ORDER BY
NAME
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
63 | Saba Creative Company
CHARINDEX
‫تابع‬ ‫این‬ .‫کند‬ ‫پیدا‬ ‫اصلی‬ ‫رشته‬ ‫یک‬ ‫در‬ ‫را‬ ‫فرعی‬ ‫رشته‬ ‫یک‬ ‫مختصات‬ ‫تا‬ ‫کند‬ ‫می‬ ‫کمک‬ ‫ما‬ ‫به‬ ‫تابع‬ ‫این‬
.‫باشد‬ ‫می‬ ‫اصلی‬ ‫رشته‬ ‫دوم‬ ‫مقدار‬ ‫و‬ ‫فرعی‬ ‫رشته‬ ‫اول‬ ‫مقدار‬ .‫دارد‬ ‫مقدار‬ ‫دو‬ ‫به‬ ‫نیاز‬
‫کاراکتر‬ ‫چندمین‬ ‫در‬ ‫فاصله‬ ‫کاراکتر‬ ‫نماییم‬ ‫مشخص‬ ‫خواهیم‬ ‫می‬ ‫ها‬ ‫کاال‬ ‫عنوان‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫نام‬
: ‫داد‬ ‫قرار‬ ‫کاال‬
SELECT CHARINDEX(' ', NAME),
ProductID,
NAME,
ProductNumber
FROM [Production].[Product]
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
64 | Saba Creative Company
: ‫یا‬ ‫و‬
SELECT CHARINDEX(
'bicycle',
'Reflectors are vital safety components of your
bicycle.'
)
.‫پردازیم‬ ‫می‬ ‫داخلی‬ ‫توابع‬ ‫برخی‬ ‫بررسی‬ ‫به‬ ‫ادامه‬ ‫در‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
65 | Saba Creative Company
‫دستورات‬Rank
‫توابع‬Ranking‫باعث‬‫می‬‫شود‬‫تا‬‫به‬‫هر‬‫یک‬‫از‬‫سطرهای‬‫جدول‬‫یک‬‫مقدار‬‫به‬‫عنوان‬‫امتیاز‬‫اختصاص‬
‫داده‬‫شود‬.‫این‬‫مقدار‬‫ممکن‬‫است‬‫منحصر‬‫به‬‫هر‬‫سطر‬‫باشد‬‫یا‬‫این‬‫که‬‫چند‬‫سطر‬‫می‬‫تواند‬‫دارای‬‫مقدار‬
‫مشابه‬،‫باشد‬‫این‬‫بستگی‬‫به‬‫تابع‬‫مورد‬‫استفاده‬‫خواهد‬‫داشت‬.
‫توجه‬‫داشته‬‫باشید‬‫که‬‫مقدار‬‫مربوط‬‫به‬‫این‬‫ستون‬‫در‬‫خروجی‬Query‫ها‬‫ممکن‬‫است‬‫در‬‫هر‬‫بار‬‫اجرا‬
‫متفاوت‬‫باشد‬(‫البته‬‫در‬‫صورتی‬‫که‬‫اطالعات‬‫پایگاه‬‫داده‬‫شما‬‫تغییر‬‫یابد‬‫یا‬‫محاسباتی‬‫بر‬‫اساس‬‫تاریخ‬
‫و‬‫زمان‬‫داشته‬‫باشید‬) .
‫ساده‬‫ترین‬،‫مثال‬‫افزودن‬‫شماره‬‫ردیف‬‫به‬‫خروجی‬Query‫می‬‫باشد‬‫که‬‫توسط‬‫تابع‬
ROW_NUMBER()‫انجام‬‫می‬‫شود‬‫و‬‫هر‬‫سطر‬‫یک‬‫مقدار‬‫منحصر‬‫به‬‫فرد‬‫خواهد‬‫داشت‬.
ROW_NUMBER
‫این‬‫تابع‬‫برای‬‫هر‬‫ردیف‬‫یک‬‫عدد‬‫منحصر‬‫بفرد‬‫را‬‫بر‬‫می‬‫گرداند‬،‫عدد‬‫انتساب‬‫داده‬‫شده‬‫به‬‫صورت‬‫ترتیبی‬
‫به‬‫هر‬‫رکورد‬‫انتساب‬‫داده‬‫می‬‫شود‬‫که‬‫از‬‫یک‬‫شروع‬‫شده‬‫و‬‫به‬‫تعداد‬‫رکورد‬‫های‬‫برگردانده‬‫شده‬‫افزایش‬
‫می‬‫یابد‬.
.‫باشد‬ ‫فیلدی‬ ‫چه‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫دادن‬ ‫شماره‬ ‫این‬ ‫ترتیب‬ ‫که‬ ‫شود‬ ‫بیان‬ ‫باید‬ ‫تابع‬ ‫این‬ ‫ادامه‬ ‫در‬
‫برای‬ ‫هایی‬ ‫ردیف‬ ‫شماره‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫تخصیص‬ ‫دیتا‬ ‫در‬ ‫موجود‬ ‫های‬ ‫دیتا‬ ‫نام‬‫می‬ ‫داده‬
: ‫شود‬
SELECT ROW_NUMBER() OVER(ORDER BY NAME ASC) AS RowNumber,
NAME,
recovery_model_desc
FROM sys.databases
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
66 | Saba Creative Company
‫شرط‬ ‫از‬ ‫قبل‬ ‫تابع‬ ‫این‬ ‫دوم‬ ‫قسمت‬ ‫در‬ ‫توان‬ ‫می‬ ‫همچنین‬ORDER BY‫دستور‬ ‫از‬PARTITION BY
.‫نمود‬ ‫استفاده‬
‫از‬ ‫بعد‬ ‫های‬ ‫فیلد‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫داده‬ ‫تا‬ ‫شود‬ ‫می‬ ‫باعث‬ ‫تابع‬ ‫این‬ ‫در‬ ‫کلید‬ ‫این‬PARTITION BY‫بندی‬ ‫گروه‬
‫مقدار‬ ‫از‬ ‫گروه‬ ‫هر‬ ‫ازای‬ ‫به‬ ‫و‬ ‫شوند‬1.‫نماید‬ ‫دادن‬ ‫شماره‬ ‫به‬ ‫شروع‬
‫اساس‬ ‫بر‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫فیلد‬recovery_model_desc‫شماره‬ ‫و‬ ‫بندی‬ ‫گروه‬ ‫ها‬ ‫دیتا‬ ‫نام‬
: ‫شود‬ ‫می‬ ‫گذاری‬
SELECT ROW_NUMBER() OVER(PARTITION BY recovery_model_desc
ORDER BY NAME ASC) AS
RowNumber,
NAME,
recovery_model_desc
FROM sys.databases
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
67 | Saba Creative Company
RANK
‫این‬‫تابع‬‫امتیازی‬‫از‬1‫تا‬‫الی‬‫آخر‬‫به‬‫هر‬‫سطر‬‫از‬‫خروجی‬‫دستور‬SELECT‫ما‬‫می‬‫دهد‬.‫اگر‬‫دو‬‫سطر‬‫دارای‬
‫مقادیر‬‫برابر‬‫باشند‬‫در‬‫این‬‫صورت‬‫مقدار‬‫تابع‬Rank‫برای‬‫هر‬‫دو‬‫سطر‬‫برابر‬‫خواهد‬‫بود‬.‫به‬‫مثال‬‫زیر‬‫توجه‬
:‫فرمایید‬
SELECT i.ProductID,
p.Name,
i.LocationID,
i.Quantity,
RANK() OVER(PARTITION BY i.LocationID ORDER BY
i.Quantity DESC) AS RANK
FROM Production.ProductInventory AS i
INNER JOIN Production.Product AS p
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY
i.LocationID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
68 | Saba Creative Company
‫همان‬‫طور‬‫که‬‫در‬‫خروجی‬‫مشاهده‬‫کرد‬ ‫خواهید‬‫بر‬‫اساس‬‫فیلد‬LocationID‫مقداری‬‫به‬‫عنوان‬Rank
‫اختصاص‬‫داده‬‫شده‬‫است‬.‫همچنین‬‫برای‬‫مقادیر‬‫یکسان‬Rank‫های‬‫برابر‬‫تخصیص‬‫داده‬‫شده‬‫است‬.
DENSE_RANK
‫عملکرد‬‫این‬‫تابع‬‫دقیقا‬‫همانند‬‫تابع‬RANK()‫می‬،‫باشد‬‫با‬‫این‬‫تفاوت‬‫که‬‫مقادیر‬‫مربوط‬‫به‬‫ستون‬
DENSE_RANK()‫به‬‫صورت‬‫مرتب‬‫به‬‫سطرها‬‫اختصاص‬‫داده‬‫می‬‫شود‬.‫به‬‫مثال‬‫زیر‬: ‫نمایید‬ ‫توجه‬
SELECT i.ProductID,
p.Name,
i.LocationID,
i.Quantity,
DENSE_RANK() OVER(PARTITION BY i.LocationID ORDER BY
i.Quantity DESC) AS
RANK
FROM Production.ProductInventory AS i
INNER JOIN Production.Product AS p
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
69 | Saba Creative Company
ON i.ProductID = p.ProductID
WHERE i.LocationID BETWEEN 3 AND 4
ORDER BY
i.LocationID
NTILE
‫این‬‫تابع‬‫برای‬‫دسته‬‫بندی‬‫کردن‬‫اطالعات‬‫استفاده‬‫می‬‫شود‬.‫تعداد‬‫دسته‬‫ها‬‫به‬‫صورت‬‫یک‬‫پارامتر‬‫به‬
‫این‬‫تابع‬‫داده‬‫می‬‫شود‬.‫به‬ ‫اطالعات‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫چهار‬‫و‬ ‫شوند‬ ‫می‬ ‫بندی‬ ‫تقسیم‬ ‫دسته‬
: ‫بینید‬ ‫می‬ ‫آن‬ ‫کنار‬ ‫در‬ ‫را‬ ‫دسته‬ ‫شماره‬
SELECT p.FirstName,
p.LastName,
NTILE(4) OVER(ORDER BY SalesYTD DESC) AS Quartile,
s.SalesYTD,
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
70 | Saba Creative Company
a.PostalCode
FROM Sales.SalesPerson AS s
INNER JOIN Person.Person AS p
ON s.BusinessEntityID = p.BusinessEntityID
INNER JOIN Person.Address AS a
ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
AND SalesYTD <> 0
‫در‬‫این‬‫تقسیم‬‫بندی‬‫دسته‬‫های‬‫با‬‫تعداد‬‫سطر‬‫بزرگتر‬‫در‬‫ابتدای‬‫خروجی‬‫نمایش‬‫داده‬‫می‬‫شود‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
71 | Saba Creative Company
‫دستورات‬Paging
OFFSET
‫در‬‫خیلی‬‫مواقع‬‫مالحظه‬‫میشود‬‫که‬‫برای‬‫نمایش‬‫تعدادی‬‫از‬‫رکوردهای‬‫یک‬‫جدول‬‫در‬‫پایگاه‬،‫داده‬‫کل‬
‫مقادیر‬‫موجود‬‫درآن‬‫توسط‬‫یک‬‫دستور‬select‫به‬‫دست‬‫می‬‫آید‬‫و‬‫صفحه‬‫بندی‬،‫خروجی‬‫به‬‫کنترلهای‬‫موجود‬
‫سپرده‬‫میشود‬.‫اگر‬‫پایگاه‬‫داده‬‫ما‬‫دارای‬‫تعداد‬‫زیادی‬‫رکورد‬،‫باشد‬‫آن‬‫موقع‬‫است‬‫که‬‫دچار‬‫مشکل‬
‫می‬‫شویم‬.‫فرض‬‫کنید‬‫به‬‫طور‬‫همزمان‬5‫نفر‬(‫که‬‫تعداد‬‫زیادی‬‫نیستند‬)‫از‬‫برنامه‬‫ما‬‫که‬‫شامل‬100000
‫سطر‬‫داده‬‫میباشد‬‫استفاده‬‫کنند‬‫و‬‫در‬‫هر‬،‫صفحه‬10‫رکورد‬‫نمایش‬‫داده‬‫شود‬‫و‬‫صفحه‬‫بندی‬‫ما‬‫از‬‫نوع‬
‫معقولی‬‫نباشد‬.‫در‬‫این‬‫صورت‬‫به‬‫جای‬‫اینکه‬‫با‬5×10‫رکورد‬‫داده‬‫را‬‫بارگزاری‬،‫کنیم‬5×100000‫رکورد‬
‫یعنی‬500000‫رکورد‬‫را‬‫برای‬‫به‬‫دست‬‫آوردن‬50‫رکورد‬‫بارگزاری‬‫میکنیم‬.‫در‬‫زیر‬‫روشی‬‫شرح‬‫داده‬‫میشود‬
‫که‬‫توسط‬،‫آن‬‫این‬‫سربار‬‫اضافه‬‫از‬‫روی‬‫برنامه‬‫و‬‫سرورهای‬‫مربوطه‬‫حذف‬‫شود‬.
‫از‬ ‫قبل‬ ‫تا‬SQL 2012:‫نمودیم‬ ‫می‬ ‫استفاده‬ ‫زیر‬ ‫همانند‬ ‫دستوراتی‬ ‫از‬ ‫باید‬ ‫بندی‬ ‫صفحه‬ ‫این‬ ‫انجام‬ ‫برای‬
DECLARE @PageSize INT,
@Page INT
SELECT @PageSize = 25,
@Page = 2;WITH PageNumbers AS(
SELECT c.FirstName,
c.LastName,
ROW_NUMBER()
OVER(ORDER BY FirstName)
ID
FROM
[Person].[Person] c
)
SELECT *
FROM PageNumbers
WHERE ID BETWEEN ((@Page - 1) * @PageSize + 1)
AND (@Page * @PageSize)
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
72 | Saba Creative Company
‫شامل‬ ‫را‬ ‫صفحه‬ ‫هر‬ ‫دستور‬ ‫این‬25‫می‬ ‫نمایش‬ ‫را‬ ‫دوم‬ ‫صفحه‬ ‫در‬ ‫موجود‬ ‫اطالعات‬ ‫و‬ ‫دهد‬ ‫می‬ ‫قرار‬ ‫رکورد‬
.‫دهد‬
‫دستور‬ ‫کمک‬ ‫با‬ ‫کار‬ ‫این‬ ‫اما‬OFFSET‫مشاهده‬ ‫را‬ ‫زیر‬ ‫دستور‬ ‫نکته‬ ‫این‬ ‫برای‬ .‫است‬ ‫انجام‬ ‫قابل‬ ‫راحتی‬ ‫به‬
: ‫نمایید‬
SELECT e.FirstName, [e].LastName
FROM [Person].[Person] AS [e]
ORDER BY
e.FirstName
OFFSET 0 ROWS
FETCH NEXT 25 ROWS ONLY;
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
73 | Saba Creative Company
،‫اول‬ ‫رکورد‬ ‫از‬ ‫دستور‬ ‫این‬25.‫دهد‬ ‫می‬ ‫نمایش‬ ‫و‬ ‫انتخاب‬ ‫را‬ ‫اول‬ ‫رکورد‬
SELECT e.FirstName,
[e].LastName
FROM [Person].[Person] AS [e]
ORDER BY
e.FirstName
OFFSET 25 ROWS
FETCH NEXT 25 ROWS ONLY;
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
74 | Saba Creative Company
‫رکورد‬ ‫از‬ ‫دستور‬ ‫این‬25‫و‬ ‫شروع‬ ،25.‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫آن‬ ‫از‬ ‫پس‬ ‫رکورد‬
PIVOT
Pivot table‫ها‬‫در‬‫واقع‬‫همانند‬‫سایر‬Table‫های‬‫دیگر‬‫می‬‫باشند‬‫فقط‬‫با‬‫این‬‫تفاوت‬‫که‬‫در‬‫نمایش‬
‫ردیف‬‫و‬‫ستون‬‫های‬‫آنها‬‫مقداری‬‫تفاوت‬‫وجود‬‫دارد‬.
‫دستور‬pivot‫جزو‬‫دستوراتی‬‫از‬Sql server‫می‬‫باشد‬‫که‬‫ممکن‬‫است‬‫در‬‫بیشتر‬‫پروژه‬‫هایمان‬‫برای‬
‫نمایش‬‫گزارشات‬‫مختلف‬‫به‬‫استفاده‬‫از‬‫آن‬‫نیاز‬‫داشته‬‫باشیم‬.‫کاربرد‬‫دستور‬pivot‫تقریبا‬‫تبدیل‬
‫نمایش‬‫خروجی‬‫یک‬‫کوئری‬‫از‬‫حالت‬‫ردیفی‬‫به‬‫ستونی‬‫می‬‫باشد‬.‫به‬‫صورت‬‫خیلی‬‫خالصه‬‫بخواهیم‬‫نحوه‬
‫کارکرد‬‫این‬‫دستور‬‫را‬‫بیان‬‫کنیم‬،‫کار‬‫آن‬‫یک‬‫چرخش‬90‫درجه‬‫جداول‬‫می‬‫باشد‬،‫یعنی‬‫جای‬‫ستون‬‫و‬
‫ردیف‬‫ها‬‫را‬‫با‬‫هم‬‫جابه‬‫جا‬‫کنیم‬.
‫با‬‫یک‬‫مثال‬‫بهتر‬‫متوجه‬‫کارکرد‬‫این‬‫دستور‬‫خواهید‬‫شد‬.‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬‫یک‬ ‫با‬ ‫را‬ ‫اطالعاتی‬ ‫ابتدا‬
: ‫بدهیم‬ ‫نمایش‬ ‫ردیف‬
SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days,
[0],
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
75 | Saba Creative Company
[1],
[2],
[3],
[4]
FROM (
SELECT DaysToManufacture,
StandardCost
FROM Production.Product
) AS SourceTable
PIVOT(
AVG(StandardCost)
FOR DaysToManufacture IN ([0], [1], [2], [3],
[4])
) AS PivotTable
‫بعد‬‫از‬‫نوشتن‬Pivot‫و‬‫داخل‬‫پرانتز‬‫مقابل‬‫آن‬‫خواهیم‬‫داشت‬:
1.‫یک‬aggregation function.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
76 | Saba Creative Company
2.‫نوشتن‬‫کلمه‬‫کلیدی‬For‫و‬‫تعیین‬‫نام‬‫فیلدی‬‫که‬‫قصد‬‫تبدیل‬‫آن‬‫به‬‫چنید‬‫ستون‬‫را‬‫خواهیم‬
‫داشت‬.
‫همانطور‬‫که‬‫در‬syntax‫این‬‫دستور‬‫مالحضه‬‫می‬‫کنید‬،‫دستور‬pivot‫حتما‬‫باید‬‫داری‬‫یک‬
aggregation function‫باشد‬.
‫فیلد‬‫مقابل‬‫کلمه‬For‫با‬‫توجه‬‫به‬‫مقادیری‬‫که‬‫بر‬‫میگرداند‬‫هر‬‫کدام‬‫به‬‫ستون‬‫هایی‬‫مجزا‬‫تبدیل‬‫می‬
‫شوند‬.‫مثال‬‫اگر‬‫در‬‫مقابل‬for‫اسم‬‫ستونی‬‫را‬‫داریم‬‫که‬‫محتوای‬‫آن‬‫فیلد‬‫دارای‬‫سه‬‫مقدار‬A,B,C‫می‬
‫باشد‬،‫در‬‫نتیجه‬‫خروجی‬‫دستور‬‫شاهد‬‫سه‬‫ستون‬‫با‬‫عنوان‬‫های‬A,B,C‫خواهیم‬‫بود‬.
: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ ‫تر‬ ‫پیچیده‬ ‫مثالی‬ ‫عنوان‬ ‫به‬
SELECT VendorID,
[250] AS Emp1,
[251] AS Emp2,
[256] AS Emp3,
[257] AS Emp4,
[260] AS Emp5
FROM (
SELECT PurchaseOrderID,
EmployeeID,
VendorID
FROM Purchasing.PurchaseOrderHeader
) p
PIVOT(
COUNT(PurchaseOrderID)
FOR EmployeeID IN ([250], [251], [256], [257],
[260])
) AS pvt
ORDER BY
pvt.VendorID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
77 | Saba Creative Company
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
78 | Saba Creative Company
Temp Table
‫تکنولوژی‬CTE‫از‬‫نسخه‬SQL Server 2005‫رسمیت‬‫یافته‬‫است‬‫و‬‫شامل‬‫یک‬result set‫موقتی‬
‫است‬‫که‬‫دارای‬‫نام‬‫مشخص‬‫بوده‬‫و‬‫می‬­‫توان‬‫از‬‫آن‬‫در‬‫دستورات‬SELECT, INSERT, UPDATE,
DELETE‫استفاده‬‫کرد‬.‫همچنین‬‫از‬CTE‫می‬‫توان‬‫در‬‫دستور‬CREATE VIEW‫و‬‫دستور‬SELECT‫مربوط‬
‫به‬‫آن‬‫استفاده‬‫کرد‬.‫در‬‫نسخه‬SQL Server 2008‫نیز‬‫امکان‬‫استفاده‬‫از‬CTE‫در‬‫دستور‬MERGE‫فراهم‬
‫شده‬‫است‬.
‫در‬SQL Server‫از‬‫دو‬‫نوع‬CTE‫بازگشتی‬‫و‬‫غیر‬‫بازگشتی‬‫پشتیبانی‬‫می‬‫شود‬.
‫انواع‬‫روش‬‫های‬‫ایجاد‬‫جداول‬‫موقت‬
‫برای‬‫استفاده‬‫از‬‫جداول‬‫موقتی‬‫در‬‫سرور‬SQL،‫سه‬‫راه‬‫زیر‬‫وجود‬‫دارد‬.
#TempTable
‫روش‬‫اول‬:‫استفاده‬‫از‬‫دستوری‬‫مانند‬‫زیر‬‫است‬‫که‬‫سبب‬‫ایجاد‬‫جدول‬‫موقتی‬‫در‬‫بانک‬‫سیستمی‬
tempdb‫می‬‫شود‬.‫زمانی‬‫که‬‫شما‬‫ارتباط‬‫خود‬‫را‬‫با‬‫سرور‬SQL‫قطع‬‫می‬‫کنید‬‫به‬‫صورت‬‫اتوماتیک‬
‫جداول‬‫موقت‬‫شما‬‫از‬‫بانک‬tempdb‫حذف‬‫می‬‫شوند‬.‫این‬‫روش‬‫در‬‫برنامه‬‫نویسی‬‫پیشنهاد‬‫نمی‬‫شود‬
‫و‬‫فقط‬‫در‬‫کارهای‬‫موقتی‬‫و‬‫آزمایشی‬‫مناسب‬‫است‬.
SELECT * INTO #Temptable
FROM [Production].[Product]
UPDATE #Temptable
SET ListPrice = ListPrice + 100
SELECT *
FROM #Temptable
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
79 | Saba Creative Company
@TempTable
‫روش‬‫دوم‬:‫استفاده‬‫از‬‫متغیر‬‫نوع‬Table،‫است‬‫که‬‫نمونه‬‫آن‬‫در‬‫مثال‬‫زیر‬‫دیده‬‫می‬‫شود‬.‫زمانیکه‬‫از‬
‫محدوده‬‫جاری‬‫کد‬‫خودتان‬‫خارج‬‫شوید‬‫آن‬‫متغیر‬‫نیز‬‫از‬‫حافظه‬‫پاک‬‫میشود‬.‫از‬‫این‬،‫روش‬‫عموما‬‫در‬
‫کدهای‬Stored Procedure‫ها‬‫و‬UserDefined Function‫ها‬‫استفاده‬‫می‬‫شود‬.
DECLARE @tempTable TABLE
(
[ProductID] [int] NOT NULL,
[ProductName] [nvarchar](40) NOT NULL,
[ListPrice] [money] NULL
)
INSERT INTO @tempTable
SELECT ProductID,
NAME,
ListPrice
FROM [Production].[Product]
UPDATE @temptable
SET [ListPrice] = [ListPrice] + 10
SELECT *
FROM @tempTable
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
80 | Saba Creative Company
CTE
‫روش‬‫سوم‬:‫استفاده‬‫از‬CTE‫است‬‫که‬‫مزیت‬‫هایی‬‫نسبت‬‫به‬‫دو‬‫روش‬‫قبلی‬‫دارد‬‫و‬‫در‬‫بخش‬‫بعدی‬‫به‬
‫نحوه‬‫تعریف‬‫و‬‫استفاده‬‫از‬‫آن‬‫خواهیم‬‫پرداخت‬.
‫کار‬‫با‬CTE
‫ساده‬‫ترین‬‫شکل‬‫تعریف‬‫یک‬CTE‫به‬‫صورت‬‫زیر‬‫است‬:
WITH yourName [(Column1, Column2, ...)]
AS
(
your query
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
81 | Saba Creative Company
)
‫با‬‫کلمه‬WITH‫شروع‬‫شده‬‫و‬‫یک‬‫نام‬‫اختیاری‬‫به‬‫آن‬‫داده‬‫می‬‫شود‬.‫سپس‬‫فهرست‬‫فیلدهای‬‫جدول‬
‫موقت‬‫را‬‫درون‬‫زوج‬،‫پرانتز‬‫مشخص‬‫می‬‫کنید‬.‫تعریف‬‫این‬‫فیلدها‬‫اختیاری‬‫است‬‫و‬‫اگر‬‫حذف‬،‫شود‬
‫فیلدهای‬‫جدول‬،‫موقت‬‫مانند‬‫فیلدهای‬‫کوئری‬‫مربوطه‬‫خواهد‬‫بود‬.
your query‫شامل‬‫دستوری‬‫است‬‫که‬‫سبب‬‫تولید‬‫یک‬result set‫می‬‫شود‬.‫قواعد‬‫تعریف‬‫این‬‫کوئری‬
‫مشابه‬‫قواعد‬‫تعریف‬‫کوئری‬‫است‬‫که‬‫در‬‫دستور‬CREATE VIEW‫کاربرد‬‫دارد‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
82 | Saba Creative Company
‫شکل‬‫کلی‬‫دستور‬
‫همانطور‬‫که‬‫از‬‫این‬‫تصویر‬‫مشخص‬‫است‬‫می‬‫توان‬‫چندین‬‫بلوک‬‫از‬‫این‬‫ساختار‬‫را‬‫به‬‫دنبال‬‫هم‬‫تعریف‬
‫نمود‬‫که‬‫با‬‫کاما‬‫از‬‫هم‬‫جدا‬‫می‬‫شوند‬.‫در‬‫واقع‬‫یکی‬‫از‬‫کاربردهای‬CTE‫ایجاد‬‫قطعات‬‫کوچکی‬‫است‬‫که‬
‫امکان‬‫استفاده‬‫مجدد‬‫را‬‫به‬‫شما‬‫داده‬‫و‬‫می‬‫تواند‬‫سبب‬‫خواناتر‬‫شدن‬‫کدهای‬‫پیچیده‬‫شود‬.
‫یکی‬‫دیگر‬‫از‬‫کاربردهای‬CTE‫آنجایی‬‫است‬‫که‬‫شما‬‫نمی‬‫خواهید‬‫یک‬‫شی‬View‫ی‬‫عمومی‬‫تعریف‬‫کنید‬
‫و‬‫در‬‫عین‬‫حال‬‫می‬‫خواهید‬‫از‬‫مزایای‬View‫ها‬‫بهرمند‬‫شوید‬.
‫و‬‫همچنین‬‫از‬‫کاربردهای‬‫دیگر‬CTE‫تعریف‬‫جدول‬‫موقت‬‫و‬‫استفاده‬‫از‬‫آن‬‫جدول‬‫به‬‫صورت‬‫همزمان‬‫در‬
‫یک‬‫دستور‬‫است‬.
‫بعد‬‫از‬‫آنکه‬CTE‫یا‬CTE‫های‬‫خودتان‬‫را‬‫تعریف‬‫کردید‬‫آنگاه‬‫می‬‫توانید‬‫مانند‬‫جداول‬‫معمولی‬‫از‬‫آنها‬
‫استفاده‬‫کنید‬.‫استفاده‬‫از‬‫این‬‫جداول‬‫توسط‬‫دستوری‬‫خواهد‬‫بود‬‫که‬‫دقیقا‬‫بعد‬‫از‬‫تعریف‬CTE‫نوشته‬
‫می‬‫شود‬.
‫ایجاد‬‫یک‬CTE‫غیر‬‫بازگشتی‬
‫مثال‬،‫اول‬‫یک‬CTE‫غیر‬‫بازگشتی‬‫ساده‬‫را‬‫نشان‬‫میدهد‬.
WITH CTE_temp
AS
(
SELECT NAME,
ProductNumber,
ListPrice
FROM [Production].[Product]
)
SELECT *
FROM CTE_temp
ORDER BY
ListPrice DESC
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
83 | Saba Creative Company
‫مثال‬‫دوم‬‫نمونه‬‫ای‬‫دیگر‬‫از‬‫یک‬CTE‫غیر‬‫بازگشتی‬‫است‬.
WITH orderSales(OrderID, Total)
AS
(
SELECT SalesOrderID,
SUM(UnitPrice * OrderQty) AS Total
FROM [Sales].[SalesOrderDetail]
GROUP BY
SalesOrderID
)
SELECT O.SalesPersonID,
SUM(OS.Total) AS TotalSales
FROM [Sales].[SalesOrderHeader] AS O
INNER JOIN [orderSales] AS OS
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
84 | Saba Creative Company
ON O.SalesOrderID = OS.[OrderID]
GROUP BY
O.SalesPersonID
ORDER BY
TotalSales DESC
‫هدف‬‫این‬،‫کوئری‬‫محاسبه‬‫کل‬‫میزان‬‫فروش‬،‫کاالها‬‫به‬‫ازای‬‫هر‬‫فروش‬ ‫پرسنل‬‫می‬‫باشد‬.‫ابتدا‬‫از‬‫جدول‬
SalesOrderDetail‫مجموع‬‫فروش‬‫هر‬‫سفارش‬‫محاسبه‬‫شده‬‫و‬‫نتیجه‬‫آن‬‫در‬‫یک‬CTE‫به‬‫نام‬
orderSales‫قرار‬‫می‬‫گیرد‬‫و‬‫از‬JOIN‫این‬‫جدول‬‫موقت‬‫با‬‫جدول‬SalesOrderHeader‫محاسبه‬
‫نهایی‬‫انجام‬‫شده‬‫و‬‫نتیجه‬‫ای‬‫مانند‬‫این‬‫تصویر‬‫حاصل‬‫می‬‫شود‬.
‫مثال‬‫سوم‬‫استفاده‬‫از‬‫دو‬CTE‫را‬‫به‬‫صورت‬‫همزمان‬‫نشان‬‫می‬‫دهد‬:
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
85 | Saba Creative Company
WITH CustomerList
AS
(
SELECT CustomerID,
AccountNumber
FROM [Sales].[Customer]
)
,OrderList
AS
(
SELECT CustomerID,
OrderDate
FROM [Sales].[SalesOrderHeader]
WHERE YEAR([OrderDate]) > 2000
)
SELECT cl.AccountNumber,
YEAR(ol.OrderDate) AS SalesYear
FROM customerList AS cl
JOIN orderList AS ol
ON cl.[CustomerID] = ol.[CustomerID]
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
86 | Saba Creative Company
‫مثال‬‫چهارم‬‫استفاده‬‫مجدد‬‫از‬‫یک‬CTE‫را‬‫نشان‬‫می‬‫دهد‬.‫فرض‬‫کنید‬‫جدولی‬‫به‬‫نام‬digits‫داریم‬‫که‬
‫فقط‬‫یک‬‫فیلد‬digit‫دارد‬‫و‬‫دارای‬10‫رکورد‬‫با‬‫مقادیر‬0‫تا‬9‫است‬.‫مانند‬‫تصویر‬‫زیر‬
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
87 | Saba Creative Company
‫حال‬‫می‬­‫خواهیم‬‫از‬‫طریق‬CROSS JOIN‫اعداد‬1‫تا‬100‫را‬‫با‬‫استفاده‬‫از‬‫مقادیر‬‫این‬‫جدول‬‫تولید‬‫کنیم‬.
‫کد‬‫زیر‬‫آنرا‬‫نشان‬‫می‬‫دهد‬:
WITH digitList
AS
(
SELECT [digit]
FROM [digits]
)
SELECT a.[digit] * 10 + b.[digit] + 1 AS [Digit]
FROM [digitList] AS a
CROSS JOIN [digitList] AS b
‫در‬‫این‬‫کد‬‫یک‬CTE‫تعریف‬‫شده‬‫و‬‫دو‬‫بار‬‫مورد‬‫استفاده‬‫قرار‬‫گرفته‬‫است‬.‫مثال‬‫اگر‬‫بخواهید‬‫اعداد‬1‫تا‬
1000‫را‬‫تولید‬‫کنید‬‫می‬‫توانید‬‫سه‬‫بار‬‫از‬‫آن‬‫استفاده‬‫کنید‬.‫حاصل‬‫این‬‫دستور‬result set‫ی‬‫مانند‬‫زیر‬
‫است‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
88 | Saba Creative Company
‫حتی‬‫می‬‫توان‬‫از‬‫یک‬CTE‫در‬‫کوئری‬CTE‫بعدی‬‫مانند‬‫کد‬‫زیر‬‫استفاده‬‫کرد‬.
WITH CTE_1 AS
(
....
),
CTE_2 AS
(
SELECT ... FROM CTE_1 JOIN ...
)
SELECT *
FROM FOO
LEFT JOIN CTE_1
LEFT JOIN CTE_2
‫ایجاد‬‫یک‬CTE‫بازگشتی‬
‫از‬CTE‫بازگشتی‬‫برای‬‫پیمایش‬‫جداولی‬‫استفاده‬‫می‬‫شود‬‫که‬‫رکوردهای‬‫آن‬‫دارای‬‫رابطه‬‫سلسله‬‫مراتبی‬
‫یا‬‫درختی‬‫است‬.‫نمونه‬‫این‬،‫جداول‬‫جدول‬‫کارمندان‬‫است‬‫که‬‫مدیر‬‫هر‬‫کارمند‬‫نیز‬‫مشخص‬‫شده‬‫است‬
‫یا‬‫جدولی‬‫که‬‫ساختار‬‫سازمانی‬‫را‬‫نشان‬‫می‬‫دهد‬‫یا‬‫جدولی‬‫که‬‫موضوعات‬‫درختی‬‫را‬‫در‬‫خود‬‫ذخیره‬‫کرده‬
‫است‬.‫یکی‬‫از‬‫مزایای‬‫استفاده‬‫از‬CTE،‫بازگشتی‬‫سرعت‬‫کار‬‫آن‬‫در‬‫مقایسه‬‫با‬‫روش‬‫های‬‫پردازشی‬‫دیگر‬
‫است‬.
‫ساختار‬‫کلی‬‫یک‬‫دستور‬CTE‫بازگشتی‬‫به‬‫صورت‬‫زیر‬‫است‬.
WITH cteName AS
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
89 | Saba Creative Company
(
query1
UNION ALL
query2
)
‫در‬‫بدنه‬CTE‫حداقل‬‫دو‬‫عضو‬(‫کوئری‬)‫وجود‬‫دارد‬‫که‬‫بایستی‬‫با‬‫یکی‬‫از‬‫عبارت‬‫های‬‫زیر‬‫به‬‫هم‬‫متصل‬
‫شوند‬.
UNION
UNION ALL
INTERSECT
EXCEPT
query1‫شامل‬‫دستوری‬‫است‬‫که‬‫اولین‬‫سری‬‫از‬‫رکوردهای‬result set‫نهایی‬‫را‬‫تولید‬‫می‬‫کند‬.‫اصطالحا‬
‫به‬‫این‬‫کوئری‬anchor member‫می‬‫گویند‬.
‫بعد‬‫از‬‫دستور‬query1،‫حتما‬‫بایستی‬‫از‬UNION ALL‫و‬‫امثال‬‫آنها‬‫استفاده‬‫شود‬.
‫سپس‬query2‫ذکر‬‫می‬‫شود‬.‫اصطالحا‬‫به‬‫این‬‫کوئری‬recursive member‫گفته‬‫می‬‫شود‬.‫این‬‫کوئری‬
‫شامل‬‫دستوری‬‫است‬‫که‬‫سطوح‬‫بعدی‬‫درخت‬‫را‬‫تولید‬‫خواهد‬‫کرد‬.‫این‬‫کوئری‬‫دارای‬‫شرایط‬‫زیر‬‫است‬.
‫حتما‬‫بایستی‬‫به‬CTE‫که‬‫همان‬cteName‫است‬‫اشاره‬‫کرده‬‫و‬‫در‬‫جایی‬‫از‬‫آن‬‫استفاده‬‫شده‬‫باشد‬.‫به‬
‫عبارت‬‫دیگر‬‫از‬‫رکوردهای‬‫موجود‬‫در‬‫جدول‬‫موقت‬‫استفاده‬‫کند‬‫تا‬‫بتواند‬‫رکوردهای‬‫بعدی‬‫را‬‫تشخیص‬
‫دهد‬.
‫حتما‬‫بایستی‬‫مطمئن‬‫شوید‬‫که‬‫شرایط‬‫کافی‬‫برای‬‫پایان‬‫حلقه‬‫پیمایش‬‫رکوردها‬‫را‬‫داشته‬‫باشد‬‫در‬‫غیر‬
‫این‬‫صورت‬‫سبب‬‫تولید‬‫حلقه‬‫بی‬‫پایان‬‫خواهد‬‫شد‬.
‫بدنه‬CTE‫می‬‫تواند‬‫حاوی‬‫چندین‬anchor member‫و‬‫چندین‬recursive member‫باشد‬‫ولی‬‫فقط‬
recursive member‫ها‬‫هستند‬‫که‬‫به‬CTE‫اشاره‬‫می‬‫کنند‬.
‫برای‬‫آنکه‬‫نکات‬‫فوق‬‫روشن‬‫شود‬‫به‬‫مثال‬‫های‬‫زیر‬‫توجه‬‫کنید‬.
‫فرض‬‫کنید‬‫جدولی‬‫از‬‫کارمندان‬‫و‬‫مدیران‬‫آنها‬‫داریم‬‫که‬‫به‬‫صورت‬‫زیر‬‫تعریف‬‫و‬‫مقداردهی‬‫اولیه‬‫شده‬
‫است‬.
IF OBJECT_ID('Employees', 'U') IS NOT NULL
DROP TABLE dbo.Employees
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
90 | Saba Creative Company
GO
CREATE TABLE dbo.Employees
(
EmployeeID INT NOT NULL PRIMARY KEY,
FirstName VARCHAR(50)NOT NULL,
LastName VARCHAR(50)NOT NULL,
ManagerID INT NULL
)
GO
INSERT INTO Employees
VALUES
(
101,
'Alireza',
'Nematollahi',
NULL
)
INSERT INTO Employees
VALUES
(
102,
'Ahmad',
'Mofarrahzadeh',
101
)
INSERT INTO Employees
VALUES
(
103,
'Mohammad',
'BozorgGhommi',
102
)
INSERT INTO Employees
VALUES
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
91 | Saba Creative Company
(
104,
'Masoud',
'Narimani',
103
)
INSERT INTO Employees
VALUES
(
105,
'Mohsen',
'Hashemi',
103
)
INSERT INTO Employees
VALUES
(
106,
'Aref',
'Partovi',
102
)
INSERT INTO Employees
VALUES
(
107,
'Hosain',
'Mahmoudi',
106
)
INSERT INTO Employees
VALUES
(
108,
'Naser',
'Pourali',
106
)
INSERT INTO Employees
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
92 | Saba Creative Company
VALUES
(
109,
'Reza',
'Bagheri',
102
)
INSERT INTO Employees
VALUES
(
110,
'Abbas',
'Najafian',
102
)
‫مثال‬‫اول‬:‫می‬‫خواهیم‬‫فهرست‬‫کارمندان‬‫را‬‫به‬‫همراه‬‫نام‬‫مدیر‬‫آنها‬‫و‬‫شماره‬‫سطح‬‫درخت‬‫نمایش‬
‫دهیم‬.‫کوئری‬‫زیر‬‫نمونه‬‫ای‬‫از‬‫یک‬‫کوئری‬‫بر‬‫اساس‬CTE‫بازگشتی‬‫می‬‫باشد‬.
WITH cteReports(EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID,
FirstName,
LastName,
ManagerID,
1
FROM Employees
WHERE ManagerID IS NULL
UNION ALL
SELECT e.EmployeeID,
e.FirstName,
e.LastName,
e.ManagerID,
r.EmpLevel + 1
FROM Employees e
INNER JOIN cteReports r
ON e.ManagerID = r.EmpID
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
93 | Saba Creative Company
)
SELECT FirstName + ' ' + LastName AS FullName,
EmpLevel,
(
SELECT FirstName + ' ' + LastName
FROM Employees
WHERE EmployeeID = cteReports.MgrID
) AS Manager
FROM cteReports
ORDERBY EmpLevel,
MgrID
‫کوئری‬‫اول‬‫در‬‫بدنه‬CTE‫رکورد‬‫مدیری‬‫را‬‫می‬‫دهد‬‫که‬‫ریشه‬‫درخت‬‫بوده‬‫و‬‫باالسری‬‫ندارد‬‫و‬‫شماره‬‫سطح‬
‫این‬‫رکورد‬‫را‬1‫در‬‫نظر‬‫می‬‫گیرد‬.
‫کوئری‬‫دوم‬‫در‬‫بدنه‬CTE‫از‬‫یک‬JOIN‫بین‬Employees‫و‬cteReports‫استفاده‬‫کرده‬‫و‬‫کارمندان‬‫زیر‬
‫دست‬‫هر‬‫کارمند‬‫قبلی‬(‫فرزندان‬)‫را‬‫بدست‬‫آورده‬‫و‬‫مقدار‬‫شماره‬‫سطح‬‫آنرا‬‫به‬‫صورت‬Level+1‫تنظیم‬
‫می‬‫کند‬.
‫در‬‫نهایت‬‫با‬‫استفاده‬‫از‬CTE‫و‬‫یک‬subquery‫جهت‬‫بدست‬‫آوردن‬‫نام‬‫مدیر‬‫هر‬،‫کارمند‬‫نتیجه‬‫نهایی‬
‫تولید‬‫می‬‫شود‬.
‫مثال‬‫دوم‬:‫می‬‫خواهیم‬‫شناسه‬‫یک‬‫کارمند‬‫را‬‫بدهیم‬‫و‬‫نام‬‫او‬‫و‬‫نام‬‫مدیران‬‫وی‬‫را‬‫به‬‫عنوان‬‫جواب‬‫در‬
‫خروجی‬‫بگیریم‬.
WITH cteReports(EmpID, FirstName, LastName, MgrID, EmpLevel)
AS
(
SELECT EmployeeID,
FirstName,
LastName,
ManagerID,
1
FROM Employees
WHERE EmployeeID = 110
UNION ALL
SELECT e.EmployeeID,
e.FirstName,
e.LastName,
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
94 | Saba Creative Company
e.ManagerID,
r.EmpLevel + 1
FROM Employees e
INNER JOIN cteReports r
ON e.EmployeeID = r.MgrID
)
SELECT FirstName + ' ' + LastName AS FullName,
EmpLevel
FROM cteReports
ORDERBY EmpLevel
‫اگر‬‫دقت‬‫کنید‬‫اولین‬‫تفاوت‬‫در‬‫خط‬‫اول‬‫مشاهده‬‫می‬‫شود‬.‫در‬‫اینجا‬‫مشخص‬‫می‬‫کند‬‫که‬‫اولین‬‫سری‬‫از‬
‫رکوردها‬‫چگونه‬‫انتخاب‬‫شود‬.‫مثال‬‫کارمندی‬‫را‬‫می‬‫خواهیم‬‫که‬‫شناسه‬‫آن‬110‫باشد‬.
‫دومین‬‫تفاوت‬‫اصلی‬‫این‬‫کوئری‬‫با‬‫مثال‬،‫قبلی‬‫در‬‫قسمت‬‫دوم‬‫دیده‬‫می‬‫شود‬.‫شما‬‫می‬‫خواهید‬‫مدیر‬
(‫پدر‬)‫کارمندی‬‫که‬‫در‬‫آخرین‬‫پردازش‬‫در‬‫جدول‬‫موقت‬‫قرار‬‫گرفته‬‫است‬‫را‬‫استخراج‬‫کنید‬.
‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company
95 | Saba Creative Company

More Related Content

PPTX
thoracic and abdominal trauma radiology finding
PPTX
8 miscellaneous chest conditions
PPTX
Km in project based com
DOCX
Rahnamaye shabake majazi
PDF
آموزش رباتیک برای کودکان در چالیک
PDF
Aliaskari,fayazi resource sharing.markor.. .docx
PDF
تحلیل سیزدهیمن دوره_مسابقات_علمی
PPSX
بازاریابی دیجیتال - Linked in
thoracic and abdominal trauma radiology finding
8 miscellaneous chest conditions
Km in project based com
Rahnamaye shabake majazi
آموزش رباتیک برای کودکان در چالیک
Aliaskari,fayazi resource sharing.markor.. .docx
تحلیل سیزدهیمن دوره_مسابقات_علمی
بازاریابی دیجیتال - Linked in

Similar to Sql function v03 (20)

PDF
maxscale and spider engine for performance and security and clustering
PDF
Farakhan weblog1
PDF
Network management 2_sample
PDF
تیم پراکنده چیست؟
PDF
Rahnamaye shabake majazi
PDF
راهنماي شبكه مجازي مدرسان كامپيوتر
PPTX
پژوهش و ارایه999999999999999999999999999.pptx
PPTX
کارگاه آزمون سازی
DOCX
استخدام کارآموز دارالترجمه
PDF
متدلوژی تحقیق
PDF
رفع-مشکل-مشابهت-یابی-در-پژوهشیار (2).pdf
PDF
the refrence of Oracle Database - The 0.4 release
PDF
چگونه در سازمان خود تیم تولید محتوا تشکیل دهیم؟
PPT
شیوه ارائه مطالب علمی و فنی (دروس 9 تا 16)
DOCX
یادگیری برنامه نویسی و معلم خصوصی برنامه نویسی
PPTX
Educational data mining
PDF
META IRAN
PPTX
Searching techniq farsi
PDF
نکاتی چند درباره فلسفه تدریس علم رایانه در جامعۀ دانش- بنیان
maxscale and spider engine for performance and security and clustering
Farakhan weblog1
Network management 2_sample
تیم پراکنده چیست؟
Rahnamaye shabake majazi
راهنماي شبكه مجازي مدرسان كامپيوتر
پژوهش و ارایه999999999999999999999999999.pptx
کارگاه آزمون سازی
استخدام کارآموز دارالترجمه
متدلوژی تحقیق
رفع-مشکل-مشابهت-یابی-در-پژوهشیار (2).pdf
the refrence of Oracle Database - The 0.4 release
چگونه در سازمان خود تیم تولید محتوا تشکیل دهیم؟
شیوه ارائه مطالب علمی و فنی (دروس 9 تا 16)
یادگیری برنامه نویسی و معلم خصوصی برنامه نویسی
Educational data mining
META IRAN
Searching techniq farsi
نکاتی چند درباره فلسفه تدریس علم رایانه در جامعۀ دانش- بنیان
Ad

Sql function v03

  • 1. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 1 | Saba Creative Company ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ ‫ويرايش‬‫كننده‬ ‫تهيه‬‫كننده‬ ‫بررسي‬‫كننده‬ ‫تاييد‬‫تهيه‬ ‫تاريخ‬‫تغييرات‬ 1‫كمالي‬ ‫احسان‬1/12/95 2‫كمالي‬ ‫احسان‬23/11/97 3‫كمالي‬ ‫احسان‬15/08/98
  • 2. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 2 | Saba Creative Company ‫مقدمه‬ ‫د‬ ‫های‬ ‫پایگاه‬ ‫موضوع‬ ‫با‬ ،‫صنایع‬ ‫رشته‬ ‫در‬ ‫کارشناسی‬ ‫مقطع‬ ‫در‬ ‫تحصیلم‬ ‫های‬ ‫سال‬ ‫طی‬ ‫در‬‫برنامه‬ ‫زبان‬ ‫و‬ ‫اده‬ ‫شد‬ ‫آشنا‬ ‫نویسی‬‫خیلی‬ ‫و‬ ‫داشتند‬ ‫تئوری‬ ‫جنبه‬ ‫بیشتر‬ ‫که‬ ‫شد‬ ‫آموخته‬ ‫ما‬ ‫به‬ ‫هایی‬ ‫زبان‬ ‫متاسفانه‬ ‫اما‬ .‫م‬ ‫از‬ ‫کار‬ ‫بازار‬ ‫در‬‫ها‬ ‫آن‬‫برامون‬ ‫آشنایی‬ ‫حد‬ ‫در‬ ‫رو‬ ‫اکسس‬ ‫داده‬ ‫پایگاه‬ ‫مثال‬ ‫عنوان‬ ‫به‬ .‫کرد‬ ‫استفاده‬ ‫شد‬ ‫نمی‬ ‫ساده‬ ‫جدول‬ ‫سری‬ ‫یک‬ ‫طراحی‬ ‫صرفا‬ ‫حد‬ ‫در‬ ‫داده‬ ‫پایگاه‬ ‫این‬ ‫با‬ ‫ما‬ ‫کردن‬ ‫کار‬ ‫توانایی‬ ‫تمام‬ ‫و‬ ‫دادند‬ ‫توضیح‬ .‫بود‬ ‫آنها‬ ‫به‬ ‫اطالعات‬ ‫ورود‬ ‫و‬ ‫ش‬ ‫تر‬ ‫تخصصی‬ ‫همچنین‬ ‫و‬ ‫تحصیل‬ ‫با‬ ‫همزمان‬ ‫کار‬ ‫به‬ ‫بودنم‬ ‫مشغول‬ ‫علت‬ ‫به‬‫دن‬‫ام‬ ‫کاری‬ ‫محیط‬‫سال‬ ‫در‬ ‫کارشناسی‬ ‫مقطع‬ ‫در‬ ‫دانشگاهی‬ ‫رشته‬ ‫دو‬ ‫در‬ ‫تحصیل‬ ‫ادامه‬ ‫با‬ ‫همزمانی‬ ‫و‬ ‫کارشناسی‬ ‫دوره‬ ‫از‬ ‫پس‬ ‫های‬ ‫باز‬ ‫در‬ ‫نیاز‬ ‫مورد‬ ‫الزامات‬ ‫با‬ ،‫ارشد‬‫ار‬‫با‬ ‫نیاز‬ ‫مورد‬ ‫موارد‬ ‫از‬ ‫خیلی‬ ‫که‬ ‫کردم‬ ‫مشاهده‬ ‫و‬ ‫شدم‬ ‫آشنا‬ ‫بیشتر‬ ‫کار‬ ‫ها‬ ‫رشته‬ ‫درسی‬ ‫های‬ ‫واحد‬ ‫در‬ ‫شده‬ ‫داده‬ ‫آموزش‬ ‫های‬ ‫تئوری‬‫ی‬‫دانشگاهی‬‫عنوان‬ ‫به‬ .‫باشد‬ ‫می‬ ‫متفاوت‬ ‫داده‬ ‫پایگاه‬ ‫از‬ ‫اطالعات‬ ‫نگهداری‬ ‫برای‬ ‫ها‬ ‫شرکت‬ ‫اغلب‬ ‫کار‬ ‫محیط‬ ‫در‬ ‫نمونه‬SQL.‫کردند‬ ‫می‬ ‫استفاده‬ ‫رقابتی‬ ‫بازار‬ ‫در‬ ‫ماندن‬ ‫باقی‬ ‫برای‬ ‫که‬ ‫دیگری‬ ‫اطالعات‬ ‫یادگیری‬ ‫به‬ ‫کنم‬ ‫شروع‬ ‫که‬ ‫شد‬ ‫باعث‬ ‫موضوع‬ ‫این‬ .‫داشتم‬ ‫نیاز‬ ‫کار‬ ‫سر‬ ‫بر‬ ‫موجود‬ ‫موانع‬ ‫از‬ ‫یکی‬( ‫فردی‬ ‫آموزش‬ ‫و‬ ‫مطالعه‬ ‫راه‬Self Study)‫متنوع‬ ‫و‬ ‫زیاد‬ ‫بسیار‬ ‫منابع‬ ‫وجود‬ ، ‫بود‬ ‫حوزه‬ ‫هر‬ ‫در‬‫می‬ ‫بیشتر‬ ‫منبع‬ ‫انتخاب‬ ‫جهت‬ ‫سردرگمی‬ ‫حس‬ ،‫منابع‬ ‫برای‬ ‫انتخاب‬ ‫حق‬ ‫رفتن‬ ‫باال‬ ‫با‬ ‫که‬ ‫شود‬‫داده‬ ‫پایگاه‬ ‫در‬ ‫مثال‬ .SQL‫آموزشی‬ ‫منابع‬ ‫تعداد‬ ،‫افزار‬ ‫نرم‬ ‫این‬ ‫از‬ ‫زیاد‬ ‫های‬ ‫نسخه‬ ‫وجود‬ ‫علت‬ ‫به‬ ‫کامپیوتر‬ ‫حوزه‬ ‫در‬ ‫افراد‬ ‫دانش‬ ‫برپایه‬ ‫و‬ ‫تخصصی‬ ‫بسیار‬ ‫ها‬ ‫آموزش‬ ‫این‬ ‫اغلب‬ ‫و‬ ‫بودند‬ ‫می‬ ‫زیاد‬ ‫بسیار‬ ‫هم‬
  • 3. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 3 | Saba Creative Company ‫های‬ ‫تئوری‬ ‫خصوص‬ ‫در‬ ‫منابع‬ ‫آن‬ ‫ابتدای‬ ‫در‬ ‫سنگین‬ ‫بسیار‬ ‫های‬ ‫فصل‬ ‫وجود‬ ‫همچنین‬ ‫و‬ ‫موضوع‬ ‫این‬ .‫بود‬ ‫و‬ ‫داده‬ ‫پایگاه‬،‫تخصصی‬ ‫عبارات‬ ‫از‬ ‫کردن‬ ‫استفاده‬‫نمود‬ ‫می‬ ‫سخت‬ ‫بسیار‬ ‫را‬ ‫فردی‬ ‫آموزش‬ ‫فرآیند‬. ‫فرد‬ ‫یک‬ ‫دانشی‬ ‫قدرت‬ ‫از‬ ‫صحبت‬ ‫هروقت‬ ‫گذشته‬ ‫در‬‫بود‬‫می‬ ‫تاکید‬ ‫فرد‬ ‫جستجوی‬ ‫توانایی‬ ‫بر‬ ‫بیشتر‬ ،‫گردید‬ ‫طریق‬ ‫این‬ ‫از‬ ‫که‬‫فرد‬ ‫آن‬‫که‬ ‫صورتی‬ ‫در‬،‫شود‬ ‫می‬ ‫مواجه‬ ‫سوالی‬ ‫با‬‫کردن‬ ‫جستجو‬ ‫با‬ ‫تا‬ ‫دارد‬ ‫توانایی‬ ‫چقدر‬ ‫ص‬ ‫در‬‫را‬ ‫افراد‬ ‫این‬ ‫و‬ ‫برسد‬ ‫خود‬ ‫سوال‬ ‫پاسخ‬ ‫به‬ ‫اینترنت‬ ‫فحات‬Search Engine‫می‬ ‫معرفی‬‫نمودند‬‫اما‬ . ‫فرد‬ ‫آن‬ ‫که‬ ‫شود‬ ‫می‬ ‫توجه‬ ‫نکته‬ ‫این‬ ‫به‬ ‫بیشتر‬ ،‫شود‬ ‫می‬ ‫فرد‬ ‫یک‬ ‫دانشی‬ ‫قدرت‬ ‫از‬ ‫صحبت‬ ‫وقتی‬ ‫امروزه‬ ‫ا‬ ‫نموده‬ ‫کسب‬ ‫که‬ ‫را‬ ‫دانشی‬ ‫تواند‬ ‫می‬ ‫و‬ ‫دارد‬ ‫دانش‬ ‫انتشار‬ ‫توانایی‬ ‫میزان‬ ‫چه‬ ‫بحث‬ ‫مورد‬ ‫حوزه‬ ‫در‬‫ست‬ ‫استفاده‬ ‫وی‬ ‫توسط‬ ‫شده‬ ‫ارائه‬ ‫مطالب‬ ‫از‬ ‫بتوانند‬ ‫نیاز‬ ‫صورت‬ ‫در‬ ‫سایرین‬ ‫و‬ ‫دهد‬ ‫انتقال‬ ‫نیز‬ ‫دیگران‬ ‫به‬ .‫نمایند‬‫امروزه‬ ‫عبارتی‬ ‫به‬Uploader‫انتقال‬ ‫با‬ ‫آن‬ ‫در‬ ‫که‬ ‫آید‬ ‫می‬ ‫حساب‬ ‫به‬ ‫ارزشی‬ ‫مالک‬ ‫یک‬ ‫بودن‬ ‫ا‬ ‫بهبود‬ ‫و‬ ‫رشد‬ ‫باعث‬ ‫دیگران‬ ‫به‬ ‫خود‬ ‫دانش‬‫هرچه‬ ‫و‬ ،‫شویم‬ ‫می‬ ‫مختلف‬ ‫های‬ ‫زمینه‬ ‫در‬ ‫فراد‬‫مطالب‬ ‫کیفیت‬ .‫شوند‬ ‫معرفی‬ ‫رفرنس‬ ‫یک‬ ‫عنوان‬ ‫به‬ ‫تواند‬ ‫می‬ ‫باشد‬ ‫باالتر‬ ‫شده‬ ‫ارائه‬ ‫که‬ ‫گرفتم‬ ‫تصمیم‬ ‫علت‬ ‫همین‬ ‫به‬،‫بازارکار‬ ‫از‬ ‫تجربیاتم‬ ‫و‬ ‫ام‬ ‫دیده‬ ‫که‬ ‫هایی‬ ‫آموزش‬ ‫برپابه‬‫آموزشی‬ ‫فایل‬ ‫و‬ ‫باشد‬ ‫نیاز‬ ‫مورد‬ ‫واژگان‬ ‫و‬ ‫اطالعات‬ ‫با‬ ‫افراد‬ ‫کردن‬ ‫آشنا‬ ‫حد‬ ‫در‬ ‫صرفا‬ ‫ها‬ ‫تئوری‬ ‫آن‬ ‫در‬ ‫تا‬ ‫کنم‬ ‫تهیه‬‫سپس‬ ‫داده‬ ‫پایگاه‬ ‫با‬ ‫ارتباط‬ ‫برقراری‬ ‫برای‬ ‫توانایی‬ ‫جهت‬ ‫فرد‬ ‫هر‬ ‫که‬ ‫ای‬ ‫پایه‬ ‫دستورات‬ ‫به‬SQL‫معرفی‬ ،‫دارد‬ ‫نیاز‬ .‫شود‬ ‫جدید‬ ‫های‬ ‫نسخه‬ ‫در‬ ‫که‬ ‫دستورهایی‬ ‫از‬ ‫برخی‬ ‫کتاب‬ ‫این‬ ‫سوم‬ ‫ویرایش‬ ‫در‬SQL‫برای‬ ‫و‬ ‫است‬ ‫شده‬ ‫اضافه‬ ‫که‬ ‫دستورات‬ ‫از‬ ‫برخی‬ ‫و‬ ‫اضافه‬ ‫متن‬ ‫به‬ ‫است‬ ‫نیاز‬ ‫مورد‬ ‫ای‬ ‫پایه‬ ‫اطالعات‬‫منسوخ‬ ‫جدید‬ ‫های‬ ‫نسخه‬ ‫در‬ .‫است‬ ‫گردیده‬ ‫حذف‬ ‫است‬ ‫شده‬ ‫متن‬ ‫این‬‫شوم‬ ‫می‬ ‫ممنون‬ ‫پس‬ .‫بود‬ ‫نخواهد‬ ... ‫و‬ ‫کاربردی‬ ،‫مفهومی‬ ،‫امالیی‬ ‫اشتباهات‬ ‫از‬ ‫خالی‬ ‫قطعا‬ ‫که‬،‫پیشنهادات‬ ،‫نظرات‬‫اشتباهات‬... ‫و‬‫خود‬‫ایمیل‬ ‫طریق‬ ‫از‬ ‫را‬@gmail.com84Ehsan.Kamali.‫و‬
  • 4. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 4 | Saba Creative Company ‫آدرس‬ ‫به‬ ‫من‬ ‫لینکدین‬ ‫پروفایل‬ ‫در‬ ‫یا‬Linkedin‫آن‬ ‫اصالح‬ ‫با‬ ‫تا‬ ‫بدید‬ ‫اطالع‬‫برا‬ ‫مفید‬ ‫منبع‬ ‫یک‬ ‫ها‬‫ی‬ ‫مندان‬ ‫عالقه‬.‫کنیم‬ ‫ایجاد‬ ‫کمالی‬ ‫احسان‬ ‫سوم‬ ‫ویرایش‬ ‫آبان‬1398
  • 5. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 5 | Saba Creative Company ‫فهرست‬ ‫مقدمه‬..............................................................................................................................................................2 ‫مفاه‬‫ی‬‫م‬............................................................................................................................................................8 Database...................................................................................................................................................8 Table........................................................................................................................................................10 Field..........................................................................................................................................................11 Record......................................................................................................................................................12 SQL‫چ‬‫ی‬‫ست‬................................................................................................................................................13 ‫تار‬‫ی‬‫خچه‬......................................................................................................................................................13 ‫ها‬ ‫استاندارد‬.................................................................................................................................................15 ‫مزا‬‫ی‬‫ا‬‫ی‬‫از‬ ‫استفاده‬SQL..................................................................................................................................16 ‫معا‬‫ی‬‫ب‬‫از‬ ‫استفاده‬SQL.................................................................................................................................16 ‫پ‬‫ی‬‫ش‬‫ن‬‫ی‬‫از‬‫ها‬‫ی‬‫آموزش‬SQL Server...............................................................................................................17 ‫دستورات‬........................................................................................................................................................18 SELECT.....................................................................................................................................................18 WHERE.....................................................................................................................................................20 AND..........................................................................................................................................................22 LIKE..........................................................................................................................................................22 JOIN.........................................................................................................................................................24 ‫دستورات‬ ‫انواع‬JOIN..................................................................................................................................26 AGGREGATE FUNCTIONS:..........................................................................................................................31
  • 6. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 6 | Saba Creative Company AVG.........................................................................................................................................................31 COUNT....................................................................................................................................................32 COUNT_BIG.............................................................................................................................................32 MAX........................................................................................................................................................32 MIN........................................................................................................................................................33 SUM.......................................................................................................................................................33 GROUP BY..............................................................................................................................................34 WITH ROLLUP.........................................................................................................................................35 WITH CUBE.............................................................................................................................................37 GROUPING.............................................................................................................................................38 HAVING...................................................................................................................................................39 UNION‫و‬UNION ALL...............................................................................................................................40 EXCEPT...................................................................................................................................................43 INTERSECT..............................................................................................................................................44 CROSS APPLY..........................................................................................................................................45 Scalar Valued Function..............................................................................................................................53 ‫تار‬ ‫توابع‬‫ی‬‫خ‬‫زمان‬ ‫و‬......................................................................................................................................53 GETDATE............................................................................................................................................53 DATEPART..........................................................................................................................................53 DATEADD...........................................................................................................................................53 DATEDIFF...........................................................................................................................................54 ‫ا‬ ‫رشته‬ ‫توابع‬‫ی‬.............................................................................................................................................55 LEFT.....................................................................................................................................................55 RIGHT..................................................................................................................................................56
  • 7. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 7 | Saba Creative Company UPPER................................................................................................................................................57 LOWER...............................................................................................................................................58 SUBSTRING..........................................................................................................................................59 REPLACE..............................................................................................................................................60 STUFF...................................................................................................................................................61 LEN.......................................................................................................................................................61 ‫اضاف‬ ‫توابع‬‫ی‬...............................................................................................................................................62 DATALENGTH......................................................................................................................................62 CHARINDEX........................................................................................................................................63 ‫دستورات‬Rank...........................................................................................................................................65 ROW_NUMBER...................................................................................................................................65 RANK..................................................................................................................................................67 DENSE_RANK.....................................................................................................................................68 NTILE...................................................................................................................................................69 ‫دستورات‬Paging........................................................................................................................................71 OFFSET................................................................................................................................................71 PIVOT.................................................................................................................................................74 Temp Table............................................................................................................................................78 #TempTable.......................................................................................................................................78 @TempTable.......................................................................................................................................79 CTE......................................................................................................................................................80
  • 8. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 8 | Saba Creative Company ‫مفاهیم‬ ‫آموزش‬ ‫از‬ ‫بهتر‬ ‫درک‬ ‫برای‬SQL‫تا‬ ‫است‬ ‫نیاز‬ ‫اطالعاتی‬ ‫بانک‬ ‫بهتر‬ ‫شناخت‬ ‫و‬‫ابتدا‬‫مفاهیم‬ ‫از‬ ‫برخی‬ ‫با‬ .‫شویم‬ ‫آشنا‬ Database ‫اطالعاتی‬ ‫بانک‬(DataBase)‫منظم‬ ‫ساختار‬ ‫با‬ ‫اطالعات‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫به‬ ‫داده‬ ‫پایگاه‬ ‫یا‬‫گفته‬‫می‬‫شود‬. ‫این‬‫پایگاه‬‫های‬‫اطالعاتی‬ً‫ال‬‫معمو‬‫در‬‫قالبی‬‫که‬‫برا‬‫دسترسی‬ ‫قابل‬ ‫و‬ ‫خواندن‬ ‫قابل‬ ‫ها‬ ‫رایانه‬ ‫و‬ ‫ها‬ ‫دستگاه‬ ‫ی‬ ‫شوند‬ ‫می‬ ‫ذخیره‬ ‫باشند‬. ‫است‬ ‫اطالعات‬ ‫از‬ ‫یافته‬ ‫سازمان‬ ‫ای‬ ‫مجموعه‬ ‫اصل‬ ‫در‬ ‫داده‬ ‫پایگاه‬.‫ای‬‫سرچشمه‬ ‫رایانه‬ ‫دانش‬ ‫از‬ ‫واژه‬ ‫ن‬ ‫پایگاه‬ ‫اروپایی‬ ‫مرکز‬ ‫که‬ ‫است‬ ‫ای‬ ‫اندازه‬ ‫به‬ ‫وسعت‬ ‫این‬ ،‫دارد‬ ‫نیز‬ ‫عمومی‬ ‫و‬ ‫وسیع‬ ‫کاربر‬ ‫،اما‬ ‫گیرد‬ ‫می‬ ‫برای‬ ‫الکترونیکی‬ ‫غیر‬ ‫تعاریف‬ ‫شامل‬ )‫کند‬ ‫می‬ ‫ایجاد‬ ‫داده‬ ‫پایگاه‬ ‫برای‬ ‫ای‬ ‫خردمندانه‬ ‫تعاریف‬ ‫(که‬ ‫داده‬ ‫باشد‬ ‫می‬ ‫داده‬ ‫پایگاه‬. ‫عبارتی‬ ‫به‬)‫(اصولی‬ ‫سیستماتیک‬ ‫روش‬ ‫یک‬ ‫با‬ ‫رایانه‬ ‫در‬ ‫شده‬ ‫ذخیره‬ ‫های‬ ‫رکورد‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫داده‬ ‫پایگاه‬ ‫دهد‬ ‫پاسخ‬ ‫کاربر‬ ‫سواالت‬ ‫به‬ ‫تواند‬ ‫می‬ ‫که‬ ‫است‬ ‫ای‬ ‫رایانه‬ ‫برنامه‬ ‫یک‬ ‫مثل‬.،‫بهتر‬ ‫بازیابی‬ ‫و‬ ‫ذخیره‬ ‫برای‬ ‫گر‬ ‫می‬ ‫سازماندهی‬ ‫ها‬ ‫رویداد‬ ‫یا‬ ‫ای‬ ‫داده‬ ‫اجزای‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫صورت‬ ‫به‬ ‫معموال‬ ‫رکورد‬ ‫هر‬‫دد‬. ‫کاربرد‬ ‫تصمیم‬ ‫یک‬ ‫اتخاذ‬ ‫برای‬ ‫که‬ ‫شود‬ ‫می‬ ‫تبدیل‬ ‫اطالعاتی‬ ‫به‬ ‫پرسش‬ ‫هر‬ ‫در‬ ‫شده‬ ‫بازیابی‬ ‫های‬ ‫بخش‬ ‫دارد‬.‫را‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫ای‬ ‫داده‬ ‫های‬ ‫پایگاه‬ ‫بین‬ ‫پاسخ‬ ‫و‬ ‫پرسش‬ ‫و‬ ‫مدیریت‬ ‫برای‬ ‫که‬ ‫ای‬ ‫رایانه‬ ‫برنامه‬ ‫اختصار‬ ‫به‬ ‫یا‬ ‫ای‬ ‫داده‬ ‫پایگاه‬ ‫سیستم‬ ‫مدیر‬(DBMS)‫نامیم‬ ‫می‬. ‫اطالعات‬ ‫بانک‬‫ی‬‫در‬‫ا‬ ‫مجموعه‬ ‫واقع‬‫ی‬‫آور‬ ‫جمع‬ ‫اطالعات‬ ‫از‬‫ی‬‫در‬ ‫شده‬‫ی‬‫ک‬‫کنار‬ ‫در‬ ‫و‬ ‫مکان‬‫ی‬‫کد‬‫ی‬‫گر‬‫است‬ ‫ا‬ ‫گونه‬ ‫به‬ ‫و‬‫ی‬‫کنار‬ ‫در‬‫ی‬‫کد‬‫ی‬‫گر‬‫ده‬ ‫سامان‬ ‫و‬ ‫اند‬ ‫گرفته‬ ‫قرار‬‫ی‬‫دسترس‬ ‫گونه‬ ‫هر‬ ‫تا‬ ‫اند‬ ‫شده‬‫ی‬‫(ذخ‬ ‫آن‬ ‫به‬‫ی‬‫ره‬
  • 9. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 9 | Saba Creative Company ‫باز‬ ‫و‬‫ی‬‫اب‬‫ی‬‫اطالعات‬‫راحت‬ ‫با‬ )‫ی‬‫ب‬ ‫چه‬ ‫هر‬ ‫سرعت‬ ‫و‬‫ی‬‫شتر‬‫شود‬ ‫انجام‬.‫ها‬ ‫بانک‬ ‫در‬‫ی‬‫اطالعات‬‫ی‬‫ا‬ ‫رابطه‬‫ی‬ (Relational DataBase)‫سامانده‬ ،‫ی‬( ‫ها‬ ‫جدول‬ ‫اساس‬ ‫بر‬ ‫اطالعات‬Tables‫م‬ ‫صورت‬ )‫ی‬‫گ‬‫ی‬‫رد‬. ‫اطالعات‬ ‫بانک‬‫ی‬( ‫سرور‬DataBase Server)‫ی‬ ،‫ک‬‫افزار‬ ‫نرم‬ ‫برنامه‬‫ی‬‫سرو‬ ‫که‬ ‫است‬‫ی‬‫س‬‫اطالعات‬ ‫بانک‬‫ی‬ ‫برا‬‫ی‬‫ذخ‬‫ی‬‫ره‬‫باز‬ ‫و‬‫ی‬‫اب‬‫ی‬‫برا‬ ‫را‬ ‫اطالعات‬‫ی‬‫س‬‫ی‬‫ستم‬‫ها‬‫ی‬‫د‬‫ی‬‫گر‬‫و‬‫ی‬‫ا‬‫ها‬ ‫برنامه‬‫ی‬‫افزار‬ ‫نرم‬‫ی‬‫کاربرد‬‫ی‬‫د‬‫ی‬‫گر‬‫فراهم‬ ‫م‬‫ی‬‫کند‬.‫ا‬‫ی‬‫ن‬‫اطالعات‬ ‫بانک‬ ‫با‬ ‫ها‬ ‫افزار‬ ‫نرم‬‫ی‬‫م‬ ‫سرور‬‫ی‬‫رو‬ ‫توانند‬‫ی‬‫ی‬‫ک‬‫س‬‫ی‬‫ستم‬‫و‬ ‫باشند‬ ‫نصب‬‫ی‬‫ا‬‫ا‬‫ی‬‫نکه‬ ‫رو‬‫ی‬‫س‬‫ی‬‫ستم‬‫ها‬‫ی‬‫طر‬ ‫از‬ ‫و‬ ‫باشند‬ ‫نصب‬ ‫جداگانه‬‫ی‬‫ق‬‫ها‬ ‫شبکه‬‫ی‬‫داخل‬‫ی‬‫و‬‫ی‬‫ا‬‫ا‬ ‫بستر‬‫ی‬‫نترنت‬‫با‬‫ی‬‫کد‬‫ی‬‫گر‬‫در‬ ‫باشند‬ ‫ارتباط‬. ‫موجودیت‬ ‫برای‬ ‫ای‬ ‫یافته‬ ‫ساخت‬ ‫توصیف‬ ‫داده‬ ‫پایگاه‬ ‫یک‬ ‫در‬ ‫نوعا‬‫داده‬ ‫پایگاه‬ ‫در‬ ‫شده‬ ‫داری‬ ‫نگه‬ ‫های‬ ‫شود‬ ‫می‬ ‫شناخته‬ ‫مدل‬ ‫یا‬ ‫الگو‬ ‫یک‬ ‫با‬ ‫توصیف‬ ‫این‬ :‫دارد‬ ‫وجود‬.‫و‬ ‫داده‬ ‫های‬ ‫پایگاه‬ ‫اشیا‬ ،‫توصیفی‬ ‫مدل‬ ‫دهد‬ ‫می‬ ‫نشان‬ ‫را‬ ‫آنها‬ ‫بین‬ ‫ارتباط‬.‫به‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫ها‬ ‫مدل‬ ‫این‬ ‫سازماندهی‬ ‫برای‬ ‫متفاوتی‬ ‫های‬ ‫روش‬ ‫داده‬ ‫پایگاه‬ ‫های‬ ‫مدل‬ ‫آنها‬‫می‬‫گوییم‬. ‫ت‬ ‫پرکاربرد‬‫صورت‬ ‫به‬ ‫عام‬ ‫طور‬ ‫به‬ ‫که‬ ‫است‬ ‫ای‬ ‫رابطه‬ ‫مدل‬ ،‫شود‬ ‫می‬ ‫استفاده‬ ‫بسیار‬ ‫امروزه‬ ‫که‬ ‫مدلی‬ ‫رین‬ ‫ستونها‬ ‫و‬ ‫ها‬ ‫سطر‬ ‫از‬ ‫هریک‬ ‫که‬ ‫مرتبط‬ ‫جداول‬ ‫فرم‬ ‫به‬ ‫که‬ ‫اطالعاتی‬ ‫تمام‬ ‫نمایش‬ :‫شود‬ ‫می‬ ‫تعریف‬ ‫زیر‬ ‫است‬ ‫شده‬ ‫تشکیل‬)‫شود‬ ‫می‬ ‫برسی‬ ‫ریاضیات‬ ‫علم‬ ‫در‬ ‫آن‬ ‫حقیقی‬ ‫(تعریف‬.‫به‬ ‫ها‬ ‫وابستگی‬ ‫مدل‬ ‫این‬ ‫در‬ ‫م‬ ‫کمک‬‫شود‬ ‫می‬ ‫داده‬ ‫نشان‬ ‫جدول‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫در‬ ‫مشترک‬ ‫قادیر‬.‫سلسله‬ ‫مدل‬ ‫مثل‬ ‫دیگری‬ ‫های‬ ‫مدل‬ ‫دهند‬ ‫می‬ ‫نشان‬ ‫را‬ ‫ها‬ ‫ارتباط‬ ‫تری‬ ‫صریح‬ ‫طور‬ ‫به‬ ‫ای‬ ‫شبکه‬ ‫مدل‬ ‫و‬ ‫مراتب‬. ‫تعریف‬ ‫هم‬ ‫با‬ ‫مرتبط‬ ‫های‬ ‫رکورد‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫صورت‬ ‫به‬ ‫داده‬ ‫پایگاه‬ ‫اصطالح‬ ‫تر‬ ‫تخصصی‬ ‫مباحث‬ ‫در‬ ‫شود‬ ‫می‬.‫یک‬ ‫ایجاد‬ ‫منظور‬ ‫به‬ ‫یکسان‬ ‫خصوصیات‬ ‫با‬ ‫هایی‬ ‫داده‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫ها‬ ‫ای‬ ‫حرفه‬ ‫از‬ ‫بسیاری‬ ‫کنند‬ ‫می‬ ‫استفاده‬ ‫یکتا‬ ‫ای‬ ‫داده‬ ‫پایگاه‬.
  • 10. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 10 | Saba Creative Company ‫معموال‬DBMS،‫ارتباطی‬ :‫شوند‬ ‫می‬ ‫بندی‬ ‫تقسیم‬ ‫کنند‬ ‫می‬ ‫استفاده‬ ‫که‬ ‫هایی‬ ‫مدل‬ ‫اساس‬ ‫بر‬،‫گرا‬ ‫شی‬ ‫آن‬ ‫امثال‬ ‫و‬ ‫ای‬ ‫شبکه‬.‫زبان‬ ‫تعیین‬ ‫به‬ ‫ای‬ ‫داده‬ ‫های‬ ‫مدل‬‫های‬‫مند‬ ‫عالقه‬ ‫داده‬ ‫های‬ ‫پایگاه‬ ‫به‬ ‫دسترسی‬ ‫هستند‬.‫مهندسی‬ ‫از‬ ‫توجهی‬ ‫قابل‬ ‫بخش‬DBMS‫ها‬ ‫مدل‬ ‫از‬ ‫مستقل‬‫همچون‬ ‫هایی‬ ‫فاکتور‬ ‫به‬ ‫و‬ ‫باشد‬ ‫می‬ ،‫همزمانی‬ ،‫اجرا‬‫وابس‬ ‫افزاری‬ ‫سخت‬ ‫خطاهای‬ ‫از‬ ‫بازیافت‬ ‫و‬ ‫جامعیت‬‫ت‬‫است‬ ‫ه‬.‫های‬ ‫تفاوت‬ ‫سطح‬ ‫این‬ ‫در‬ ‫دارد‬ ‫وجود‬ ‫محصوالت‬ ‫بین‬ ‫بسیاری‬. Table ‫پای‬ ‫در‬ ‫ها‬ ‫داده‬‫یا‬ ‫جدول‬ ‫داخل‬ ‫داده‬ ‫گاه‬Table‫میشوند‬ ‫ذخیره‬.‫هر‬Database‫چندین‬ ‫شامل‬ ‫میتواند‬ ‫جدول‬‫باشد‬.‫است‬ ‫شده‬ ‫تشکیل‬ ‫ستون‬ ‫و‬ ‫سطر‬ ‫تعدادی‬ ‫از‬ ‫جدول‬ ‫هر‬. ‫به‬ ‫بسته‬ ‫دیتابیس‬ ‫در‬ ‫ها‬ ‫ستون‬ ‫تمام‬ ‫برای‬، ‫کنید‬ ‫تعریف‬ ‫را‬ ‫خود‬ ‫نظر‬ ‫مورد‬ ‫نوع‬ ‫میتوانید‬ ‫آن‬ ‫کارکرد‬ ‫نوع‬ ‫باشد‬ ‫داشته‬ ‫مطابقت‬ ‫فیلد‬ ‫انتخابی‬ ‫نوع‬ ‫با‬ ‫بایستی‬ ‫میشود‬ ‫ذخیره‬ ‫فیلد‬ ‫هر‬ ‫درون‬ ‫که‬ ‫مقدارهایی‬‫ادامه‬ ‫(در‬ )‫شد‬ ‫خواهیم‬ ‫آشنا‬ ‫آن‬ ‫انواع‬ ‫با‬. ‫و‬ ‫ها‬ ‫ستون‬ ‫از‬ ‫که‬ ‫هم‬ ‫به‬ ‫وابسته‬ ‫و‬ ‫مرتبط‬ ‫شده‬ ‫ثبت‬ ‫اطالعات‬ ‫از‬ ‫است‬ ‫ای‬ ‫مجموعه‬ ‫یک‬ ‫جدول‬‫ها‬ ‫ردیف‬ ‫است‬ ‫شده‬ ‫تشکیل‬.‫نگهداری‬ ‫و‬ ‫ذخیره‬ ‫برای‬ ‫که‬ ، ‫هستند‬ ‫داده‬ ‫پایگاه‬ ‫های‬ ‫سیستم‬ ‫عناصر‬ ‫مهمترین‬ ‫جداول‬ ‫گیرند‬ ‫می‬ ‫قرار‬ ‫استفاده‬ ‫مورد‬ ‫اطالعات‬ ‫یافته‬ ‫سازمان‬. ‫است‬ ‫داده‬ ‫پایگاه‬ ‫از‬ ‫بخشی‬ ‫جدول‬.‫یک‬‫پایگاه‬‫داده‬‫از‬‫جداول‬‫مختلف‬‫تشکیل‬‫شده‬‫است‬. ‫مثال‬:‫ذخیره‬ ‫برای‬‫مختلف‬ ‫انواع‬ ‫سازی‬‫جداگانه‬ ‫جداول‬ ‫ایجاد‬ ‫نیازمند‬ ‫شما‬ ‫ها‬ ‫داده‬‫هستید‬ ‫ای‬.،‫مثال‬ ‫برای‬ ‫مدیریت‬ ‫افزار‬ ‫نرم‬ ‫یک‬ ‫شما‬ ‫اگر‬‫مدرسه‬‫باشد‬ ‫زیر‬ ‫جداول‬ ‫ایجاد‬ ‫به‬ ‫نیاز‬ ‫است‬ ‫ممکن‬ ،‫دارید‬: ‫آموز‬ ‫دانش‬–‫آموزان‬ ‫دانش‬ ‫اطالعات‬ ‫نگهداری‬ ‫جهت‬ ‫جدولی‬ ‫معلم‬–‫مدرسه‬ ‫معلمان‬ ‫اطالعات‬ ‫نگهداری‬ ‫جهت‬ ‫جدولی‬
  • 11. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 11 | Saba Creative Company ‫درس‬–‫نگ‬ ‫جهت‬ ‫جدولی‬‫شوند‬ ‫می‬ ‫تدریس‬ ‫مدرسه‬ ‫آن‬ ‫در‬ ‫که‬ ‫هایی‬ ‫درس‬ ‫اطالعات‬ ‫هداری‬ ‫غیاب‬ ‫و‬ ‫حضور‬–‫مدرسه‬ ‫آموزان‬ ‫دانش‬ ‫غیاب‬ ‫و‬ ‫حضور‬ ‫اطالعات‬ ‫نگهداری‬ ‫جهت‬ ‫جدولی‬ ‫و‬... Field ‫جدول‬ ‫یک‬ ‫ستون‬ ‫های‬ ‫خانه‬ ‫از‬ ‫یک‬ ‫هر‬ ‫به‬‫فیلد‬( Field )‫گویند‬ ‫می‬.‫آن‬ ‫خصوصیات‬ ‫از‬ ‫یکی‬ ‫فیلد‬ ‫هر‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫آن‬ ‫مقدار‬ ‫همراه‬ ‫به‬ ‫را‬ ‫موجودیت‬. ‫بر‬ ‫در‬ ‫فیلد‬ ‫هر‬‫دارای‬ ‫که‬ ،‫باشد‬ ‫می‬ ‫موجودیت‬ ‫برای‬ ‫ویژگی‬ ‫و‬ ‫صفت‬ ‫یک‬ ‫گیرنده‬2‫است‬ ‫اصلی‬ ‫جزء‬: ‫کند‬ ‫می‬ ‫تعیین‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫صفت‬ ‫نام‬ :‫صفت‬ ‫اسم‬.‫خانوادگی‬ ‫نام‬ ،‫نام‬ ‫فیلد‬ ‫مثال‬ ‫برای‬،...‫و‬‫در‬ ‫جدول‬‫اطالعات‬‫مربوط‬‫به‬‫شخص‬. ‫است‬ ‫نظر‬ ‫مورد‬ ‫صفت‬ ‫برای‬ ‫مقدار‬ ‫برگیرنده‬ ‫در‬ :‫صفت‬ ‫مقدار‬.‫مقدار‬ ‫مثال‬ ‫برای‬"‫سعید‬"‫به‬ ‫نام‬ ‫فیلد‬ ‫برای‬ ‫مقدار‬ ‫عنوان‬. ‫یک‬ ‫نشانه‬ ‫فیلد‬ ‫یک‬‫است‬ ‫جدول‬ ‫در‬ ‫ستون‬.‫است‬ ‫فیلدها‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫رکورد‬ ‫یک‬.‫در‬ ‫رکوردها‬ ‫تمام‬ ‫را‬ ‫فیلدها‬ ‫همان‬ ‫جدول‬ ‫همان‬‫داشت‬ ‫خواهند‬. ‫مثال‬ ‫عنوان‬ ‫به‬‫نام‬ ‫با‬ ‫جدول‬ ‫یک‬ ‫شما‬ ‫اگر‬“Students”‫است‬ ‫ممکن‬ ،‫باشید‬ ‫داشته‬‫فیلد‬‫مورد‬ ‫زیر‬ ‫های‬ ‫باشند‬ ‫نیاز‬: Name:‫آموز‬ ‫دانش‬ ‫خانوادگی‬ ‫نام‬ ‫و‬ ‫نام‬ ‫ذخیره‬ ‫برای‬ Address:‫آدرس‬ ‫ذخیره‬ ‫برای‬ DateofBirth:‫آموز‬ ‫دانش‬ ‫تولد‬ ‫تاریخ‬ ‫ذخیره‬ ‫برای‬
  • 12. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 12 | Saba Creative Company RegistrationDate:‫آموز‬ ‫دانش‬ ‫نام‬ ‫ثبت‬ ‫تاریخ‬ ‫ذخیره‬ ‫برای‬ ...‫و‬ ‫خواهد‬ ‫اضافه‬ ‫جدول‬ ‫آن‬ ‫موجود‬ ‫رکوردهای‬ ‫تمام‬ ‫به‬ ‫فیلد‬ ‫این‬ ،‫کنید‬ ‫اضافه‬ ‫جدول‬ ‫به‬ ‫را‬ ‫فیلدی‬ ‫شما‬ ‫اگر‬ ‫شد‬.‫در‬ ‫جدول‬ ‫رکوردهای‬ ‫تمامی‬ ،‫فوق‬ ‫مثال‬ ‫در‬“Students”‫همان‬4‫داشت‬ ‫خواهند‬ ‫را‬ ‫فیلد‬. Record ‫رکورد‬‫به‬‫سطرهای‬‫یک‬‫جدول‬‫رکورد‬( Record )‫میشود‬ ‫گفته‬.‫طبقه‬ ‫اطالعات‬ ‫از‬ ‫ای‬ ‫مجموعه‬ ‫رکورد‬ ‫هر‬ ‫درباره‬ ‫شده‬ ‫بندی‬‫موجودیت‬ ‫یک‬‫است‬ ‫خاص‬. ‫موجودیت‬،‫پدیده‬،‫را‬ ‫آن‬ ‫به‬ ‫مربوط‬ ‫اطالعات‬ ‫خواهیم‬ ‫می‬ ‫که‬ ‫است‬ ‫داده‬ ‫پایگاه‬ ‫محیط‬ ‫در‬ ‫فردی‬ ‫یا‬ ‫شی‬ ‫کنیم‬ ‫نگهداری‬. ‫مثال‬:‫از‬ ‫عبارتند‬ ‫ها‬ ‫موجودیت‬ ‫انواع‬ ،‫آموزشی‬ ‫محیط‬ ‫یک‬ ‫داده‬ ‫پایگاه‬ ‫محیط‬ ‫در‬:‫دانشجو‬،‫کالس‬، ‫درسی‬ ‫واحدهای‬،‫استاد‬،‫دانشکده‬‫و‬... ‫نشان‬ ‫رکورد‬ ‫یک‬‫است‬ ‫جدول‬ ‫در‬ ‫ورودی‬ ‫یک‬ ‫دهنده‬.‫باشد‬ ‫داشته‬ ‫رکورد‬ ‫تعداد‬ ‫هر‬ ‫تواند‬ ‫می‬ ‫جدول‬ ‫یک‬. ‫داده‬ ‫پایگاه‬ ‫در‬ ‫رکورد‬ ‫از‬ ‫مثال‬:‫جدول‬ ‫شما‬ ‫اگر‬“Students”‫داشته‬ ‫آموزان‬ ‫دانش‬ ‫اطالعات‬ ‫ذخیره‬ ‫برای‬ ‫یک‬ ‫جدول‬ ‫این‬ ‫در‬ ،‫باشید‬‫رکورد‬‫بود‬ ‫خواهد‬ ‫آموز‬ ‫دانش‬ ‫یک‬ ‫دهنده‬ ‫نشان‬.‫آموز‬ ‫دانش‬ ‫کردن‬ ‫اضافه‬ ‫برای‬ ‫ب‬ ‫به‬‫جدول‬ ‫به‬ ‫رکورد‬ ‫یک‬ ‫باید‬ ،‫رنامه‬“Students”‫کنید‬ ‫اضافه‬.‫اطالعات‬ ‫ویرایش‬ ‫یا‬ ‫کردن‬ ‫پاک‬ ‫برای‬ ‫کنید‬ ‫حذف‬ ‫جدول‬ ‫این‬ ‫از‬ ‫را‬ ‫رکورد‬ ‫یک‬ ‫شما‬ ‫باید‬ ‫هم‬ ‫آموز‬ ‫دانش‬.
  • 13. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 13 | Saba Creative Company SQL‫چیست‬ SQL‫اینکه‬ ‫برای‬ ‫دیگر‬ ‫عبارت‬ ‫به‬ ‫است‬ ‫ها‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫اطالعات‬ ‫تغییر‬ ‫و‬ ‫دسترسی‬ ‫استاندارد‬ ‫زبان‬ ‫بگوئیم‬sql‫چه‬:‫گفت‬ ‫باید‬ ‫است‬ ‫چیزی‬"‫جبر‬ ‫ریاضی‬ ‫و‬ ‫پایین‬ ‫سطح‬ ‫زبان‬ ‫بر‬ ‫مبتنی‬ ‫باال‬ ‫سطح‬ ‫است‬ ‫زبانی‬ ‫رابطه‬‫داده‬ ‫بازیابی‬ ‫و‬ ،‫تغییر‬ ،‫ایجاد‬ ‫برای‬ ‫که‬ ‫ای‬‫به‬ ‫آنها‬ ‫روی‬ ‫بر‬ ‫عملیات‬ ‫همچنین‬ ‫و‬ ‫ها‬‫می‬ ‫کار‬‫رود‬." ‫عبارت‬SQL‫مخفف‬Structured Query Language‫است‬ ‫یافته‬ ‫ساخت‬ ‫جستجوی‬ ‫زبان‬ ‫همان‬ ‫یا‬. SQL‫شما‬ ‫به‬‫را‬ ‫آنها‬ ‫و‬ ‫کرده‬ ‫پیدا‬ ‫دسترسی‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫موجود‬ ‫اطالعات‬ ‫به‬ ‫تا‬ ‫دهد‬ ‫می‬ ‫را‬ ‫امکان‬ ‫این‬ ‫دهید‬ ‫تغییر‬. ‫تاریخچه‬ ‫اصلی‬ ‫منشأ‬SQL‫مقاله‬ ‫به‬‫سال‬1970‫کاد‬ ‫ادگار‬‫عنوان‬ ‫تحت‬«‫رابطه‬ ‫مدل‬‫داده‬ ‫ای‬‫بانک‬ ‫برای‬ ‫ها‬‫های‬ ‫داده‬ ‫بزرگ‬‫اشتراکی‬ ‫های‬»‫بازمی‬‫دهه‬ ‫در‬ .‫گردد‬70‫شرکت‬ ‫از‬ ‫گروهی‬IBM‫شهر‬ ‫در‬‫خوزه‬ ‫سان‬‫روی‬ ‫بر‬ ‫سیستم‬‫داده‬ ‫پایگاه‬‫های‬‫سیستم‬R‫می‬ ‫کار‬ ‫مقاله‬ ‫این‬ ‫به‬ ‫توجه‬ ‫بدون‬‫زبان‬ ‫و‬ ‫کردند‬SEQUEL‫منظور‬ ‫به‬ ‫را‬ ‫و‬ ‫عملیات‬‫اطالعات‬ ‫بازیابی‬‫سیستم‬ ‫در‬ ‫شده‬ ‫ذخیره‬R‫چه‬ ‫اگر‬ .‫کردند‬ ‫ایجاد‬SQL‫تالش‬ ‫از‬ ‫ناشی‬‫کاد‬ ‫های‬ ‫ریموند‬ ‫و‬ ‫چامبرلین‬ ‫دونالد‬ ‫اما‬ ‫بود‬‫زبان‬ ‫طراحان‬ ‫عنوان‬ ‫به‬ ‫بویس‬SEQUEL‫می‬ ‫شناخته‬‫شوند‬. ‫رابطه‬ ‫مدل‬ ‫مزایای‬ ‫مورد‬ ‫در‬ ‫مباحثی‬ ‫و‬ ‫اطالعاتی‬ ‫بانک‬ ‫فناوری‬ ‫زمینه‬ ‫در‬ ‫سمینارهایی‬‫برگزار‬ ‫جدید‬ ‫ای‬ ‫تا‬ .‫گردید‬1976‫که‬ ‫بود‬ ‫مشخص‬IBM‫رابطه‬ ‫اطالعاتی‬ ‫بانک‬ ‫فناوری‬ ‫جدی‬ ‫طرفدار‬ ‫که‬‫توجه‬ ،‫بوده‬ ‫ای‬ ‫زبان‬ ‫به‬ ‫نسبت‬ ‫زیادی‬SEQUEL.‫دارد‬‫سیستم‬ ‫زمینه‬ ‫در‬ ‫تبلیغات‬R‫در‬ ‫مهندسین‬ ‫از‬ ‫گروهی‬ ‫جذب‬ ‫باعث‬ ‫در‬ ‫پارک‬ ‫منلو‬‫کالیفرنیا‬‫تحقیقات‬ ‫که‬ ‫رسیدند‬ ‫نتیجه‬ ‫این‬ ‫به‬ ‫گروه‬ ‫این‬ .‫گردید‬IBM‫بازار‬ ‫یک‬ ‫به‬ ‫منجر‬ ‫برای‬ ‫تجاری‬‫بانک‬‫رابطه‬ ‫اطالعاتی‬ ‫های‬‫ای‬‫گردید‬ ‫خواهد‬. ‫در‬1977‫اینک‬ ‫نام‬ ‫به‬ ‫شرکتی‬ ‫گروه‬ ‫این‬(Inc)‫سافتویر‬ ‫رلیشنال‬ ‫و‬(Relational Software)‫تأسیس‬ ‫یک‬ ‫تا‬ ‫نمودند‬‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬‫داده‬ ‫های‬‫رابطه‬‫اساس‬ ‫بر‬ ‫ای‬SEQUEL‫بساز‬‫نام‬ ‫به‬ ‫محصولی‬ .‫ند‬
  • 14. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 14 | Saba Creative Company Oracle‫در‬1979‫اولین‬ ‫و‬ ،‫گردید‬ ‫عرضه‬‫داده‬ ‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬‫رابطه‬‫این‬ ‫به‬ .‫آمد‬ ‫وجود‬ ‫به‬ ‫ای‬ ‫محصول‬ ‫ترتیب‬Oracle‫محصول‬ ‫اولین‬ ‫گردید‬ ‫باعث‬IBM‫مدت‬ ‫برای‬2.‫باشد‬ ‫رکود‬ ‫دچار‬ ‫بازار‬ ‫در‬ ‫سال‬ ‫دیجیتال‬ ‫وکس‬ ‫کامپیوترهای‬ ‫مینی‬ ‫روی‬ ‫بر‬ ‫محصول‬ ‫این‬(VAx Digital)‫می‬ ‫اجرا‬‫از‬ ‫خیلی‬ ‫که‬ ‫شد‬ ‫بزرگ‬ ‫کامپیوترهای‬IBM‫ارزان‬‫بودند‬ ‫تر‬. ‫نام‬ ‫با‬ ‫شرکت‬ ‫این‬ ‫امروزه‬Oracle‫سیستم‬ ‫فروشنده‬ ‫اولین‬‫مدیریت‬ ‫های‬‫اطالعاتی‬ ‫بانک‬‫رابطه‬.‫است‬ ‫ای‬ ‫آزم‬ ‫استادان‬‫ایشگاه‬‫در‬ ‫کامپیوتر‬ ‫های‬‫کالیفرنیا‬ ‫برکلی‬ ‫دانشگاه‬‫د‬ ‫نیز‬‫دهه‬ ‫نیمه‬ ‫ر‬1970‫تحقیق‬ ‫مشغول‬ ‫زمینه‬ ‫در‬‫بانک‬‫اطالعاتی‬ ‫های‬‫رابطه‬‫تحقیق‬ ‫تیم‬ ‫(مانند‬ ‫بودن‬ ‫ای‬IBM‫نمونه‬ ‫یک‬ ‫نیز‬ ‫فوق‬ ‫گروه‬ ،) ‫از‬‫مدیریت‬ ‫سامانه‬‫رابطه‬ ‫داده‬ ‫پایگاه‬‫اینگرس‬ ‫را‬ ‫خود‬ ‫سیستم‬ ‫و‬ ‫نمودند‬ ‫ایجاد‬ ‫ای‬(Ingres)‫نام‬‫نهادند‬. ‫پرس‬ ‫زبان‬ ‫یک‬ ‫شامل‬ ‫اینگرس‬ ‫پروژه‬‫نام‬ ‫به‬ ‫وجو‬QUEL‫از‬ ‫چه‬ ‫اگر‬ ،‫بود‬SEQUEL‫تر‬ ‫یافته‬ ‫ساخت‬ ‫خیلی‬ ‫به‬ ‫آن‬ ‫شباهت‬ ‫اما‬ ،‫بود‬‫انگ‬ ‫زبان‬‫لیسی‬‫بود‬ ‫کمتر‬. ‫حالیکه‬ ‫در‬Oracle‫و‬Ingres‫سیستم‬ ‫پروژه‬ ،‫بودند‬ ‫رقابت‬ ‫در‬ ‫تجاری‬ ‫محصوالت‬ ‫ارائه‬ ‫برای‬R‫شرکت‬ IBM‫بوده‬ ‫تالش‬ ‫در‬‫نام‬ ‫با‬ ‫تجاری‬ ‫ل‬ ‫محصو‬ ‫یک‬ ‫که‬ ‫است‬SQL/Data system‫یا‬ (SQL/DS)‫عرضه‬ .‫نماید‬IBM‫موجودیت‬SQL/DS‫در‬ ‫را‬1981‫در‬ ‫و‬ ،‫اعالم‬1982‫در‬ .‫نمود‬ ‫خود‬ ‫محصول‬ ‫عرضه‬ ‫به‬ ‫شروع‬ ‫سال‬1983،IBM‫نسخه‬ ‫یک‬SQL/DS‫برای‬ ‫را‬VM/CMS‫(سیستم‬‫بزرگ‬ ‫کامپیوتر‬ ‫در‬ ‫که‬ ‫عاملی‬IBM ‫نمود‬ ‫اعالم‬ ،)‫بود‬ ‫شده‬ ‫استفاده‬ ً‫ا‬‫غالب‬. ‫سال‬ ‫در‬ ‫همچنین‬1983‫شرکت‬IBM‫محصول‬ ،DB2‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬ ‫یک‬ ‫که‬ ‫نمود‬ ‫معرفی‬ ‫را‬ ‫رابطه‬ ‫داده‬‫سیستم‬ ‫برای‬ ‫ای‬.‫بود‬ ‫شرکت‬ ‫آن‬ ‫بزرگ‬ ‫های‬DB2‫سیستم‬ ‫تحت‬‫عامل‬VMS‫(سیستم‬‫عامل‬ ‫می‬ ‫اجرا‬ )‫بزرگ‬ ‫کامپیوتری‬ ‫مراکز‬‫نسخه‬ ‫اولین‬ .‫شد‬DB2‫در‬1985‫مسئولین‬ ‫و‬ ،‫گردید‬ ‫عرضه‬IBM‫اعالم‬ ‫نرم‬ ‫تکنولوژی‬ ‫برای‬ ‫استراتژیک‬ ‫برنامه‬ ‫یک‬ ‫محصول‬ ‫این‬ ‫که‬ ‫نمودند‬‫افزاری‬IBM‫می‬‫تاریخ‬ ‫آن‬ ‫از‬ .‫باشد‬ ‫تاکنون‬DB2‫رابطه‬ ‫داده‬ ‫پایگاه‬ ‫مدیریت‬ ‫سامانه‬‫و‬ ‫بوده‬ ‫شاخصی‬ ‫ای‬IBM‫ا‬‫زبان‬ ‫و‬ ‫نموده‬ ‫حمایت‬ ‫آن‬ ‫ز‬
  • 15. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 15 | Saba Creative Company «SEQUEL DB2»‫بوده‬ ‫اطالعاتی‬ ‫بانک‬ ‫زبان‬ ‫عملی‬ ‫استاندارد‬‫است‬.‫مخفف‬SEQUEL‫به‬ ‫بعدها‬SQL ‫تغ‬‫یی‬‫ر‬‫ز‬ ‫کرد‬‫ی‬‫را‬SEQUEL‫ی‬‫ک‬‫تجار‬ ‫عالمت‬‫ی‬‫هواپ‬ ‫شرکت‬ ‫از‬‫ی‬‫ما‬‫یی‬‫س‬ ‫هاوکر‬‫ی‬‫دل‬‫ی‬‫بر‬‫ی‬‫تان‬‫ی‬‫ا‬.‫بود‬ ‫ها‬ ‫استاندارد‬ ‫سال‬ ‫در‬1986‫استاندارد‬ ‫های‬ ‫گروه‬ ،ANSI (American National Standards Institute)‫و‬ISO (International Organization for Standardization)‫استاندارد‬ ‫تعریف‬«‫داده‬ ‫پایگاه‬ ‫زبان‬SQL» ‫از‬ ‫مختلفی‬ ‫های‬ ‫استاندارد‬ ‫کنون‬ ‫تا‬ ‫زمان‬ ‫آن‬ ‫از‬ .‫اند‬ ‫پذیرفته‬ ‫رسمی‬ ‫طور‬ ‫به‬ ‫را‬SQL‫که‬ ‫است‬ ‫شده‬ ‫عرضه‬ ‫های‬ ‫سال‬ ‫در‬ ‫آنها‬1989،1992،1996،1999،2003،2006،2008،2011،2016‫اخیرا‬ ‫و‬2019‫منتشر‬ .‫اند‬ ‫شده‬ ‫با‬ ‫که‬ ‫کارهایی‬SQL‫دهید‬ ‫انجام‬ ‫توانید‬ ‫می‬: ‫اجرای‬query‫داده‬ ‫پایگاه‬ ‫در‬ ‫ها‬ ‫داده‬ ‫پایگاه‬ ‫از‬ ‫ها‬ ‫داده‬ ‫بازیابی‬ ‫داده‬ ‫پایگاه‬ ‫به‬ ‫رکوردها‬ ‫کردن‬ ‫اضافه‬ ‫و‬ ‫ورود‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫رکوردها‬ ‫ویرایش‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫رکوردها‬ ‫حذف‬ ‫ایجاد‬‫جدید‬ ‫داده‬ ‫پایگاه‬ ‫داده‬ ‫پایگاه‬ ‫در‬ ‫جدید‬ ‫جداول‬ ‫ایجاد‬ ‫ساخت‬stored procedures‫داده‬ ‫پایگاه‬ ‫در‬ ‫ساخت‬views‫داده‬ ‫پایگاه‬ ‫در‬ )‫ها‬ ‫(دیدگاه‬ ‫ها‬ ، ‫ها‬ ‫جدول‬ ‫دسترسی‬ ‫سطوح‬ ‫کردن‬ ‫تنظیم‬procedures،views‫ها‬ ... ‫و‬
  • 16. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 16 | Saba Creative Company ‫از‬ ‫استفاده‬ ‫مزایای‬SQL ‫اطالعاتی‬ ‫بانک‬ ،‫حاضر‬ ‫حال‬ ‫در‬SQL server‫دلیل‬ ‫به‬ ‫برتری‬ ‫این‬ .‫است‬ ‫برتر‬ ‫اطالعاتی‬ ‫بانک‬ ‫سه‬ ‫از‬ ‫یکی‬ ‫است‬ ‫زیر‬ ‫های‬ ‫مزیت‬: ‫های‬ ‫مزیت‬ ‫مهمترین‬ ‫از‬ ‫یکی‬SQL server‫و‬ ‫افزاری‬ ‫نرم‬ ‫دهندگان‬ ‫توسعه‬ ‫میان‬ ‫در‬ ‫را‬ ‫آن‬ ‫که‬ ‫ها‬ ‫داده‬ ‫پایگاه‬ ‫مدیران‬‫آموزش‬ .‫است‬ ‫آن‬ ‫از‬ ‫استفاده‬ ‫سادگی‬ ‫است‬ ‫کرده‬ ‫طرفدار‬ ‫پر‬ ‫بسیار‬SQL .‫باشد‬ ‫می‬ ‫سریع‬ ‫آن‬ ‫یادگیری‬ ‫و‬ ‫قدرت‬ ‫ابزارهای‬‫همچون‬ ‫مندی‬SQL Server Profiler, SQL Server Management Studio, DataBase Tuning... ‫و‬‫با‬ ‫کار‬ ‫تا‬ ‫است‬ ‫شده‬ ‫باعث‬ ‫همگی‬‫بانک‬‫های‬‫اطالعاتی‬SQL Server .‫گیرد‬ ‫انجام‬ ‫سرعت‬ ‫به‬ ‫آن‬ ‫در‬ ‫خطایابی‬ ‫و‬ ‫در‬ ‫اولیه‬ ‫تنظیمات‬ ‫و‬ ‫اندازی‬ ‫راه‬ ‫و‬ ‫نصب‬SQL Server‫های‬ ‫بانک‬ ‫سایر‬ ‫با‬ ‫مقایسه‬ ‫در‬ ‫بخصوص‬ . ‫است‬ ‫سریع‬ ‫و‬ ‫ساده‬ ‫ای‬ ‫رابطه‬ ‫اطالعاتی‬ ،‫مشکل‬ ‫بروز‬ ‫صورت‬ ‫در‬SQL Server‫پشتیبانی‬ ‫دارای‬Online‫همینطور‬ ‫و‬ ‫است‬ ‫قوی‬‫مستندات‬ ‫بسیار‬‫خوب‬‫و‬‫کارایی‬‫دارد‬. ... ‫و‬ ‫از‬ ‫استفاده‬ ‫معایب‬SQL ‫جدید‬ ‫های‬ ‫ورژن‬SQL‫به‬ ‫احتیاج‬‫سخت‬‫افزارهای‬‫پیشرفته‬‫ای‬‫دارند‬‫و‬‫این‬‫می‬‫تواند‬‫هزینه‬‫زیادی‬ ‫را‬‫در‬‫هنگام‬‫استفاده‬‫از‬SQL.‫کند‬ ‫تحمیل‬ ‫استفاده‬ ‫برای‬‫از‬SQL‫تا‬ ‫است‬ ‫نیاز‬FrameWork .Net‫گرفتن‬ ‫باعث‬ ‫این‬ ‫که‬ ‫شود‬ ‫نصب‬ ‫نیز‬ .‫شد‬ ‫خواهد‬ ‫بیشتری‬ ‫فضای‬ ... ‫و‬
  • 17. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 17 | Saba Creative Company ‫آموزش‬ ‫های‬ ‫نیاز‬ ‫پیش‬SQL Server ‫گیری‬ ‫یاد‬ ‫برای‬SQL‫زبان‬ .‫نیست‬ ‫خاصی‬ ‫نیاز‬ ‫پیش‬ ‫به‬ ‫نیاز‬SQL‫باشد‬ ‫نویسی‬ ‫برنامه‬ ‫زبان‬ ‫اولین‬ ‫تواند‬ ‫می‬ ‫گیرید‬ ‫می‬ ‫یاد‬ ‫که‬.‫با‬‫نصب‬‫یک‬‫نسخه‬‫از‬SQL‫راحتی‬ ‫به‬ ‫توان‬ ‫می‬ ‫آن‬ ‫قدرتمند‬ ‫مستندات‬ ‫از‬ ‫استفاده‬ ‫و‬ ‫قدم‬ ‫به‬ ‫قدم‬ ‫را‬ ‫آن‬ ‫از‬ ‫استفاده‬‫یاد‬‫بگیرید‬.
  • 18. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 18 | Saba Creative Company ‫دستورات‬ ‫مورد‬ ‫دستورات‬ ‫تا‬ ‫شود‬ ‫می‬ ‫سعی‬ ‫بخش‬ ‫این‬ ‫در‬‫به‬ ‫داده‬ ‫پایگاه‬ ‫با‬ ‫کار‬ ‫برای‬ ‫که‬ ‫را‬ ‫کارشناس‬ ‫هر‬ ‫برای‬ ‫نیاز‬ .‫شود‬ ‫داده‬ ‫نمایش‬ ‫تصویری‬ ‫صورت‬ ‫به‬ ‫هایی‬ ‫مثال‬ ‫با‬ ‫همراه‬ ‫دارد‬ ‫نیاز‬ ‫آنها‬ SELECT ‫به‬ ‫مربوط‬ ‫دستورات‬ ‫ترین‬ ‫ابتدایی‬ ‫جزو‬ ‫دستور‬ ‫این‬SQL‫اطالعات‬ ‫دیدن‬ ‫و‬ ‫انتخاب‬ ‫برای‬ ‫که‬ ‫باشد‬ ‫می‬ ‫نهایت‬ ‫در‬ ‫و‬ ‫جدول‬ ‫چند‬ ‫یا‬ ‫جدول‬ ‫یک‬ ‫از‬ ‫درخواستی‬‫ادغام‬‫کردن‬‫اطالعات‬‫و‬‫دیدن‬‫آنها‬‫در‬‫یک‬‫جدول‬‫استفاده‬ ‫می‬. ‫شود‬ : ‫شود‬ ‫می‬ ‫استفاده‬ ‫زیر‬ ‫شکل‬ ‫به‬ ‫دستور‬ ‫این‬ ‫نظر‬ ‫مورد‬ ‫های‬ ‫ستون‬ ‫یا‬ ‫ستون‬ ‫نام‬SELECT ‫جدول‬ ‫نام‬FROM ‫های‬ ‫ستون‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬ProductNumber, Name‫جدول‬ ‫از‬ ‫را‬Production.Product ‫دهد‬ ‫می‬ ‫نمایش‬ SELECT NAME, ProductNumber FROM Production.Product
  • 19. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 19 | Saba Creative Company .‫کنیم‬ ‫می‬ ‫استفاده‬ ‫ستون‬ ‫نام‬ ‫قسمت‬ ‫در‬ * ‫عالمت‬ ‫از‬ ‫نظر‬ ‫مورد‬ ‫جدول‬ ‫های‬ ‫ستون‬ ‫کلیه‬ ‫مشاهده‬ ‫برای‬ .‫باشد‬ ‫می‬ ‫ها‬ ‫ستون‬ ‫کل‬ ‫انتخاب‬ ‫برای‬ ‫سریع‬ ‫روشی‬ * ‫کاراکتر‬ ‫عبارتی‬ ‫به‬ ‫جدول‬ ‫های‬ ‫ستون‬ ‫تمام‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬Production.Product‫دهد‬ ‫می‬ ‫نمایش‬ SELECT * FROM Production.Product
  • 20. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 20 | Saba Creative Company ‫و‬ ‫نشوند‬ ‫داده‬ ‫نمایش‬ ‫تکراری‬ ‫موارد‬ ‫بخواهید‬ ‫و‬ ‫باشید‬ ‫داشته‬ ‫تکراری‬ ‫موارد‬ ‫خود‬ ‫جداول‬ ‫در‬ ‫که‬ ‫صورتی‬ ‫در‬ ‫دستور‬ ‫از‬ ‫پس‬ ‫است‬ ‫کافی‬ ، ‫دهد‬ ‫نمایش‬ ‫را‬ ‫آنها‬ ‫بار‬ ‫یک‬ ‫صرفا‬SELECT‫عبارت‬ ‫از‬DISTINCT‫استفاده‬ .‫نمایید‬ .‫کند‬ ‫می‬ ‫شناسایی‬ ‫تکراری‬ ‫را‬ ‫موارد‬ ‫شود‬ ‫مشخص‬ ‫آن‬ ‫ادامه‬ ‫در‬ ‫که‬ ‫هایی‬ ‫فیلد‬ ‫ازای‬ ‫به‬ ‫دستور‬ ‫این‬ :‫نکته‬ ‫های‬ ‫فیلد‬ ‫که‬ ‫باشد‬ ‫داشته‬ ‫وجود‬ ‫رکوردی‬ ‫که‬ ‫صورتی‬ ‫در‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬ProductNumber, Name: ‫داند‬ ‫می‬ ‫تکرای‬ ‫را‬ ‫آن‬ ‫باشد‬ ‫یکسان‬ ‫آنها‬ SELECT DISTINCT NAME, ProductNumber FROM Production.Product WHERE ‫دستورات‬ ‫پرکاربردترین‬ ‫البته‬ ‫و‬ ‫ترین‬ ‫ابتدایی‬ ‫جزو‬ ‫نیز‬ ‫دستور‬ ‫این‬SQL‫یا‬ ‫شرط‬ ‫افزودن‬ ‫برای‬ ‫که‬ ‫باشد‬ ‫می‬ .‫باشد‬ ‫می‬ ‫جستجو‬ ‫نتایج‬ ‫کردن‬ ‫محدود‬ ‫برای‬ ‫هایی‬ ‫شرط‬
  • 21. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 21 | Saba Creative Company ‫دستور‬ ‫از‬ ‫بعد‬ ‫باید‬ ‫دستور‬ ‫این‬SELECT‫می‬ ‫همچنین‬ ‫و‬ ‫شود‬ ‫استفاده‬‫عملگرهای‬ ‫از‬ ‫توان‬AND‫و‬OR‫و‬ .‫نمود‬ ‫ادغام‬ ‫باهم‬ ‫را‬ ‫شرط‬ ‫چندین‬ ‫توان‬ ‫می‬ ‫پرانتز‬ ‫عالمت‬ ‫و‬ ‫ها‬ ‫عملگر‬ ‫این‬ ‫کمک‬ ‫به‬ .‫نمود‬ ‫استفاده‬ ... ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ SELECT Name, ProductNumber,MakeFlag FROM Production.Product WHERE MakeFlag=1 ‫بین‬ ‫را‬ ‫مقدار‬ ‫باید‬ ‫ای‬ ‫رشته‬ ‫مقادیر‬ ‫برای‬ : ‫نکته‬‘‘: ‫دهید‬ ‫قرار‬ SELECT Name, ProductNumber FROM Production.Product WHERE NAME='LL Mountain Seat Assembly'
  • 22. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 22 | Saba Creative Company AND ‫دستور‬ ‫از‬ ‫توان‬ ‫می‬ ‫ها‬ ‫شرط‬ ‫ادغام‬ ‫و‬ ‫شرط‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫اعمال‬ ‫برای‬AND.‫نمود‬ ‫استفاده‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ SELECT * FROM Production.Product WHERE Color='Silver' AND ReorderPoint=750 LIKE ‫شرط‬ ‫با‬ ‫که‬ ‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫مقادیری‬ ‫و‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫جستجو‬ ‫های‬ ‫شرط‬ ‫بهبود‬ ‫برای‬ ‫دستور‬ ‫این‬ .‫باشد‬ ‫داشته‬ ‫مشابهت‬ ‫شده‬ ‫تعیین‬ ‫به‬: ‫نمایید‬ ‫مشاهده‬ ‫زیر‬ ‫های‬ ‫دستور‬ ‫در‬ ‫را‬ ‫آن‬ ‫مختلف‬ ‫های‬ ‫کاربرد‬ ‫مثال‬ ‫عنوان‬ ‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬‫با‬‫حرف‬p‫شروع‬‫می‬‫شود‬‫را‬‫نمایش‬‫می‬‫دهد‬ SELECT * FROM Production.Product
  • 23. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 23 | Saba Creative Company WHERE NAME LIKE 'P%' ‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬‫با‬‫حرف‬ng‫میابد‬ ‫خاتمه‬‫را‬‫نمایش‬‫می‬‫دهد‬ SELECT * FROM Production.Product WHERE NAME LIKE '%ng' ‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬‫حر‬ ‫شامل‬‫و‬‫ف‬wash‫باشد‬ ‫می‬‫را‬‫نمایش‬‫می‬‫دهد‬ SELECT * FROM Production.Product WHERE NAME LIKE '%wash%'
  • 24. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 24 | Saba Creative Company ‫رکورد‬‫هایی‬‫که‬‫فیلد‬NAME‫آنها‬13‫حرف‬ ‫با‬ ‫و‬ ‫باشد‬ ‫می‬ ‫حرفی‬F‫شود‬ ‫می‬ ‫شروع‬‫را‬‫نمایش‬‫می‬ ‫دهد‬ SELECT * FROM Production.Product WHERE NAME LIKE 'F____________' : ‫نکته‬‫عالمت‬%‫به‬‫معنای‬‫هر‬‫چند‬‫کاراکتر‬‫یا‬‫حرف‬‫دلخواه‬‫در‬‫قالب‬‫ارائه‬‫شده‬‫و‬‫عالمت‬_‫نمایانگر‬‫یک‬ ‫کاراکتر‬‫دلخواه‬‫است‬. JOIN ‫باهم‬ ‫جداول‬ ‫آن‬ ‫مرتبط‬ ‫های‬ ‫فیلد‬ ‫طریق‬ ‫از‬ ‫یکدیگر‬ ‫به‬ ‫جدول‬ ‫چند‬ ‫یا‬ ‫دو‬ ‫کردن‬ ‫متصل‬ ‫برای‬ ‫دستور‬ ‫این‬ ‫چند‬ ‫یا‬ ‫دو‬ ‫در‬ ‫اطالعاتی‬ ‫که‬ ‫باشد‬ ‫می‬ ‫مفهوم‬ ‫این‬ ‫به‬ ‫یکدیگر‬ ‫به‬ ‫جداول‬ ‫کردن‬ ‫متصل‬ .‫شود‬ ‫می‬ ‫استفاده‬
  • 25. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 25 | Saba Creative Company ‫دیگر‬ ‫جدول‬ ‫در‬ ‫متناظری‬ ‫مقدار‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫فیلدی‬ ‫کدام‬ ‫هر‬ ‫در‬ ‫و‬ ‫دارد‬ ‫وجود‬ ‫متفاوت‬ ‫جدول‬‫با‬ ‫و‬ ‫دارد‬ .‫شود‬ ‫می‬ ‫برقرار‬ ‫ارتباط‬ ‫آنها‬ ‫بین‬ ‫منطقی‬ ‫ارتباط‬ ‫این‬ ‫کمک‬ ‫اطالعات‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫از‬ ‫متفاوتی‬ ‫جداول‬ ‫در‬ ‫کاال‬ ‫هر‬ ‫اطالعات‬ ‫و‬ ‫کاال‬ ‫هر‬ ‫فروش‬ ‫به‬ ‫مربوط‬ ‫خروجی‬ ‫یک‬ ‫عنوان‬ ‫به‬ ‫را‬ ‫نهایی‬ ‫نتیجه‬ ‫و‬ ‫داده‬ ‫ارتباط‬ ‫یکدیگر‬ ‫با‬ ‫را‬ ‫اطالعات‬ ‫این‬ ‫روش‬ ‫این‬ ‫با‬ .‫دارند‬ ‫قرار‬ ‫هم‬ ‫م‬.‫کرد‬ ‫خواهیم‬ ‫شاهده‬ SELECT sod.SalesOrderID, sod.SalesOrderDetailID, sod.ProductID, sod.OrderQty, p.Name, p.ProductNumber FROM [Sales].[SalesOrderDetail] sod INNER JOIN Production.Product p ON p.ProductID = sod.ProductID
  • 26. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 26 | Saba Creative Company ‫دستورات‬ ‫انواع‬JOIN INNER JOIN‫یا‬JOIN:‫در‬‫این‬‫روش‬‫سطرهایی‬‫نمایش‬‫داده‬‫می‬‫شوند‬‫که‬‫در‬‫هر‬‫دو‬‫جدولی‬‫که‬ ‫با‬‫هم‬Join‫شده‬‫اند‬‫وجود‬‫دارند‬‫رابطه‬ ‫یک‬ ‫حداقل‬ ‫که‬ ‫باشد‬ ‫می‬ ‫سطرهایی‬ ‫دستور‬ ‫این‬ ‫خروجی‬ ‫واقع‬ ‫در‬ ‫و‬ ‫باشد‬ ‫داشته‬ ‫جدول‬ ‫دو‬ ‫در‬.‫خروجی‬ ‫در‬ ،‫باشد‬ ‫نشده‬ ‫پر‬ ‫سنجش‬ ‫واحد‬ ‫فیلد‬ ‫کاالیی‬ ‫برای‬ ‫اگر‬ ‫ها‬ ‫کاال‬ ‫مثال‬ ‫در‬ .‫شود‬ ‫نمی‬ ‫داده‬ ‫نمایش‬ ‫دستور‬ ‫این‬ ‫تفاوت‬‫دستور‬Join‫و‬‫دستور‬Inner Join‫در‬performance‫آنها‬‫ن‬‫می‬‫باشد‬.‫می‬ ‫این‬ ‫تفاوت‬ ‫تنها‬ ‫دستور‬ ‫که‬ ‫باشد‬Join‫دستور‬ ‫به‬ ‫نسبت‬Inner Join‫نگارش‬ ‫نحوه‬ ‫در‬ ‫طرفی‬ ‫از‬ ‫و‬ ‫باشد‬ ‫می‬ ‫تر‬ ‫قدیمی‬ Inner Join،‫است‬ ‫شده‬ ‫تر‬ ‫متداول‬ ‫آن‬ ‫از‬ ‫استفاده‬ ،‫دارد‬ ‫ارتباطی‬ ‫های‬ ‫کلیدواژه‬ ‫سایر‬ ‫به‬ ‫شباهت‬ ‫چون‬ .‫ندارد‬ ‫وجود‬ ‫تفاوتی‬ ‫صورت‬ ‫این‬ ‫غیر‬ ‫در‬ ( The question is what is the difference between above two syntax. Here is the answer – They are equal to each other. There is absolutely no difference between them. They are equal in performance as well as implementation. JOIN is actually shorter version of INNER JOIN. Personally I prefer to write INNER JOIN because it is much cleaner to read and it avoids any confusion if there is related to JOIN. For example if users had written INNER JOIN instead of JOIN there would have been no confusion in mind and hence there was no need to have original question. Reference: Pinal Dave (https://blog.sqlauthority.com) ) OUTER JOIN:‫در‬‫این‬‫روش‬‫سطرهایی‬‫از‬‫جدول‬‫اصلی‬‫که‬‫سطر‬‫متناظرشان‬‫در‬‫جدول‬‫دیگر‬‫وجود‬‫ندارد‬ ‫هم‬‫در‬‫خروجی‬‫می‬‫آیند‬.‫بسته‬‫به‬‫اینکه‬‫بخواهیم‬‫کدامیک‬‫از‬‫سطرهایی‬‫که‬‫در‬‫جدول‬‫دیگر‬‫متناظر‬‫ندارند‬ ‫هم‬‫در‬‫خروجی‬،‫بیایند‬‫سه‬‫نوع‬Outer Join‫بصورت‬‫زیر‬‫تعریف‬‫می‬‫شود‬:
  • 27. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 27 | Saba Creative Company 1)LEFT OUTER JOIN:‫تمام‬‫سطرهای‬‫جدول‬‫اولی‬(‫جدولی‬‫که‬‫در‬‫سمت‬‫چپ‬Join‫قرار‬‫گرفته‬ ‫است‬)‫در‬‫خروجی‬‫ظاهر‬‫می‬‫شوند‬.‫ولی‬‫سطرهایی‬‫از‬‫جدول‬‫دوم‬‫که‬‫متناظری‬‫در‬‫جدول‬‫اول‬‫ندارند‬‫در‬‫خروجی‬ ‫نمی‬‫آیند‬.‫بعنوان‬‫مثال‬‫دستور‬‫تمام‬ ‫اطالعات‬ ‫زیر‬‫کاال‬ ‫عنوان‬ ‫به‬ ‫آن‬ ‫کاالی‬ ‫حتی‬ ‫که‬ ‫را‬ ‫هایی‬ ‫فروش‬ : ‫دهد‬ ‫می‬ ‫نمایش‬ ‫نیز‬ ‫را‬ ‫است‬ ‫نشده‬ ‫مشخص‬ SELECT sod.SalesOrderID, sod.SalesOrderDetailID, sod.ProductID, sod.OrderQty, p.Name, p.ProductNumber FROM [Sales].[SalesOrderDetail] sod LEFT OUTER JOIN Production.Product p ON p.ProductID = sod.ProductID
  • 28. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 28 | Saba Creative Company 2)RIGHT OUTER JOIN:‫تمام‬‫سطرهای‬‫جدول‬‫دومی‬(‫جدولی‬‫که‬‫در‬‫سمت‬‫راست‬Join‫قرار‬ ‫گرفته‬‫است‬)‫در‬‫خروجی‬‫ظاهر‬‫می‬‫شوند‬. 3)FULL OUTER JOIN:‫تمام‬‫سطرهای‬‫هر‬‫دو‬‫جدول‬‫در‬‫خروجی‬‫می‬‫آیند‬‫چه‬‫در‬‫جدول‬‫دیگر‬ ‫متناظر‬‫داشته‬‫باشند‬‫چه‬‫نداشته‬‫باشند‬. SELECT sod.SalesOrderID, sod.SalesOrderDetailID, sod.ProductID, sod.OrderQty, p.Name, p.ProductNumber FROM [Sales].[SalesOrderDetail] sod FULL OUTER JOIN Production.Product p ON p.ProductID = sod.ProductID
  • 29. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 29 | Saba Creative Company CROSS JOIN:‫نتیجه‬‫این‬Join‫تمام‬‫ترکیباتی‬‫است‬‫که‬‫از‬‫قرار‬‫گرفتن‬‫هر‬‫سطر‬‫از‬‫جدول‬‫اولی‬‫در‬ ‫کنار‬‫تمام‬‫سطرهای‬‫جدول‬‫دومی‬‫بدست‬‫می‬‫آید‬(‫همانند‬‫حاصلضرب‬‫دکارتی‬.)‫به‬ ‫نیاز‬ ‫دیگر‬ ‫حالت‬ ‫این‬ ‫در‬ .‫باشد‬ ‫نمی‬ ‫جداول‬ ‫ارتباط‬ ‫برای‬ ‫کلیدی‬ ‫معرفی‬ SELECT sod.SalesOrderID, sod.SalesOrderDetailID, sod.ProductID, sod.OrderQty, p.Name, p.ProductNumber FROM [Sales].[SalesOrderDetail] sod CROSS JOIN Production.Product p
  • 30. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 30 | Saba Creative Company :‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫عکس‬ ‫به‬ ‫ها‬ ‫تفاوت‬ ‫بهتر‬ ‫تفهیم‬ ‫برای‬
  • 31. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 31 | Saba Creative Company AGGREGATE FUNCTIONS: ‫دستورات‬ ‫این‬:‫دهد‬ ‫می‬ ‫انجام‬ ‫شده‬ ‫نوشته‬ ‫دستورات‬ ‫در‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫های‬ ‫محاسبات‬ AVG .‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫مقادیر‬ ‫میانگین‬ ‫تابع‬ ‫این‬ ‫جدول‬ ‫در‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫میانگین‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫برای‬‫را‬ ‫فروش‬ ‫اطالعات‬:‫دهد‬ ‫می‬ ‫نمایش‬ SELECT AVG(OrderQty) FROM [Sales].[SalesOrderDetail]
  • 32. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 32 | Saba Creative Company COUNT ‫چند‬ ‫خروجی‬ ‫رکوردهای‬ ‫تعداد‬ ‫که‬ ‫کند‬ ‫می‬ ‫مشخص‬ ‫و‬ ‫باشد‬ ‫می‬ ‫رکوردها‬ ‫تعداد‬ ‫شمارش‬ ‫برای‬ ‫تابع‬ ‫این‬ .‫باشد‬ ‫می‬ ‫رکورد‬ ‫در‬ ‫مقدار‬ ‫فیلد‬ ‫های‬ ‫رکورد‬ ‫تعداد‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫برای‬‫فروش‬ ‫اطالعات‬ ‫جدول‬: ‫نماید‬ ‫می‬ ‫مشخص‬ ‫را‬ SELECT COUNT(OrderQty) FROM [Sales].[SalesOrderDetail] COUNT_BIG ‫دستور‬ ‫همانند‬ ‫نیز‬ ‫تابع‬ ‫این‬COUNT‫ها‬ ‫رکورد‬ ‫تعداد‬ ‫که‬ ‫صورتی‬ ‫در‬ ‫اما‬ ‫دارد‬ ‫را‬ ‫ها‬ ‫داده‬ ‫شمارش‬ ‫وظیفه‬ ‫آنها‬ ‫شمارش‬ ‫توان‬ ‫می‬ ‫دستور‬ ‫این‬ ‫کمک‬ ‫با‬ ‫باشد‬ ‫خارج‬ ‫صحیح‬ ‫عدد‬ ‫بازه‬ ‫از‬ ‫آن‬ ‫مقدار‬ ‫و‬ ‫باشد‬ ‫زیاد‬ ‫بسیار‬ .‫داد‬ ‫انجام‬ ‫را‬ SELECT COUNT_BIG(OrderQty) FROM [Sales].[SalesOrderDetail] MAX ‫کردن‬ ‫مشخص‬ ‫برای‬ ‫تابع‬ ‫این‬.‫باشد‬ ‫می‬ ‫خروجی‬ ‫یک‬ ‫در‬ ‫ماکزیمم‬ ‫مقدار‬
  • 33. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 33 | Saba Creative Company ‫در‬ ‫شده‬ ‫ثبت‬ ‫مقدار‬ ‫بزرگترین‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫فروش‬ ‫اقالم‬ ‫جدول‬:‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ SELECT MAX(OrderQty) FROM [Sales].[SalesOrderDetail] MIN .‫باشد‬ ‫می‬ ‫خروجی‬ ‫یک‬ ‫در‬ ‫مینیمم‬ ‫مقدار‬ ‫کردن‬ ‫مشخص‬ ‫برای‬ ‫تابع‬ ‫این‬ ‫د‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫در‬ ‫شده‬ ‫ثبت‬ ‫مقدار‬ ‫کوچکترین‬ ‫زیر‬ ‫دستور‬ ‫ر‬‫فروش‬ ‫اقالم‬ ‫جدول‬:‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ SELECT MIN(OrderQty) FROM [Sales].[SalesOrderDetail] SUM .‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫فیلد‬ ‫در‬ ‫موجود‬ ‫مقادیر‬ ‫جمع‬ ‫تابع‬ ‫این‬ ‫در‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫مجموع‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫اقالم‬ ‫جدول‬‫فروش‬:‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ SELECT SUM(OrderQty) FROM [Sales].[SalesOrderDetail]
  • 34. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 34 | Saba Creative Company GROUP BY ‫مقادیر‬ ‫توان‬ ‫می‬ ‫آن‬ ‫کمک‬ ‫با‬ ‫و‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫محاسباتی‬ ‫دستورات‬ ‫با‬ ‫همراه‬ ‫اغلب‬ ‫دستور‬ ‫این‬ .‫نمود‬ ‫محاسبه‬ ‫مختلفی‬ ‫های‬ ‫بندی‬ ‫دسته‬ ‫ازای‬ ‫به‬ ‫را‬ ‫محاسباتی‬ ‫در‬ ‫را‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫ماکزیمم‬ ‫و‬ ‫میانگین‬ ، ‫مینیمم‬ ‫مقادیر‬ ‫خواهیم‬ ‫می‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫برای‬ ‫اقالم‬‫فروش‬‫هر‬ ‫ازای‬ ‫به‬‫کاال‬: ‫نماییم‬ ‫محاسبه‬ SELECT ProductID, MIN(OrderQty) AS MinQty, AVG(OrderQty) AS AVGAty, MAX(OrderQty) AS MaxQty FROM [Sales].[SalesOrderDetail] GROUP BY ProductID SELECT ProductID,ModifiedDate, MIN(OrderQty) AS MinQty, AVG(OrderQty) AS AVGAty, MAX(OrderQty) AS MaxQty FROM [Sales].[SalesOrderDetail]
  • 35. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 35 | Saba Creative Company GROUP BY ProductID,ModifiedDate WITH ROLLUP ‫اصلی‬ ‫بندی‬ ‫گروه‬ ‫برای‬ ،‫بندی‬ ‫گروه‬ ‫مالک‬ ‫هر‬ ‫برای‬ ‫محاسبه‬ ‫بر‬ ‫عالوه‬ ‫محاسباتی‬ ‫مقادیر‬ ‫که‬ ‫داریم‬ ‫نیاز‬ ‫گاهی‬ .‫شود‬ ‫محاسبه‬ ‫جداگانه‬ ‫نیز‬‫زیر‬ ‫ساختار‬ ‫بندی‬ ‫گروه‬ ‫در‬ ‫موجود‬ ‫های‬ ‫فیلد‬ ‫ترتیب‬ ‫اساس‬ ‫بر‬ ‫دستور‬ ‫این‬ ‫در‬ . ‫دهد‬ ‫می‬ ‫شکل‬ ‫را‬ ‫ای‬ ‫مجموعه‬ ‫مثال‬ ‫عنوان‬ ‫به‬:‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ SELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country', S.Name AS N'Store', H.SalesPersonID, SUM(TotalDue) AS N'Total Sales' FROM Sales.Customer C INNER JOIN Sales.Store S ON C.StoreID = S.BusinessEntityID
  • 36. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 36 | Saba Creative Company INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON C.CustomerID = H.CustomerID WHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN (N'DE', N'FR') AND H.SalesPersonID IN (287, 290, 288) AND SUBSTRING(S.Name, 1, 4)IN (N'Vers', N'Spa ') GROUP BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID WITH ROLLUP
  • 37. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 37 | Saba Creative Company WITH CUBE ‫همانند‬ ‫دستور‬ ‫این‬ ‫خروجی‬WITH ROLLUP‫که‬ ‫تفاوت‬ ‫این‬ ‫با‬ ‫باشد‬ ‫می‬‫اساس‬ ‫بر‬ ‫دستور‬ ‫این‬ ‫در‬ . ‫دهد‬ ‫می‬ ‫شکل‬ ‫را‬ ‫ای‬ ‫مجموعه‬ ‫زیر‬ ‫ساختار‬ ‫بندی‬ ‫گروه‬ ‫در‬ ‫موجود‬ ‫های‬ ‫فیلد‬ ‫ترتیب‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ SELECT T.[Group] AS N'Region', T.CountryRegionCode AS N'Country', S.Name AS N'Store', H.SalesPersonID, SUM(TotalDue) AS N'Total Sales' FROM Sales.Customer C INNER JOIN Sales.Store S ON C.StoreID = S.BusinessEntityID INNER JOIN Sales.SalesTerritory T ON C.TerritoryID = T.TerritoryID INNER JOIN Sales.SalesOrderHeader H ON C.CustomerID = H.CustomerID WHERE T.[Group] = N'Europe' AND T.CountryRegionCode IN (N'DE', N'FR') AND H.SalesPersonID IN (287, 290, 288) AND SUBSTRING(S.Name, 1, 4)IN (N'Vers', N'Spa ') GROUP BY T.[Group], T.CountryRegionCode, S.Name, H.SalesPersonID WITH CUBE
  • 38. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 38 | Saba Creative Company GROUPING ‫حاصل‬ ‫که‬ ‫رکوردی‬ ‫تشخیص‬ ‫باال‬ ‫دستورات‬ ‫خروجی‬ ‫در‬‫کمی‬ ‫باشد‬ ‫می‬ ‫باالتر‬ ‫سطح‬ ‫یک‬ ‫در‬ ‫محاسبات‬ ‫انجام‬ ‫دستور‬ ‫کمک‬ ‫با‬ ‫توان‬ ‫می‬ ‫راحتی‬ ‫برای‬ ‫و‬ ‫باشد‬ ‫می‬ ‫سخت‬GROUPING‫در‬ ‫نظر‬ ‫مورد‬ ‫فیلد‬ ‫که‬ ‫صورتی‬ ‫در‬ ‫مقدار‬ ‫باشد‬ ‫نکرده‬ ‫شرکت‬ ‫اگر‬ ‫و‬ ‫صفر‬ ‫مقدار‬ ‫باشد‬ ‫کرده‬ ‫شرکت‬ ‫رکورد‬ ‫آن‬ ‫محاسبات‬1.‫دهد‬ ‫نمایش‬ ‫را‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ SELECT SalesQuota, SUM(SalesYTD) 'TotalSalesYTD', GROUPING(SalesQuota) AS 'Grouping' FROM Sales.SalesPerson GROUP BY
  • 39. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 39 | Saba Creative Company SalesQuota WITH ROLLUP HAVING ‫که‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫دیگری‬ ‫های‬ ‫دستور‬ ‫در‬ ‫دادن‬ ‫قرار‬ ‫شرط‬ ‫برای‬ ‫دستور‬ ‫این‬ ‫از‬‫ساختار‬ ‫از‬ ‫متفاوت‬ ‫ساختاری‬ ‫به‬ .‫دارد‬ ‫عادی‬ ‫های‬ ‫رکورد‬‫عبارت‬‫دیگر‬Having‫برای‬‫اعمال‬‫شرط‬‫به‬‫ستون‬‫ها‬‫اعمال‬‫می‬‫شود‬‫و‬‫همان‬ ‫کاری‬‫را‬‫می‬‫کند‬‫که‬Where‫در‬‫رکوردها‬‫انجام‬‫می‬.‫دهد‬ ‫نکته‬:‫دستور‬Having‫معموال‬‫با‬Group By‫می‬‫آید‬. ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫سند‬ ‫اقالم‬ ‫در‬ ‫را‬ ‫شده‬ ‫ثبت‬ ‫مقادیر‬ ‫ماکزیمم‬ ‫و‬ ‫میانگین‬ ، ‫مینیمم‬ ‫مقادیر‬ ‫سند‬ ‫نوع‬ ‫هر‬ ‫ازای‬ ‫به‬‫مالی‬ ‫سال‬ ‫در‬3: ‫نماییم‬ ‫محاسبه‬ SELECT ProductID, SpecialOfferID, MIN(OrderQty) AS MinQty, AVG(OrderQty) AS AVGAty, MAX(OrderQty) AS MaxQty FROM [Sales].[SalesOrderDetail] GROUP BY ProductID, SpecialOfferID HAVING SpecialOfferID = 1
  • 40. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 40 | Saba Creative Company UNION‫و‬UNION ALL ‫از‬‫دستور‬Union‫برای‬‫ترکیب‬‫و‬‫ادغام‬‫دو‬‫یا‬‫چند‬‫ستون‬‫مختلف‬‫از‬2‫یا‬‫چند‬‫جدول‬‫و‬‫نشان‬‫دادن‬‫آنها‬‫در‬ ‫یک‬‫ستون‬‫مشترک‬‫استفاده‬‫می‬‫شود‬. ‫در‬‫این‬‫دستور‬،‫نوع‬‫داده‬‫ای‬‫ستون‬‫های‬‫انتخاب‬‫شده‬‫برای‬‫ترکیب‬‫باید‬‫یکسان‬‫باشند‬.‫دستور‬Union ‫در‬‫هنگام‬‫ترکیب‬‫فیلد‬‫ها‬،‫در‬‫صورت‬‫برخورد‬‫با‬‫مقادیر‬‫تکراری‬‫آنها‬‫را‬‫حذف‬‫کرده‬‫و‬‫از‬‫هر‬‫مقدار‬‫یک‬‫نمونه‬ ‫را‬‫نمایش‬‫می‬‫دهد‬.‫برای‬‫مشاهده‬‫تمام‬‫مقادیر‬،‫حتی‬‫مقادیر‬‫تکراری‬‫باید‬‫از‬‫دستور‬Union ALL ‫استفاده‬‫کرد‬. ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ IF OBJECT_ID('dbo.Gloves', 'U') IS NOT NULL DROP TABLE dbo.Gloves; GO
  • 41. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 41 | Saba Creative Company -- Create Gloves table. SELECT ProductModelID, NAME INTO dbo.Gloves FROM Production.ProductModel WHERE ProductModelID IN (3, 4); GO -- Here is the simple union. -- Uses AdventureWorks SELECT ProductModelID, NAME FROM Production.ProductModel WHERE ProductModelID NOT IN (3, 4) UNION SELECT ProductModelID, NAME FROM dbo.Gloves ORDER BY NAME; GO
  • 42. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 42 | Saba Creative Company ‫می‬ ‫استفاده‬ ‫زیر‬ ‫دستور‬ ‫از‬ ‫شوند‬ ‫داده‬ ‫نمایش‬ ‫مقادیر‬ ‫تمام‬ ‫و‬ ‫نشوند‬ ‫حذف‬ ‫تکراری‬ ‫مقادیر‬ ‫که‬ ‫این‬ ‫برای‬ : ‫کنیم‬ SELECT ProductModelID, NAME FROM Production.ProductModel WHERE ProductModelID NOT IN (3, 4) UNION ALL SELECT ProductModelID, NAME FROM dbo.Gloves ORDER BY NAME;
  • 43. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 43 | Saba Creative Company EXCEPT ‫کاری‬ ‫دستور‬ ‫این‬‫مشابه‬‫با‬‫دستور‬union‫دهد‬ ‫می‬ ‫انجام‬‫و‬‫تفاوت‬‫آ‬‫ن‬‫با‬‫این‬‫دستور‬‫این‬‫است‬‫این‬ ‫که‬ ‫دستور‬‫که‬ ‫را‬ ‫مواردی‬ ‫تمام‬ ‫و‬ ‫کند‬ ‫می‬ ‫انتخاب‬ ‫را‬ ‫اول‬ ‫جدول‬ ‫های‬ ‫ردیف‬‫داخل‬ ‫از‬ ‫دارد‬ ‫وجود‬ ‫دوم‬ ‫جدول‬ ‫در‬ .‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫مانده‬ ‫باقی‬ ‫و‬ ‫کند‬ ‫می‬ ‫حذف‬ ‫آن‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫جدول‬ ‫در‬ ‫که‬ ‫شود‬ ‫می‬ ‫مشاهده‬ ‫کاالهایی‬ ‫های‬ ‫سریال‬ ‫شماره‬Product ‫جدول‬ ‫در‬ ‫و‬ ‫دارد‬ ‫وجود‬WorkOrder‫ندارد‬ ‫وجود‬ SELECT ProductID FROM Production.Product EXCEPT SELECT ProductID FROM Production.WorkOrder
  • 44. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 44 | Saba Creative Company INTERSECT ‫دستور‬ ‫این‬‫مانند‬‫دستور‬union‫نیز‬‫با‬‫دو‬‫جمله‬‫کار‬‫میکند‬.‫اما‬‫تفاوت‬‫اینجاست‬‫که‬‫دستور‬union‫در‬ ‫اصل‬‫مانند‬‫یک‬OR‫کار‬‫میکند‬‫و‬‫تمام‬‫رکوردهای‬‫غیر‬‫تکراری‬‫را‬‫بر‬‫میدارد‬.‫اما‬‫این‬‫دستور‬‫مانند‬AND ‫کار‬‫میکند‬‫و‬‫رکورد‬‫های‬‫مشترک‬‫را‬‫بر‬‫میدارد‬. ‫دستور‬ ‫با‬ ‫آن‬ ‫تفاوت‬EXCEPT‫دستور‬ ‫آن‬ ‫در‬ ‫که‬ ‫است‬ ‫این‬‫جدول‬ ‫از‬ ‫ناموجود‬ ‫اطالعات‬ ‫صرفا‬‫اول‬‫در‬ ‫را‬ .‫دهد‬ ‫می‬ ‫نمایش‬ ‫دوم‬ ‫جدول‬‫مقادیر‬ ‫و‬ ‫داده‬ ‫قرار‬ ‫هم‬ ‫کنار‬ ‫در‬ ‫جدول‬ ‫دو‬ ‫هر‬ ‫از‬ ‫را‬ ‫اطالعات‬ ‫دستور‬ ‫این‬ ‫اما‬ ‫و‬ ‫کند‬ ‫می‬ ‫حذف‬ ‫آن‬ ‫از‬ ‫را‬ ‫تکراری‬‫از‬ ‫اطالعاتی‬ ‫و‬ ‫نیست‬ ‫موجود‬ ‫دوم‬ ‫جدول‬ ‫در‬ ‫که‬ ‫اول‬ ‫جدول‬ ‫از‬ ‫اطالعاتی‬ .‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫نیست‬ ‫موجود‬ ‫اول‬ ‫جدول‬ ‫در‬ ‫که‬ ‫دوم‬ ‫جدول‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫جدول‬ ‫در‬ ‫که‬ ‫شود‬ ‫می‬ ‫مشاهده‬ ‫کاالهایی‬ ‫های‬ ‫سریال‬ ‫شماره‬ ‫زیر‬Product ‫جدول‬ ‫در‬ ‫و‬ ‫دارد‬ ‫وجود‬WorkOrder‫جد‬ ‫هردو‬ ‫در‬ ‫اما‬ ‫دارد‬ ‫وجود‬ ‫نیز‬.‫ندارد‬ ‫وجود‬ ‫ول‬ SELECT ProductID FROM Production.Product INTERSECT SELECT ProductID
  • 45. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 45 | Saba Creative Company FROM Production.WorkOrder CROSS APPLY ‫دهیم‬ ‫ارتباط‬ ‫تابع‬ ‫یک‬ ‫مثال‬ ‫دیگری‬ ‫شی‬ ‫با‬ ‫را‬ ‫جدول‬ ‫یک‬ ‫اطالعات‬ ‫تا‬ ‫داریم‬ ‫نیاز‬ ‫گاهی‬‫تابع‬ ‫انواع‬ ‫از‬ ‫برخی‬ ( ‫نمی‬ ‫توابع‬ ‫این‬ ‫ارتباط‬ ‫برای‬ ،‫شود‬ ‫می‬ ‫شامل‬ ‫را‬ ‫فیلد‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫و‬ ‫باشد‬ ‫می‬ ‫جدولی‬ ‫آنها‬ ‫خروجی‬ ‫مقدار‬ ) ‫داد‬ ‫قرار‬ ‫اسکریپت‬ ‫متن‬ ‫در‬ ‫را‬ ‫آن‬ ‫توان‬‫برای‬ ‫است‬ ‫ممکن‬ ‫حالت‬ ‫این‬ ‫در‬ .‫کنیم‬ ‫مشاهده‬ ‫را‬ ‫آن‬ ‫خروجی‬ ‫و‬ ‫باش‬ ‫داشته‬ ‫مقدار‬ ‫یک‬ ‫از‬ ‫بیش‬ ‫تابع‬ ‫مقدار‬ ‫ها‬ ‫رکورد‬ ‫از‬ ‫برخی‬‫دستور‬ ‫از‬ ‫علت‬ ‫همین‬ ‫به‬ ‫د‬CROSS APPLY .‫نماییم‬ ‫می‬ ‫استفاده‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ --Create Employees table and insert values. CREATE TABLE Employees ( empid INT NOT NULL, mgrid INT NULL, empname VARCHAR(25) NOT NULL,
  • 46. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 46 | Saba Creative Company salary MONEY NOT NULL CONSTRAINT PK_Employees PRIMARY KEY(empid) ); GO INSERT INTO Employees VALUES ( 1, NULL, 'Nancy', $10000.00 ); INSERT INTO Employees VALUES ( 2, 1, 'Andrew', $5000.00 ); INSERT INTO Employees VALUES ( 3, 1, 'Janet', $5000.00 ); INSERT INTO Employees VALUES ( 4, 1, 'Margaret', $5000.00 ); INSERT INTO Employees VALUES (
  • 47. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 47 | Saba Creative Company 5, 2, 'Steven', $2500.00 ); INSERT INTO Employees VALUES ( 6, 2, 'Michael', $2500.00 ); INSERT INTO Employees VALUES ( 7, 3, 'Robert', $2500.00 ); INSERT INTO Employees VALUES ( 8, 3, 'Laura', $2500.00 ); INSERT INTO Employees VALUES ( 9, 3, 'Ann', $2500.00 ); INSERT INTO Employees VALUES
  • 48. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 48 | Saba Creative Company ( 10, 4, 'Ina', $2500.00 ); INSERT INTO Employees VALUES ( 11, 7, 'David', $2000.00 ); INSERT INTO Employees VALUES ( 12, 7, 'Ron', $2000.00 ); INSERT INTO Employees VALUES ( 13, 7, 'Dan', $2000.00 ); INSERT INTO Employees VALUES ( 14, 11, 'James', $1500.00 ); GO
  • 49. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 49 | Saba Creative Company --Create Departments table and insert values. CREATE TABLE Departments ( deptid INT NOT NULL PRIMARY KEY, deptname VARCHAR(25) NOT NULL, deptmgrid INT NULL REFERENCES Employees ); GO INSERT INTO Departments VALUES ( 1, 'HR', 2 ); INSERT INTO Departments VALUES ( 2, 'Marketing', 7 ); INSERT INTO Departments VALUES ( 3, 'Finance', 8 ); INSERT INTO Departments VALUES ( 4, 'R&D', 9 ); INSERT INTO Departments VALUES (
  • 50. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 50 | Saba Creative Company 5, 'Training', 4 ); INSERT INTO Departments VALUES ( 6, 'Gardening', NULL ); GO CREATE FUNCTION dbo.fn_getsubtree ( @empid AS INT ) RETURNS @TREE TABLE ( empid INT NOT NULL, empname VARCHAR(25) NOT NULL, mgrid INT NULL, lvl INT NOT NULL ) AS BEGIN WITH Employees_Subtree(empid, empname, mgrid, lvl) AS ( -- Anchor Member (AM) SELECT empid, empname, mgrid, 0 FROM Employees WHERE empid = @empid UNION ALL
  • 51. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 51 | Saba Creative Company -- Recursive Member (RM) SELECT e.empid, e.empname, e.mgrid, es.lvl + 1 FROM Employees AS e JOIN Employees_Subtree AS es ON e.mgrid = es.empid ) INSERT INTO @TREE SELECT * FROM Employees_Subtree; RETURN END GO SELECT D.deptid, D.deptname, D.deptmgrid, ST.empid, ST.empname, ST.mgrid FROM Departments AS D CROSS APPLY fn_getsubtree(D.deptmgrid) AS ST
  • 52. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 52 | Saba Creative Company ‫آنها‬ ‫خروجی‬ ‫توابع‬ ‫برخی‬ : ‫نکته‬(‫باشد‬ ‫می‬ ‫فیلد‬ ‫یک‬ ‫در‬ ‫مقدار‬ ‫یک‬Scalar Valued Function‫می‬ ‫که‬ ) .‫نمود‬ ‫استفاده‬ ‫اسکریپت‬ ‫متن‬ ‫در‬ ‫را‬ ‫توابع‬ ‫این‬ ‫توان‬ ‫دستور‬ ‫از‬ ‫آن‬ ‫برای‬ ‫که‬ ‫نماییم‬ ‫مشاهده‬ ‫را‬ ‫فروش‬ ‫های‬ ‫فاکتور‬ ‫شمسی‬ ‫تاریخ‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫عنوان‬ ‫به‬ : ‫کنیم‬ ‫می‬ ‫استفاده‬ ‫زیر‬ SELECT q.QuotationID, q.Number, q.Date, sys3.fn_DateToShamsiDate(q.Date) FROM SLS3.Quotation q
  • 53. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 53 | Saba Creative Company Scalar Valued Function ‫در‬SQL‫کدام‬ ‫هر‬ ‫و‬ ‫کنند‬ ‫می‬ ‫عمل‬ ‫فیلدها‬ ‫از‬ ‫خاصی‬ ‫نوع‬ ‫روی‬ ‫بر‬ ‫کدام‬ ‫هر‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫گوناگونی‬ ‫توابع‬ .‫دارند‬ ‫متفاوتی‬ ‫های‬ ‫خروجی‬ ‫می‬ ‫توابع‬ ‫این‬ ‫از‬ ‫برخی‬ ‫به‬ ‫قسمت‬ ‫این‬ ‫در‬.‫پردازیم‬ ‫زمان‬ ‫و‬ ‫تاریخ‬ ‫توابع‬ GETDATE‫تاریخ‬ :‫و‬‫ساعت‬‫جاری‬‫را‬‫برمی‬‫گرداند‬ :‫دهیم‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫سیستم‬ ‫جاری‬ ‫تاریخ‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬ SELECT GETDATE() DATEPART‫یکی‬ :‫از‬‫بخش‬‫های‬‫عبارت‬date/time‫را‬‫برمی‬‫گرداند‬ ‫و‬ ‫معرفی‬ ‫را‬ ‫نظر‬ ‫مورد‬ ‫بخش‬ ‫ابتدا‬ ‫منظور‬ ‫این‬ ‫برای‬.‫کنیم‬ ‫می‬ ‫معرفی‬ ‫را‬ ‫تاریخ‬ ‫فیلد‬ ‫سپس‬ ‫زیر‬ ‫دستور‬ ‫با‬ ‫مثال‬ ‫عنوان‬ ‫به‬: ‫نمود‬ ‫مشاهده‬ ‫توان‬ ‫می‬ ‫را‬ ‫روز‬ ‫تاریخ‬ ‫مختلف‬ ‫های‬ ‫بخش‬ SELECT GETDATE(), DATEPART(YEAR, GETDATE()), DATEPART(MONTH, GETDATE()), DATEPART(DAY, GETDATE()), DATEPART(dayofyear, GETDATE()), DATEPART(weekday, GETDATE()) DATEADD‫این‬ ‫برای‬ ‫نماییم‬ ‫کم‬ ‫یا‬ ‫اضافه‬ ‫را‬ ‫مقداری‬ ‫تاریخ‬ ‫یک‬ ‫از‬ ‫بخشی‬ ‫به‬ ‫خواهیم‬ ‫می‬ ‫گاهی‬ : ‫اضافه‬ ‫آن‬ ‫به‬ ‫خواهیم‬ ‫می‬ ‫که‬ ‫را‬ ‫بخشی‬ ‫ابتدا‬ ‫تابع‬ ‫این‬ ‫در‬ .‫نمود‬ ‫استفاده‬ ‫تابع‬ ‫این‬ ‫از‬ ‫توان‬ ‫می‬ ‫منظور‬ ‫اضا‬ ‫مقدار‬ ‫سپس‬ ‫و‬ ‫مشخص‬ ‫را‬ ‫نماییم‬.‫کنیم‬ ‫می‬ ‫مشخص‬ ‫را‬ ‫تاریخ‬ ‫انتها‬ ‫در‬ ‫و‬ ‫را‬ ‫شدن‬ ‫فه‬ ‫تاریخ‬ ‫به‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬: ‫نماییم‬ ‫اضافه‬ ‫را‬ ‫متفاوتی‬ ‫های‬ ‫بخش‬ ،‫روز‬
  • 54. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 54 | Saba Creative Company SELECT DATEADD(quarter, 4, GETDATE()) AS 'Quarter', DATEADD(MONTH, 13, GETDATE()) AS 'Month', DATEADD(dayofyear, 365, GETDATE()) AS 'Dayofyear', DATEADD(DAY, 365, GETDATE()) AS 'Day', DATEADD(week, 5, GETDATE()) AS 'Week' SELECT DATEADD(weekday, 31, GETDATE()) AS 'Weekday', DATEADD(hour, 23, GETDATE()) AS 'Hour', DATEADD(minute, 59, GETDATE()) AS 'Minute', DATEADD(second, 59, GETDATE()) AS 'Second', DATEADD(millisecond, 1, GETDATE()) AS 'Millisecond' DATEDIFF‫از‬ ‫منظور‬ ‫این‬ ‫برای‬ .‫نماییم‬ ‫مشص‬ ‫را‬ ‫زمانی‬ ‫بازه‬ ‫دو‬ ‫بین‬ ‫اختالف‬ ‫تا‬ ‫داریم‬ ‫نیاز‬ ‫گاهی‬ : ‫تابع‬DATEDIFF‫در‬ ‫و‬ ‫شروع‬ ‫تاریخ‬ ‫بعد‬ ،‫نظر‬ ‫مورد‬ ‫تاریخی‬ ‫بخش‬ ‫اول‬ ‫قسمت‬ ‫در‬ ‫که‬ ‫کنیم‬ ‫می‬ ‫استفاده‬ .‫دهیم‬ ‫می‬ ‫را‬ ‫پایان‬ ‫تاریخ‬ ‫انتها‬ ‫تفاضل‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬‫جدول‬ ‫در‬ ‫موجود‬ ‫تاریخ‬ ‫بزرگترین‬ ‫و‬ ‫تاریخ‬ ‫کوچکترین‬ ‫بین‬ ‫روز‬ ‫تعداد‬ SalesOrderHeader: ‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ SELECT DATEDIFF( DAY, ( SELECT MIN(OrderDate)
  • 55. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 55 | Saba Creative Company FROM Sales.SalesOrderHeader ), ( SELECT MAX(OrderDate) FROM Sales.SalesOrderHeader ) ) ‫ای‬ ‫رشته‬ ‫توابع‬ LEFT ‫این‬‫می‬ ‫نمایش‬ ‫چپ‬ ‫سمت‬ ‫از‬ ‫نمایید‬ ‫اعالم‬ ‫آن‬ ‫از‬ ‫بعد‬ ‫پارامتر‬ ‫در‬ ‫که‬ ‫را‬ ‫مشخصی‬ ‫حروف‬ ‫تعداد‬ ‫تابع‬ .‫دهد‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬5‫جدول‬ ‫در‬ ‫را‬ ‫نام‬ ‫ستون‬ ‫از‬ ‫چپ‬ ‫سمت‬ ‫کاراکتر‬Product:‫دهد‬ ‫می‬ ‫نمایش‬ SELECT LEFT(NAME, 5) FROM Production.Product ORDER BY ProductID
  • 56. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 56 | Saba Creative Company RIGHT ‫می‬ ‫نمایش‬ ‫راست‬ ‫سمت‬ ‫از‬ ‫نمایید‬ ‫اعالم‬ ‫آن‬ ‫از‬ ‫بعد‬ ‫پارامتر‬ ‫در‬ ‫که‬ ‫را‬ ‫مشخصی‬ ‫حروف‬ ‫تعداد‬ ‫تابع‬ ‫این‬ .‫دهد‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫عنوان‬ ‫به‬5‫جدول‬ ‫در‬ ‫را‬ ‫نام‬ ‫ستون‬ ‫از‬ ‫راست‬ ‫سمت‬ ‫کاراکتر‬Product:‫دهد‬ ‫می‬ ‫نمایش‬ SELECT RIGHT(NAME, 5) FROM Production.Product ORDER BY ProductID
  • 57. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 57 | Saba Creative Company UPPER .‫دهد‬ ‫می‬ ‫نمایش‬ ‫بزرگ‬ ‫حروف‬ ‫های‬ ‫کاراکتر‬ ‫با‬ ‫را‬ ‫فیلد‬ ‫در‬ ‫موجود‬ ‫حروف‬ ‫تابع‬ ‫این‬ .‫دهد‬ ‫می‬ ‫نمایش‬ ‫بزرگ‬ ‫حروف‬ ‫با‬ ‫را‬ ‫افراد‬ ‫نام‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬ SELECT UPPER(LastName), LastName FROM Person.Person ORDER BY LastName
  • 58. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 58 | Saba Creative Company LOWER ‫حروف‬ ‫تابع‬ ‫این‬.‫دهد‬ ‫می‬ ‫نمایش‬ ‫کوچک‬ ‫حروف‬ ‫های‬ ‫کاراکتر‬ ‫با‬ ‫را‬ ‫فیلد‬ ‫در‬ ‫موجود‬ .‫دهد‬ ‫می‬ ‫نمایش‬ ‫کوچک‬ ‫حروف‬ ‫با‬ ‫را‬ ‫افراد‬ ‫نام‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬ SELECT LOWER(LastName), LastName FROM Person.Person ORDER BY LastName
  • 59. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 59 | Saba Creative Company SUBSTRING ‫که‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫زمانی‬ ‫تابع‬ ‫این‬‫نمایش‬ ‫فیلد‬ ‫یک‬ ‫از‬ ‫را‬ ‫مشخصی‬ ‫کاراکتر‬ ‫تا‬ ‫کاراکتر‬ ‫از‬ ‫بخواهیم‬ .‫دهیم‬ ‫زیر‬ ‫دستور‬ ‫مثال‬ ‫برای‬‫فیلد‬ ‫اول‬ ‫کاراکتر‬NAME‫عنوان‬ ‫به‬ ‫را‬Initial‫به‬ ‫را‬ ‫چهارم‬ ‫و‬ ‫سوم‬ ‫های‬ ‫کاراکتر‬ ‫و‬ ‫عنوان‬ThirdAndFourthCharacters: ‫دهد‬ ‫می‬ ‫نمایش‬ SELECT NAME, SUBSTRING(NAME, 1, 1) AS Initial, SUBSTRING(NAME, 3, 2) AS ThirdAndFourthCharacters FROM sys.databases
  • 60. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 60 | Saba Creative Company REPLACE ‫نمایش‬ ‫و‬ ‫تعویض‬ ‫فیلد‬ ‫یک‬ ‫در‬ ‫ها‬ ‫کاراکتر‬ ‫از‬ ‫دیگر‬ ‫برخی‬ ‫با‬ ‫را‬ ‫ها‬ ‫کاراکتر‬ ‫از‬ ‫برخی‬ ‫که‬ ‫است‬ ‫الزم‬ ‫گاهی‬ .‫دهیم‬ .‫کنیم‬ ‫می‬ ‫استفاده‬ ‫تابع‬ ‫این‬ ‫از‬ ‫منظور‬ ‫این‬ ‫برای‬ ‫در‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫عبارت‬'abcdefghicde'‫کلمه‬ ‫ترکیب‬ ‫هرجا‬ ،cde‫آن‬ ،‫شود‬ ‫مشاهده‬ ‫با‬ ‫را‬xxx:‫نماید‬ ‫می‬ ‫تعویض‬ SELECT REPLACE('abcdefghicde', 'cde', 'xxx')
  • 61. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 61 | Saba Creative Company STUFF ‫کند‬ ‫می‬ ‫تعویض‬ ‫دیگری‬ ‫های‬ ‫کاراکتر‬ ‫با‬ ‫را‬ ‫ها‬ ‫کاراکتر‬ ‫از‬ ‫برخی‬ ‫قبل‬ ‫دستور‬ ‫همانند‬ ‫نیز‬ ‫تابع‬ ‫این‬‫به‬ ‫اما‬ .‫شود‬ ‫اعمال‬ ‫آن‬ ‫در‬ ‫تغییرات‬ ‫خواهیم‬ ‫می‬ ‫که‬ ‫است‬ ‫فیلدی‬ ‫آن‬ ‫به‬ ‫شده‬ ‫داده‬ ‫اول‬ ‫مقدار‬ ‫که‬ ‫صورت‬ ‫این‬ ‫کاراکتر‬ ‫واقع‬ ‫در‬ .‫باشد‬ ‫می‬ ‫تغییر‬ ‫این‬ ‫پایان‬ ‫کاراکتر‬ ‫سوم‬ ‫مقدار‬ ‫تغییرو‬ ‫این‬ ‫شروع‬ ‫کاراکتر‬ ‫دوم‬ ‫مقدار‬ .‫شود‬ ‫می‬ ‫تعویض‬ ‫چهارم‬ ‫ورودی‬ ‫مقدار‬ ‫با‬ ‫و‬ ‫شوند‬ ‫می‬ ‫حذف‬ ‫مقدار‬ ‫دو‬ ‫این‬ ‫بین‬ ‫های‬ ‫در‬ ‫خواهیم‬ ‫می‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫عبارت‬'abcdef'‫آن‬ ‫سوم‬ ‫تا‬ ‫دوم‬ ‫های‬ ‫کاراکتر‬ ‫جای‬ ‫به‬ ‫عبارت‬ijklmn:‫دهیم‬ ‫قرار‬ ‫را‬ SELECT STUFF('abcdef', 2, 3, 'ijklmn') LEN .‫نماییم‬ ‫مشخص‬ ‫را‬ ‫فیلد‬ ‫هر‬ ‫طول‬ ‫که‬ ‫شود‬ ‫می‬ ‫استفاده‬ ‫منظور‬ ‫این‬ ‫به‬ ‫تابع‬ ‫این‬ ‫در‬ ‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬:‫باشد‬ ‫می‬ ‫کاراکتر‬ ‫چند‬ ‫نام‬ ‫هر‬ ‫طول‬ ‫که‬ ‫کنیم‬ ‫مشخص‬ ‫زیر‬ ‫دستور‬ SELECT LEN(FirstName) AS Length, FirstName, LastName FROM Sales.vIndividualCustomer
  • 62. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 62 | Saba Creative Company ‫اضافی‬ ‫توابع‬ DATALENGTH ‫به‬ ‫بایت‬ ‫مقدار‬ ‫چه‬ ‫خود‬ ‫اطالعات‬ ‫ذخیره‬ ‫برای‬ ‫فیلد‬ ‫هر‬ ‫بدانیم‬ ‫تا‬ ‫است‬ ‫نیاز‬ ‫گاهی‬.‫است‬ ‫داده‬ ‫تخصیص‬ ‫خود‬ .‫کنیم‬ ‫می‬ ‫استفاده‬ ‫دستور‬ ‫این‬ ‫از‬ ‫کار‬ ‫این‬ ‫برای‬ ‫داده‬ ‫تخصیص‬ ‫خود‬ ‫به‬ ‫فضا‬ ‫بایت‬ ‫چند‬ ‫کاال‬ ‫نام‬ ‫هر‬ ‫کنیم‬ ‫می‬ ‫مشخص‬ ‫زیر‬ ‫دستور‬ ‫کمک‬ ‫با‬ ‫مثال‬ ‫عنوان‬ ‫به‬ :‫است‬ SELECT DATALENGTH(NAME) AS length, NAME FROM Production.Product ORDER BY NAME
  • 63. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 63 | Saba Creative Company CHARINDEX ‫تابع‬ ‫این‬ .‫کند‬ ‫پیدا‬ ‫اصلی‬ ‫رشته‬ ‫یک‬ ‫در‬ ‫را‬ ‫فرعی‬ ‫رشته‬ ‫یک‬ ‫مختصات‬ ‫تا‬ ‫کند‬ ‫می‬ ‫کمک‬ ‫ما‬ ‫به‬ ‫تابع‬ ‫این‬ .‫باشد‬ ‫می‬ ‫اصلی‬ ‫رشته‬ ‫دوم‬ ‫مقدار‬ ‫و‬ ‫فرعی‬ ‫رشته‬ ‫اول‬ ‫مقدار‬ .‫دارد‬ ‫مقدار‬ ‫دو‬ ‫به‬ ‫نیاز‬ ‫کاراکتر‬ ‫چندمین‬ ‫در‬ ‫فاصله‬ ‫کاراکتر‬ ‫نماییم‬ ‫مشخص‬ ‫خواهیم‬ ‫می‬ ‫ها‬ ‫کاال‬ ‫عنوان‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫نام‬ : ‫داد‬ ‫قرار‬ ‫کاال‬ SELECT CHARINDEX(' ', NAME), ProductID, NAME, ProductNumber FROM [Production].[Product]
  • 64. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 64 | Saba Creative Company : ‫یا‬ ‫و‬ SELECT CHARINDEX( 'bicycle', 'Reflectors are vital safety components of your bicycle.' ) .‫پردازیم‬ ‫می‬ ‫داخلی‬ ‫توابع‬ ‫برخی‬ ‫بررسی‬ ‫به‬ ‫ادامه‬ ‫در‬
  • 65. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 65 | Saba Creative Company ‫دستورات‬Rank ‫توابع‬Ranking‫باعث‬‫می‬‫شود‬‫تا‬‫به‬‫هر‬‫یک‬‫از‬‫سطرهای‬‫جدول‬‫یک‬‫مقدار‬‫به‬‫عنوان‬‫امتیاز‬‫اختصاص‬ ‫داده‬‫شود‬.‫این‬‫مقدار‬‫ممکن‬‫است‬‫منحصر‬‫به‬‫هر‬‫سطر‬‫باشد‬‫یا‬‫این‬‫که‬‫چند‬‫سطر‬‫می‬‫تواند‬‫دارای‬‫مقدار‬ ‫مشابه‬،‫باشد‬‫این‬‫بستگی‬‫به‬‫تابع‬‫مورد‬‫استفاده‬‫خواهد‬‫داشت‬. ‫توجه‬‫داشته‬‫باشید‬‫که‬‫مقدار‬‫مربوط‬‫به‬‫این‬‫ستون‬‫در‬‫خروجی‬Query‫ها‬‫ممکن‬‫است‬‫در‬‫هر‬‫بار‬‫اجرا‬ ‫متفاوت‬‫باشد‬(‫البته‬‫در‬‫صورتی‬‫که‬‫اطالعات‬‫پایگاه‬‫داده‬‫شما‬‫تغییر‬‫یابد‬‫یا‬‫محاسباتی‬‫بر‬‫اساس‬‫تاریخ‬ ‫و‬‫زمان‬‫داشته‬‫باشید‬) . ‫ساده‬‫ترین‬،‫مثال‬‫افزودن‬‫شماره‬‫ردیف‬‫به‬‫خروجی‬Query‫می‬‫باشد‬‫که‬‫توسط‬‫تابع‬ ROW_NUMBER()‫انجام‬‫می‬‫شود‬‫و‬‫هر‬‫سطر‬‫یک‬‫مقدار‬‫منحصر‬‫به‬‫فرد‬‫خواهد‬‫داشت‬. ROW_NUMBER ‫این‬‫تابع‬‫برای‬‫هر‬‫ردیف‬‫یک‬‫عدد‬‫منحصر‬‫بفرد‬‫را‬‫بر‬‫می‬‫گرداند‬،‫عدد‬‫انتساب‬‫داده‬‫شده‬‫به‬‫صورت‬‫ترتیبی‬ ‫به‬‫هر‬‫رکورد‬‫انتساب‬‫داده‬‫می‬‫شود‬‫که‬‫از‬‫یک‬‫شروع‬‫شده‬‫و‬‫به‬‫تعداد‬‫رکورد‬‫های‬‫برگردانده‬‫شده‬‫افزایش‬ ‫می‬‫یابد‬. .‫باشد‬ ‫فیلدی‬ ‫چه‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫دادن‬ ‫شماره‬ ‫این‬ ‫ترتیب‬ ‫که‬ ‫شود‬ ‫بیان‬ ‫باید‬ ‫تابع‬ ‫این‬ ‫ادامه‬ ‫در‬ ‫برای‬ ‫هایی‬ ‫ردیف‬ ‫شماره‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫تخصیص‬ ‫دیتا‬ ‫در‬ ‫موجود‬ ‫های‬ ‫دیتا‬ ‫نام‬‫می‬ ‫داده‬ : ‫شود‬ SELECT ROW_NUMBER() OVER(ORDER BY NAME ASC) AS RowNumber, NAME, recovery_model_desc FROM sys.databases
  • 66. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 66 | Saba Creative Company ‫شرط‬ ‫از‬ ‫قبل‬ ‫تابع‬ ‫این‬ ‫دوم‬ ‫قسمت‬ ‫در‬ ‫توان‬ ‫می‬ ‫همچنین‬ORDER BY‫دستور‬ ‫از‬PARTITION BY .‫نمود‬ ‫استفاده‬ ‫از‬ ‫بعد‬ ‫های‬ ‫فیلد‬ ‫اساس‬ ‫بر‬ ‫ها‬ ‫داده‬ ‫تا‬ ‫شود‬ ‫می‬ ‫باعث‬ ‫تابع‬ ‫این‬ ‫در‬ ‫کلید‬ ‫این‬PARTITION BY‫بندی‬ ‫گروه‬ ‫مقدار‬ ‫از‬ ‫گروه‬ ‫هر‬ ‫ازای‬ ‫به‬ ‫و‬ ‫شوند‬1.‫نماید‬ ‫دادن‬ ‫شماره‬ ‫به‬ ‫شروع‬ ‫اساس‬ ‫بر‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫فیلد‬recovery_model_desc‫شماره‬ ‫و‬ ‫بندی‬ ‫گروه‬ ‫ها‬ ‫دیتا‬ ‫نام‬ : ‫شود‬ ‫می‬ ‫گذاری‬ SELECT ROW_NUMBER() OVER(PARTITION BY recovery_model_desc ORDER BY NAME ASC) AS RowNumber, NAME, recovery_model_desc FROM sys.databases
  • 67. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 67 | Saba Creative Company RANK ‫این‬‫تابع‬‫امتیازی‬‫از‬1‫تا‬‫الی‬‫آخر‬‫به‬‫هر‬‫سطر‬‫از‬‫خروجی‬‫دستور‬SELECT‫ما‬‫می‬‫دهد‬.‫اگر‬‫دو‬‫سطر‬‫دارای‬ ‫مقادیر‬‫برابر‬‫باشند‬‫در‬‫این‬‫صورت‬‫مقدار‬‫تابع‬Rank‫برای‬‫هر‬‫دو‬‫سطر‬‫برابر‬‫خواهد‬‫بود‬.‫به‬‫مثال‬‫زیر‬‫توجه‬ :‫فرمایید‬ SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, RANK() OVER(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS RANK FROM Production.ProductInventory AS i INNER JOIN Production.Product AS p ON i.ProductID = p.ProductID WHERE i.LocationID BETWEEN 3 AND 4 ORDER BY i.LocationID
  • 68. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 68 | Saba Creative Company ‫همان‬‫طور‬‫که‬‫در‬‫خروجی‬‫مشاهده‬‫کرد‬ ‫خواهید‬‫بر‬‫اساس‬‫فیلد‬LocationID‫مقداری‬‫به‬‫عنوان‬Rank ‫اختصاص‬‫داده‬‫شده‬‫است‬.‫همچنین‬‫برای‬‫مقادیر‬‫یکسان‬Rank‫های‬‫برابر‬‫تخصیص‬‫داده‬‫شده‬‫است‬. DENSE_RANK ‫عملکرد‬‫این‬‫تابع‬‫دقیقا‬‫همانند‬‫تابع‬RANK()‫می‬،‫باشد‬‫با‬‫این‬‫تفاوت‬‫که‬‫مقادیر‬‫مربوط‬‫به‬‫ستون‬ DENSE_RANK()‫به‬‫صورت‬‫مرتب‬‫به‬‫سطرها‬‫اختصاص‬‫داده‬‫می‬‫شود‬.‫به‬‫مثال‬‫زیر‬: ‫نمایید‬ ‫توجه‬ SELECT i.ProductID, p.Name, i.LocationID, i.Quantity, DENSE_RANK() OVER(PARTITION BY i.LocationID ORDER BY i.Quantity DESC) AS RANK FROM Production.ProductInventory AS i INNER JOIN Production.Product AS p
  • 69. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 69 | Saba Creative Company ON i.ProductID = p.ProductID WHERE i.LocationID BETWEEN 3 AND 4 ORDER BY i.LocationID NTILE ‫این‬‫تابع‬‫برای‬‫دسته‬‫بندی‬‫کردن‬‫اطالعات‬‫استفاده‬‫می‬‫شود‬.‫تعداد‬‫دسته‬‫ها‬‫به‬‫صورت‬‫یک‬‫پارامتر‬‫به‬ ‫این‬‫تابع‬‫داده‬‫می‬‫شود‬.‫به‬ ‫اطالعات‬ ‫زیر‬ ‫دستور‬ ‫در‬ ‫مثال‬ ‫عنوان‬ ‫به‬‫چهار‬‫و‬ ‫شوند‬ ‫می‬ ‫بندی‬ ‫تقسیم‬ ‫دسته‬ : ‫بینید‬ ‫می‬ ‫آن‬ ‫کنار‬ ‫در‬ ‫را‬ ‫دسته‬ ‫شماره‬ SELECT p.FirstName, p.LastName, NTILE(4) OVER(ORDER BY SalesYTD DESC) AS Quartile, s.SalesYTD,
  • 70. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 70 | Saba Creative Company a.PostalCode FROM Sales.SalesPerson AS s INNER JOIN Person.Person AS p ON s.BusinessEntityID = p.BusinessEntityID INNER JOIN Person.Address AS a ON a.AddressID = p.BusinessEntityID WHERE TerritoryID IS NOT NULL AND SalesYTD <> 0 ‫در‬‫این‬‫تقسیم‬‫بندی‬‫دسته‬‫های‬‫با‬‫تعداد‬‫سطر‬‫بزرگتر‬‫در‬‫ابتدای‬‫خروجی‬‫نمایش‬‫داده‬‫می‬‫شود‬.
  • 71. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 71 | Saba Creative Company ‫دستورات‬Paging OFFSET ‫در‬‫خیلی‬‫مواقع‬‫مالحظه‬‫میشود‬‫که‬‫برای‬‫نمایش‬‫تعدادی‬‫از‬‫رکوردهای‬‫یک‬‫جدول‬‫در‬‫پایگاه‬،‫داده‬‫کل‬ ‫مقادیر‬‫موجود‬‫درآن‬‫توسط‬‫یک‬‫دستور‬select‫به‬‫دست‬‫می‬‫آید‬‫و‬‫صفحه‬‫بندی‬،‫خروجی‬‫به‬‫کنترلهای‬‫موجود‬ ‫سپرده‬‫میشود‬.‫اگر‬‫پایگاه‬‫داده‬‫ما‬‫دارای‬‫تعداد‬‫زیادی‬‫رکورد‬،‫باشد‬‫آن‬‫موقع‬‫است‬‫که‬‫دچار‬‫مشکل‬ ‫می‬‫شویم‬.‫فرض‬‫کنید‬‫به‬‫طور‬‫همزمان‬5‫نفر‬(‫که‬‫تعداد‬‫زیادی‬‫نیستند‬)‫از‬‫برنامه‬‫ما‬‫که‬‫شامل‬100000 ‫سطر‬‫داده‬‫میباشد‬‫استفاده‬‫کنند‬‫و‬‫در‬‫هر‬،‫صفحه‬10‫رکورد‬‫نمایش‬‫داده‬‫شود‬‫و‬‫صفحه‬‫بندی‬‫ما‬‫از‬‫نوع‬ ‫معقولی‬‫نباشد‬.‫در‬‫این‬‫صورت‬‫به‬‫جای‬‫اینکه‬‫با‬5×10‫رکورد‬‫داده‬‫را‬‫بارگزاری‬،‫کنیم‬5×100000‫رکورد‬ ‫یعنی‬500000‫رکورد‬‫را‬‫برای‬‫به‬‫دست‬‫آوردن‬50‫رکورد‬‫بارگزاری‬‫میکنیم‬.‫در‬‫زیر‬‫روشی‬‫شرح‬‫داده‬‫میشود‬ ‫که‬‫توسط‬،‫آن‬‫این‬‫سربار‬‫اضافه‬‫از‬‫روی‬‫برنامه‬‫و‬‫سرورهای‬‫مربوطه‬‫حذف‬‫شود‬. ‫از‬ ‫قبل‬ ‫تا‬SQL 2012:‫نمودیم‬ ‫می‬ ‫استفاده‬ ‫زیر‬ ‫همانند‬ ‫دستوراتی‬ ‫از‬ ‫باید‬ ‫بندی‬ ‫صفحه‬ ‫این‬ ‫انجام‬ ‫برای‬ DECLARE @PageSize INT, @Page INT SELECT @PageSize = 25, @Page = 2;WITH PageNumbers AS( SELECT c.FirstName, c.LastName, ROW_NUMBER() OVER(ORDER BY FirstName) ID FROM [Person].[Person] c ) SELECT * FROM PageNumbers WHERE ID BETWEEN ((@Page - 1) * @PageSize + 1) AND (@Page * @PageSize)
  • 72. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 72 | Saba Creative Company ‫شامل‬ ‫را‬ ‫صفحه‬ ‫هر‬ ‫دستور‬ ‫این‬25‫می‬ ‫نمایش‬ ‫را‬ ‫دوم‬ ‫صفحه‬ ‫در‬ ‫موجود‬ ‫اطالعات‬ ‫و‬ ‫دهد‬ ‫می‬ ‫قرار‬ ‫رکورد‬ .‫دهد‬ ‫دستور‬ ‫کمک‬ ‫با‬ ‫کار‬ ‫این‬ ‫اما‬OFFSET‫مشاهده‬ ‫را‬ ‫زیر‬ ‫دستور‬ ‫نکته‬ ‫این‬ ‫برای‬ .‫است‬ ‫انجام‬ ‫قابل‬ ‫راحتی‬ ‫به‬ : ‫نمایید‬ SELECT e.FirstName, [e].LastName FROM [Person].[Person] AS [e] ORDER BY e.FirstName OFFSET 0 ROWS FETCH NEXT 25 ROWS ONLY;
  • 73. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 73 | Saba Creative Company ،‫اول‬ ‫رکورد‬ ‫از‬ ‫دستور‬ ‫این‬25.‫دهد‬ ‫می‬ ‫نمایش‬ ‫و‬ ‫انتخاب‬ ‫را‬ ‫اول‬ ‫رکورد‬ SELECT e.FirstName, [e].LastName FROM [Person].[Person] AS [e] ORDER BY e.FirstName OFFSET 25 ROWS FETCH NEXT 25 ROWS ONLY;
  • 74. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 74 | Saba Creative Company ‫رکورد‬ ‫از‬ ‫دستور‬ ‫این‬25‫و‬ ‫شروع‬ ،25.‫دهد‬ ‫می‬ ‫نمایش‬ ‫را‬ ‫آن‬ ‫از‬ ‫پس‬ ‫رکورد‬ PIVOT Pivot table‫ها‬‫در‬‫واقع‬‫همانند‬‫سایر‬Table‫های‬‫دیگر‬‫می‬‫باشند‬‫فقط‬‫با‬‫این‬‫تفاوت‬‫که‬‫در‬‫نمایش‬ ‫ردیف‬‫و‬‫ستون‬‫های‬‫آنها‬‫مقداری‬‫تفاوت‬‫وجود‬‫دارد‬. ‫دستور‬pivot‫جزو‬‫دستوراتی‬‫از‬Sql server‫می‬‫باشد‬‫که‬‫ممکن‬‫است‬‫در‬‫بیشتر‬‫پروژه‬‫هایمان‬‫برای‬ ‫نمایش‬‫گزارشات‬‫مختلف‬‫به‬‫استفاده‬‫از‬‫آن‬‫نیاز‬‫داشته‬‫باشیم‬.‫کاربرد‬‫دستور‬pivot‫تقریبا‬‫تبدیل‬ ‫نمایش‬‫خروجی‬‫یک‬‫کوئری‬‫از‬‫حالت‬‫ردیفی‬‫به‬‫ستونی‬‫می‬‫باشد‬.‫به‬‫صورت‬‫خیلی‬‫خالصه‬‫بخواهیم‬‫نحوه‬ ‫کارکرد‬‫این‬‫دستور‬‫را‬‫بیان‬‫کنیم‬،‫کار‬‫آن‬‫یک‬‫چرخش‬90‫درجه‬‫جداول‬‫می‬‫باشد‬،‫یعنی‬‫جای‬‫ستون‬‫و‬ ‫ردیف‬‫ها‬‫را‬‫با‬‫هم‬‫جابه‬‫جا‬‫کنیم‬. ‫با‬‫یک‬‫مثال‬‫بهتر‬‫متوجه‬‫کارکرد‬‫این‬‫دستور‬‫خواهید‬‫شد‬.‫خواهیم‬ ‫می‬ ‫مثال‬ ‫برای‬‫یک‬ ‫با‬ ‫را‬ ‫اطالعاتی‬ ‫ابتدا‬ : ‫بدهیم‬ ‫نمایش‬ ‫ردیف‬ SELECT 'AverageCost' AS Cost_Sorted_By_Production_Days, [0],
  • 75. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 75 | Saba Creative Company [1], [2], [3], [4] FROM ( SELECT DaysToManufacture, StandardCost FROM Production.Product ) AS SourceTable PIVOT( AVG(StandardCost) FOR DaysToManufacture IN ([0], [1], [2], [3], [4]) ) AS PivotTable ‫بعد‬‫از‬‫نوشتن‬Pivot‫و‬‫داخل‬‫پرانتز‬‫مقابل‬‫آن‬‫خواهیم‬‫داشت‬: 1.‫یک‬aggregation function.
  • 76. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 76 | Saba Creative Company 2.‫نوشتن‬‫کلمه‬‫کلیدی‬For‫و‬‫تعیین‬‫نام‬‫فیلدی‬‫که‬‫قصد‬‫تبدیل‬‫آن‬‫به‬‫چنید‬‫ستون‬‫را‬‫خواهیم‬ ‫داشت‬. ‫همانطور‬‫که‬‫در‬syntax‫این‬‫دستور‬‫مالحضه‬‫می‬‫کنید‬،‫دستور‬pivot‫حتما‬‫باید‬‫داری‬‫یک‬ aggregation function‫باشد‬. ‫فیلد‬‫مقابل‬‫کلمه‬For‫با‬‫توجه‬‫به‬‫مقادیری‬‫که‬‫بر‬‫میگرداند‬‫هر‬‫کدام‬‫به‬‫ستون‬‫هایی‬‫مجزا‬‫تبدیل‬‫می‬ ‫شوند‬.‫مثال‬‫اگر‬‫در‬‫مقابل‬for‫اسم‬‫ستونی‬‫را‬‫داریم‬‫که‬‫محتوای‬‫آن‬‫فیلد‬‫دارای‬‫سه‬‫مقدار‬A,B,C‫می‬ ‫باشد‬،‫در‬‫نتیجه‬‫خروجی‬‫دستور‬‫شاهد‬‫سه‬‫ستون‬‫با‬‫عنوان‬‫های‬A,B,C‫خواهیم‬‫بود‬. : ‫فرمایید‬ ‫توجه‬ ‫زیر‬ ‫دستور‬ ‫به‬ ‫تر‬ ‫پیچیده‬ ‫مثالی‬ ‫عنوان‬ ‫به‬ SELECT VendorID, [250] AS Emp1, [251] AS Emp2, [256] AS Emp3, [257] AS Emp4, [260] AS Emp5 FROM ( SELECT PurchaseOrderID, EmployeeID, VendorID FROM Purchasing.PurchaseOrderHeader ) p PIVOT( COUNT(PurchaseOrderID) FOR EmployeeID IN ([250], [251], [256], [257], [260]) ) AS pvt ORDER BY pvt.VendorID
  • 77. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 77 | Saba Creative Company
  • 78. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 78 | Saba Creative Company Temp Table ‫تکنولوژی‬CTE‫از‬‫نسخه‬SQL Server 2005‫رسمیت‬‫یافته‬‫است‬‫و‬‫شامل‬‫یک‬result set‫موقتی‬ ‫است‬‫که‬‫دارای‬‫نام‬‫مشخص‬‫بوده‬‫و‬‫می‬­‫توان‬‫از‬‫آن‬‫در‬‫دستورات‬SELECT, INSERT, UPDATE, DELETE‫استفاده‬‫کرد‬.‫همچنین‬‫از‬CTE‫می‬‫توان‬‫در‬‫دستور‬CREATE VIEW‫و‬‫دستور‬SELECT‫مربوط‬ ‫به‬‫آن‬‫استفاده‬‫کرد‬.‫در‬‫نسخه‬SQL Server 2008‫نیز‬‫امکان‬‫استفاده‬‫از‬CTE‫در‬‫دستور‬MERGE‫فراهم‬ ‫شده‬‫است‬. ‫در‬SQL Server‫از‬‫دو‬‫نوع‬CTE‫بازگشتی‬‫و‬‫غیر‬‫بازگشتی‬‫پشتیبانی‬‫می‬‫شود‬. ‫انواع‬‫روش‬‫های‬‫ایجاد‬‫جداول‬‫موقت‬ ‫برای‬‫استفاده‬‫از‬‫جداول‬‫موقتی‬‫در‬‫سرور‬SQL،‫سه‬‫راه‬‫زیر‬‫وجود‬‫دارد‬. #TempTable ‫روش‬‫اول‬:‫استفاده‬‫از‬‫دستوری‬‫مانند‬‫زیر‬‫است‬‫که‬‫سبب‬‫ایجاد‬‫جدول‬‫موقتی‬‫در‬‫بانک‬‫سیستمی‬ tempdb‫می‬‫شود‬.‫زمانی‬‫که‬‫شما‬‫ارتباط‬‫خود‬‫را‬‫با‬‫سرور‬SQL‫قطع‬‫می‬‫کنید‬‫به‬‫صورت‬‫اتوماتیک‬ ‫جداول‬‫موقت‬‫شما‬‫از‬‫بانک‬tempdb‫حذف‬‫می‬‫شوند‬.‫این‬‫روش‬‫در‬‫برنامه‬‫نویسی‬‫پیشنهاد‬‫نمی‬‫شود‬ ‫و‬‫فقط‬‫در‬‫کارهای‬‫موقتی‬‫و‬‫آزمایشی‬‫مناسب‬‫است‬. SELECT * INTO #Temptable FROM [Production].[Product] UPDATE #Temptable SET ListPrice = ListPrice + 100 SELECT * FROM #Temptable
  • 79. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 79 | Saba Creative Company @TempTable ‫روش‬‫دوم‬:‫استفاده‬‫از‬‫متغیر‬‫نوع‬Table،‫است‬‫که‬‫نمونه‬‫آن‬‫در‬‫مثال‬‫زیر‬‫دیده‬‫می‬‫شود‬.‫زمانیکه‬‫از‬ ‫محدوده‬‫جاری‬‫کد‬‫خودتان‬‫خارج‬‫شوید‬‫آن‬‫متغیر‬‫نیز‬‫از‬‫حافظه‬‫پاک‬‫میشود‬.‫از‬‫این‬،‫روش‬‫عموما‬‫در‬ ‫کدهای‬Stored Procedure‫ها‬‫و‬UserDefined Function‫ها‬‫استفاده‬‫می‬‫شود‬. DECLARE @tempTable TABLE ( [ProductID] [int] NOT NULL, [ProductName] [nvarchar](40) NOT NULL, [ListPrice] [money] NULL ) INSERT INTO @tempTable SELECT ProductID, NAME, ListPrice FROM [Production].[Product] UPDATE @temptable SET [ListPrice] = [ListPrice] + 10 SELECT * FROM @tempTable
  • 80. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 80 | Saba Creative Company CTE ‫روش‬‫سوم‬:‫استفاده‬‫از‬CTE‫است‬‫که‬‫مزیت‬‫هایی‬‫نسبت‬‫به‬‫دو‬‫روش‬‫قبلی‬‫دارد‬‫و‬‫در‬‫بخش‬‫بعدی‬‫به‬ ‫نحوه‬‫تعریف‬‫و‬‫استفاده‬‫از‬‫آن‬‫خواهیم‬‫پرداخت‬. ‫کار‬‫با‬CTE ‫ساده‬‫ترین‬‫شکل‬‫تعریف‬‫یک‬CTE‫به‬‫صورت‬‫زیر‬‫است‬: WITH yourName [(Column1, Column2, ...)] AS ( your query
  • 81. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 81 | Saba Creative Company ) ‫با‬‫کلمه‬WITH‫شروع‬‫شده‬‫و‬‫یک‬‫نام‬‫اختیاری‬‫به‬‫آن‬‫داده‬‫می‬‫شود‬.‫سپس‬‫فهرست‬‫فیلدهای‬‫جدول‬ ‫موقت‬‫را‬‫درون‬‫زوج‬،‫پرانتز‬‫مشخص‬‫می‬‫کنید‬.‫تعریف‬‫این‬‫فیلدها‬‫اختیاری‬‫است‬‫و‬‫اگر‬‫حذف‬،‫شود‬ ‫فیلدهای‬‫جدول‬،‫موقت‬‫مانند‬‫فیلدهای‬‫کوئری‬‫مربوطه‬‫خواهد‬‫بود‬. your query‫شامل‬‫دستوری‬‫است‬‫که‬‫سبب‬‫تولید‬‫یک‬result set‫می‬‫شود‬.‫قواعد‬‫تعریف‬‫این‬‫کوئری‬ ‫مشابه‬‫قواعد‬‫تعریف‬‫کوئری‬‫است‬‫که‬‫در‬‫دستور‬CREATE VIEW‫کاربرد‬‫دارد‬.
  • 82. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 82 | Saba Creative Company ‫شکل‬‫کلی‬‫دستور‬ ‫همانطور‬‫که‬‫از‬‫این‬‫تصویر‬‫مشخص‬‫است‬‫می‬‫توان‬‫چندین‬‫بلوک‬‫از‬‫این‬‫ساختار‬‫را‬‫به‬‫دنبال‬‫هم‬‫تعریف‬ ‫نمود‬‫که‬‫با‬‫کاما‬‫از‬‫هم‬‫جدا‬‫می‬‫شوند‬.‫در‬‫واقع‬‫یکی‬‫از‬‫کاربردهای‬CTE‫ایجاد‬‫قطعات‬‫کوچکی‬‫است‬‫که‬ ‫امکان‬‫استفاده‬‫مجدد‬‫را‬‫به‬‫شما‬‫داده‬‫و‬‫می‬‫تواند‬‫سبب‬‫خواناتر‬‫شدن‬‫کدهای‬‫پیچیده‬‫شود‬. ‫یکی‬‫دیگر‬‫از‬‫کاربردهای‬CTE‫آنجایی‬‫است‬‫که‬‫شما‬‫نمی‬‫خواهید‬‫یک‬‫شی‬View‫ی‬‫عمومی‬‫تعریف‬‫کنید‬ ‫و‬‫در‬‫عین‬‫حال‬‫می‬‫خواهید‬‫از‬‫مزایای‬View‫ها‬‫بهرمند‬‫شوید‬. ‫و‬‫همچنین‬‫از‬‫کاربردهای‬‫دیگر‬CTE‫تعریف‬‫جدول‬‫موقت‬‫و‬‫استفاده‬‫از‬‫آن‬‫جدول‬‫به‬‫صورت‬‫همزمان‬‫در‬ ‫یک‬‫دستور‬‫است‬. ‫بعد‬‫از‬‫آنکه‬CTE‫یا‬CTE‫های‬‫خودتان‬‫را‬‫تعریف‬‫کردید‬‫آنگاه‬‫می‬‫توانید‬‫مانند‬‫جداول‬‫معمولی‬‫از‬‫آنها‬ ‫استفاده‬‫کنید‬.‫استفاده‬‫از‬‫این‬‫جداول‬‫توسط‬‫دستوری‬‫خواهد‬‫بود‬‫که‬‫دقیقا‬‫بعد‬‫از‬‫تعریف‬CTE‫نوشته‬ ‫می‬‫شود‬. ‫ایجاد‬‫یک‬CTE‫غیر‬‫بازگشتی‬ ‫مثال‬،‫اول‬‫یک‬CTE‫غیر‬‫بازگشتی‬‫ساده‬‫را‬‫نشان‬‫میدهد‬. WITH CTE_temp AS ( SELECT NAME, ProductNumber, ListPrice FROM [Production].[Product] ) SELECT * FROM CTE_temp ORDER BY ListPrice DESC
  • 83. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 83 | Saba Creative Company ‫مثال‬‫دوم‬‫نمونه‬‫ای‬‫دیگر‬‫از‬‫یک‬CTE‫غیر‬‫بازگشتی‬‫است‬. WITH orderSales(OrderID, Total) AS ( SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS Total FROM [Sales].[SalesOrderDetail] GROUP BY SalesOrderID ) SELECT O.SalesPersonID, SUM(OS.Total) AS TotalSales FROM [Sales].[SalesOrderHeader] AS O INNER JOIN [orderSales] AS OS
  • 84. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 84 | Saba Creative Company ON O.SalesOrderID = OS.[OrderID] GROUP BY O.SalesPersonID ORDER BY TotalSales DESC ‫هدف‬‫این‬،‫کوئری‬‫محاسبه‬‫کل‬‫میزان‬‫فروش‬،‫کاالها‬‫به‬‫ازای‬‫هر‬‫فروش‬ ‫پرسنل‬‫می‬‫باشد‬.‫ابتدا‬‫از‬‫جدول‬ SalesOrderDetail‫مجموع‬‫فروش‬‫هر‬‫سفارش‬‫محاسبه‬‫شده‬‫و‬‫نتیجه‬‫آن‬‫در‬‫یک‬CTE‫به‬‫نام‬ orderSales‫قرار‬‫می‬‫گیرد‬‫و‬‫از‬JOIN‫این‬‫جدول‬‫موقت‬‫با‬‫جدول‬SalesOrderHeader‫محاسبه‬ ‫نهایی‬‫انجام‬‫شده‬‫و‬‫نتیجه‬‫ای‬‫مانند‬‫این‬‫تصویر‬‫حاصل‬‫می‬‫شود‬. ‫مثال‬‫سوم‬‫استفاده‬‫از‬‫دو‬CTE‫را‬‫به‬‫صورت‬‫همزمان‬‫نشان‬‫می‬‫دهد‬:
  • 85. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 85 | Saba Creative Company WITH CustomerList AS ( SELECT CustomerID, AccountNumber FROM [Sales].[Customer] ) ,OrderList AS ( SELECT CustomerID, OrderDate FROM [Sales].[SalesOrderHeader] WHERE YEAR([OrderDate]) > 2000 ) SELECT cl.AccountNumber, YEAR(ol.OrderDate) AS SalesYear FROM customerList AS cl JOIN orderList AS ol ON cl.[CustomerID] = ol.[CustomerID]
  • 86. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 86 | Saba Creative Company ‫مثال‬‫چهارم‬‫استفاده‬‫مجدد‬‫از‬‫یک‬CTE‫را‬‫نشان‬‫می‬‫دهد‬.‫فرض‬‫کنید‬‫جدولی‬‫به‬‫نام‬digits‫داریم‬‫که‬ ‫فقط‬‫یک‬‫فیلد‬digit‫دارد‬‫و‬‫دارای‬10‫رکورد‬‫با‬‫مقادیر‬0‫تا‬9‫است‬.‫مانند‬‫تصویر‬‫زیر‬
  • 87. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 87 | Saba Creative Company ‫حال‬‫می‬­‫خواهیم‬‫از‬‫طریق‬CROSS JOIN‫اعداد‬1‫تا‬100‫را‬‫با‬‫استفاده‬‫از‬‫مقادیر‬‫این‬‫جدول‬‫تولید‬‫کنیم‬. ‫کد‬‫زیر‬‫آنرا‬‫نشان‬‫می‬‫دهد‬: WITH digitList AS ( SELECT [digit] FROM [digits] ) SELECT a.[digit] * 10 + b.[digit] + 1 AS [Digit] FROM [digitList] AS a CROSS JOIN [digitList] AS b ‫در‬‫این‬‫کد‬‫یک‬CTE‫تعریف‬‫شده‬‫و‬‫دو‬‫بار‬‫مورد‬‫استفاده‬‫قرار‬‫گرفته‬‫است‬.‫مثال‬‫اگر‬‫بخواهید‬‫اعداد‬1‫تا‬ 1000‫را‬‫تولید‬‫کنید‬‫می‬‫توانید‬‫سه‬‫بار‬‫از‬‫آن‬‫استفاده‬‫کنید‬.‫حاصل‬‫این‬‫دستور‬result set‫ی‬‫مانند‬‫زیر‬ ‫است‬.
  • 88. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 88 | Saba Creative Company ‫حتی‬‫می‬‫توان‬‫از‬‫یک‬CTE‫در‬‫کوئری‬CTE‫بعدی‬‫مانند‬‫کد‬‫زیر‬‫استفاده‬‫کرد‬. WITH CTE_1 AS ( .... ), CTE_2 AS ( SELECT ... FROM CTE_1 JOIN ... ) SELECT * FROM FOO LEFT JOIN CTE_1 LEFT JOIN CTE_2 ‫ایجاد‬‫یک‬CTE‫بازگشتی‬ ‫از‬CTE‫بازگشتی‬‫برای‬‫پیمایش‬‫جداولی‬‫استفاده‬‫می‬‫شود‬‫که‬‫رکوردهای‬‫آن‬‫دارای‬‫رابطه‬‫سلسله‬‫مراتبی‬ ‫یا‬‫درختی‬‫است‬.‫نمونه‬‫این‬،‫جداول‬‫جدول‬‫کارمندان‬‫است‬‫که‬‫مدیر‬‫هر‬‫کارمند‬‫نیز‬‫مشخص‬‫شده‬‫است‬ ‫یا‬‫جدولی‬‫که‬‫ساختار‬‫سازمانی‬‫را‬‫نشان‬‫می‬‫دهد‬‫یا‬‫جدولی‬‫که‬‫موضوعات‬‫درختی‬‫را‬‫در‬‫خود‬‫ذخیره‬‫کرده‬ ‫است‬.‫یکی‬‫از‬‫مزایای‬‫استفاده‬‫از‬CTE،‫بازگشتی‬‫سرعت‬‫کار‬‫آن‬‫در‬‫مقایسه‬‫با‬‫روش‬‫های‬‫پردازشی‬‫دیگر‬ ‫است‬. ‫ساختار‬‫کلی‬‫یک‬‫دستور‬CTE‫بازگشتی‬‫به‬‫صورت‬‫زیر‬‫است‬. WITH cteName AS
  • 89. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 89 | Saba Creative Company ( query1 UNION ALL query2 ) ‫در‬‫بدنه‬CTE‫حداقل‬‫دو‬‫عضو‬(‫کوئری‬)‫وجود‬‫دارد‬‫که‬‫بایستی‬‫با‬‫یکی‬‫از‬‫عبارت‬‫های‬‫زیر‬‫به‬‫هم‬‫متصل‬ ‫شوند‬. UNION UNION ALL INTERSECT EXCEPT query1‫شامل‬‫دستوری‬‫است‬‫که‬‫اولین‬‫سری‬‫از‬‫رکوردهای‬result set‫نهایی‬‫را‬‫تولید‬‫می‬‫کند‬.‫اصطالحا‬ ‫به‬‫این‬‫کوئری‬anchor member‫می‬‫گویند‬. ‫بعد‬‫از‬‫دستور‬query1،‫حتما‬‫بایستی‬‫از‬UNION ALL‫و‬‫امثال‬‫آنها‬‫استفاده‬‫شود‬. ‫سپس‬query2‫ذکر‬‫می‬‫شود‬.‫اصطالحا‬‫به‬‫این‬‫کوئری‬recursive member‫گفته‬‫می‬‫شود‬.‫این‬‫کوئری‬ ‫شامل‬‫دستوری‬‫است‬‫که‬‫سطوح‬‫بعدی‬‫درخت‬‫را‬‫تولید‬‫خواهد‬‫کرد‬.‫این‬‫کوئری‬‫دارای‬‫شرایط‬‫زیر‬‫است‬. ‫حتما‬‫بایستی‬‫به‬CTE‫که‬‫همان‬cteName‫است‬‫اشاره‬‫کرده‬‫و‬‫در‬‫جایی‬‫از‬‫آن‬‫استفاده‬‫شده‬‫باشد‬.‫به‬ ‫عبارت‬‫دیگر‬‫از‬‫رکوردهای‬‫موجود‬‫در‬‫جدول‬‫موقت‬‫استفاده‬‫کند‬‫تا‬‫بتواند‬‫رکوردهای‬‫بعدی‬‫را‬‫تشخیص‬ ‫دهد‬. ‫حتما‬‫بایستی‬‫مطمئن‬‫شوید‬‫که‬‫شرایط‬‫کافی‬‫برای‬‫پایان‬‫حلقه‬‫پیمایش‬‫رکوردها‬‫را‬‫داشته‬‫باشد‬‫در‬‫غیر‬ ‫این‬‫صورت‬‫سبب‬‫تولید‬‫حلقه‬‫بی‬‫پایان‬‫خواهد‬‫شد‬. ‫بدنه‬CTE‫می‬‫تواند‬‫حاوی‬‫چندین‬anchor member‫و‬‫چندین‬recursive member‫باشد‬‫ولی‬‫فقط‬ recursive member‫ها‬‫هستند‬‫که‬‫به‬CTE‫اشاره‬‫می‬‫کنند‬. ‫برای‬‫آنکه‬‫نکات‬‫فوق‬‫روشن‬‫شود‬‫به‬‫مثال‬‫های‬‫زیر‬‫توجه‬‫کنید‬. ‫فرض‬‫کنید‬‫جدولی‬‫از‬‫کارمندان‬‫و‬‫مدیران‬‫آنها‬‫داریم‬‫که‬‫به‬‫صورت‬‫زیر‬‫تعریف‬‫و‬‫مقداردهی‬‫اولیه‬‫شده‬ ‫است‬. IF OBJECT_ID('Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees
  • 90. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 90 | Saba Creative Company GO CREATE TABLE dbo.Employees ( EmployeeID INT NOT NULL PRIMARY KEY, FirstName VARCHAR(50)NOT NULL, LastName VARCHAR(50)NOT NULL, ManagerID INT NULL ) GO INSERT INTO Employees VALUES ( 101, 'Alireza', 'Nematollahi', NULL ) INSERT INTO Employees VALUES ( 102, 'Ahmad', 'Mofarrahzadeh', 101 ) INSERT INTO Employees VALUES ( 103, 'Mohammad', 'BozorgGhommi', 102 ) INSERT INTO Employees VALUES
  • 91. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 91 | Saba Creative Company ( 104, 'Masoud', 'Narimani', 103 ) INSERT INTO Employees VALUES ( 105, 'Mohsen', 'Hashemi', 103 ) INSERT INTO Employees VALUES ( 106, 'Aref', 'Partovi', 102 ) INSERT INTO Employees VALUES ( 107, 'Hosain', 'Mahmoudi', 106 ) INSERT INTO Employees VALUES ( 108, 'Naser', 'Pourali', 106 ) INSERT INTO Employees
  • 92. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 92 | Saba Creative Company VALUES ( 109, 'Reza', 'Bagheri', 102 ) INSERT INTO Employees VALUES ( 110, 'Abbas', 'Najafian', 102 ) ‫مثال‬‫اول‬:‫می‬‫خواهیم‬‫فهرست‬‫کارمندان‬‫را‬‫به‬‫همراه‬‫نام‬‫مدیر‬‫آنها‬‫و‬‫شماره‬‫سطح‬‫درخت‬‫نمایش‬ ‫دهیم‬.‫کوئری‬‫زیر‬‫نمونه‬‫ای‬‫از‬‫یک‬‫کوئری‬‫بر‬‫اساس‬CTE‫بازگشتی‬‫می‬‫باشد‬. WITH cteReports(EmpID, FirstName, LastName, MgrID, EmpLevel) AS ( SELECT EmployeeID, FirstName, LastName, ManagerID, 1 FROM Employees WHERE ManagerID IS NULL UNION ALL SELECT e.EmployeeID, e.FirstName, e.LastName, e.ManagerID, r.EmpLevel + 1 FROM Employees e INNER JOIN cteReports r ON e.ManagerID = r.EmpID
  • 93. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 93 | Saba Creative Company ) SELECT FirstName + ' ' + LastName AS FullName, EmpLevel, ( SELECT FirstName + ' ' + LastName FROM Employees WHERE EmployeeID = cteReports.MgrID ) AS Manager FROM cteReports ORDERBY EmpLevel, MgrID ‫کوئری‬‫اول‬‫در‬‫بدنه‬CTE‫رکورد‬‫مدیری‬‫را‬‫می‬‫دهد‬‫که‬‫ریشه‬‫درخت‬‫بوده‬‫و‬‫باالسری‬‫ندارد‬‫و‬‫شماره‬‫سطح‬ ‫این‬‫رکورد‬‫را‬1‫در‬‫نظر‬‫می‬‫گیرد‬. ‫کوئری‬‫دوم‬‫در‬‫بدنه‬CTE‫از‬‫یک‬JOIN‫بین‬Employees‫و‬cteReports‫استفاده‬‫کرده‬‫و‬‫کارمندان‬‫زیر‬ ‫دست‬‫هر‬‫کارمند‬‫قبلی‬(‫فرزندان‬)‫را‬‫بدست‬‫آورده‬‫و‬‫مقدار‬‫شماره‬‫سطح‬‫آنرا‬‫به‬‫صورت‬Level+1‫تنظیم‬ ‫می‬‫کند‬. ‫در‬‫نهایت‬‫با‬‫استفاده‬‫از‬CTE‫و‬‫یک‬subquery‫جهت‬‫بدست‬‫آوردن‬‫نام‬‫مدیر‬‫هر‬،‫کارمند‬‫نتیجه‬‫نهایی‬ ‫تولید‬‫می‬‫شود‬. ‫مثال‬‫دوم‬:‫می‬‫خواهیم‬‫شناسه‬‫یک‬‫کارمند‬‫را‬‫بدهیم‬‫و‬‫نام‬‫او‬‫و‬‫نام‬‫مدیران‬‫وی‬‫را‬‫به‬‫عنوان‬‫جواب‬‫در‬ ‫خروجی‬‫بگیریم‬. WITH cteReports(EmpID, FirstName, LastName, MgrID, EmpLevel) AS ( SELECT EmployeeID, FirstName, LastName, ManagerID, 1 FROM Employees WHERE EmployeeID = 110 UNION ALL SELECT e.EmployeeID, e.FirstName, e.LastName,
  • 94. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 94 | Saba Creative Company e.ManagerID, r.EmpLevel + 1 FROM Employees e INNER JOIN cteReports r ON e.EmployeeID = r.MgrID ) SELECT FirstName + ' ' + LastName AS FullName, EmpLevel FROM cteReports ORDERBY EmpLevel ‫اگر‬‫دقت‬‫کنید‬‫اولین‬‫تفاوت‬‫در‬‫خط‬‫اول‬‫مشاهده‬‫می‬‫شود‬.‫در‬‫اینجا‬‫مشخص‬‫می‬‫کند‬‫که‬‫اولین‬‫سری‬‫از‬ ‫رکوردها‬‫چگونه‬‫انتخاب‬‫شود‬.‫مثال‬‫کارمندی‬‫را‬‫می‬‫خواهیم‬‫که‬‫شناسه‬‫آن‬110‫باشد‬. ‫دومین‬‫تفاوت‬‫اصلی‬‫این‬‫کوئری‬‫با‬‫مثال‬،‫قبلی‬‫در‬‫قسمت‬‫دوم‬‫دیده‬‫می‬‫شود‬.‫شما‬‫می‬‫خواهید‬‫مدیر‬ (‫پدر‬)‫کارمندی‬‫که‬‫در‬‫آخرین‬‫پردازش‬‫در‬‫جدول‬‫موقت‬‫قرار‬‫گرفته‬‫است‬‫را‬‫استخراج‬‫کنید‬.
  • 95. ‫کاربردی‬ ‫آموزش‬ ‫مرجع‬SQL‫کارشناسان‬ ‫برای‬ Saba Creative Company 95 | Saba Creative Company