[h=2]دستورات پيشرفته SQL[/h] دستور Alter : از دستور Alter برای اضافه کردن يا حذف کامل يک ستون از يک جدول موجود در پايگاه داده استفاده می شود . [HR][/HR] 1 ) اضافه کردن يک ستون : برای اضافه کردن يک ستون ( فيلد ) جديد به يک جدول موجود از دستور کلی زير استفاده می شود : Alter Table نام جدول Add نوع داده ستون نام ستون مثال : اضافه کردن يک ستون جديد به نام Age به جدول Students : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 6"] Student Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] جدول Students قبل از اجرای دستور[/TD] [/TR] [TR] [TD="class: body"] Alter Table Students Add Age Int ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 7"] Student Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [TD="class: header"] Age[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] جدول Students پس از اجرای دستور[/TD] [/TR] [/TABLE] [HR][/HR] 2 ) حذف ستون : برای حذف يک ستون از يک جدول موجود به روش زير عمل می شود : Alter Table نام جدول Drop COLUMN نام ستون مثال : حذف فيلد Age از جدول Students : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 7"] Student Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [TD="class: header"] Age[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] جدول Students قبل از اجرای دستور[/TD] [/TR] [TR] [TD="class: body"] Alter Table Students Drop COLUMN Age ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 6"] Student Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] جدول Students پس از اجرای دستور[/TD] [/TR] [/TABLE]
پاسخ : توابع درون ساخته SQL [h=2]توابع درون ساخته SQL[/h] 1 ) تابع Avg : تابع Avg برای محاسبه ميانگين اعداد موجود در يک فيلد به کار می رود . اين تابع اعداد را با هم جمع کرده و آنها را به طور اتوماتيک بر تعدادشان تقسیم می کند و نتيجه را به عنوان خروجی بر می گرداند . نکته : اين تابع بايد با فيلدهايی که داده آنها از نوع عددی است ، به کار رود . توجه : در تمام مثال های اين صفحه از داده های جداول زير استفاده می شود : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 6"] Student Table [/TD] [/TR] [TR] [TD="class: header"] Student ID [/TD] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [TD="class: header"] Major [/TD] [TD="class: header"] City [/TD] [TD="class: header"] Grade [/TD] [/TR] [TR] [TD="class: body"] 41252214 [/TD] [TD="class: body"] Ahmad [/TD] [TD="class: body"] Rezaee [/TD] [TD="class: body"] Hard Ware [/TD] [TD="class: body"] Tehran [/TD] [TD="class: body"] 18 [/TD] [/TR] [TR] [TD="class: body"] 10724113 [/TD] [TD="class: body"] Ehsan [/TD] [TD="class: body"] Amiri [/TD] [TD="class: body"] Soft Ware [/TD] [TD="class: body"] Karaj [/TD] [TD="class: body"] 14 [/TD] [/TR] [TR] [TD="class: body"] 10254861 [/TD] [TD="class: body"] Zahra [/TD] [TD="class: body"] Hosini [/TD] [TD="class: body"] Hard Ware [/TD] [TD="class: body"] Tehran [/TD] [TD="class: body"] 17 [/TD] [/TR] [TR] [TD="class: body"] 27365187 [/TD] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi [/TD] [TD="class: body"] Soft Ware [/TD] [TD="class: body"] Bam [/TD] [TD="class: body"] 16 [/TD] [/TR] [TR] [TD="class: body"] 35654415 [/TD] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [TD="class: body"] Soft Ware [/TD] [TD="class: body"] Tehran [/TD] [TD="class: body"] 19 [/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 4"] Courses Table [/TD] [/TR] [TR] [TD="class: header"] Course ID [/TD] [TD="class: header"] Co Title [/TD] [TD="class: header"] Credit [/TD] [TD="class: header"] Co Type [/TD] [/TR] [TR] [TD="class: body"] 1011 [/TD] [TD="class: body"] پايگاه داده [/TD] [TD="class: body"] 3 [/TD] [TD="class: body"] عملی [/TD] [/TR] [TR] [TD="class: body"] 1012 [/TD] [TD="class: body"] مباحث ويژه [/TD] [TD="class: body"] 3 [/TD] [TD="class: body"] عملی [/TD] [/TR] [TR] [TD="class: body"] 1013 [/TD] [TD="class: body"] زبان تخصصی [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] نطری [/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 5"] Selection Table [/TD] [/TR] [TR] [TD="class: header"] Student ID [/TD] [TD="class: header"] Course ID [/TD] [TD="class: header"] Term [/TD] [TD="class: header"] Year [/TD] [TD="class: header"] Grade [/TD] [/TR] [TR] [TD="class: body"] 41252214 [/TD] [TD="class: body"] 1011 [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] 85 - 86 [/TD] [TD="class: body"] 16 [/TD] [/TR] [TR] [TD="class: body"] 10724113 [/TD] [TD="class: body"] 1011 [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] 85 - 86 [/TD] [TD="class: body"] 14 [/TD] [/TR] [TR] [TD="class: body"] 41252214 [/TD] [TD="class: body"] 1012 [/TD] [TD="class: body"] 1 [/TD] [TD="class: body"] 85 - 86 [/TD] [TD="class: body"] 17 [/TD] [/TR] [TR] [TD="class: body"] 10724113 [/TD] [TD="class: body"] 1012 [/TD] [TD="class: body"] 1 [/TD] [TD="class: body"] 85 - 86 [/TD] [TD="class: body"] 11 [/TD] [/TR] [TR] [TD="class: body"] 10254861 [/TD] [TD="class: body"] 1013 [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] 85 - 86 [/TD] [TD="class: body"] 13 [/TD] [/TR] [TR] [TD="class: body"] 10254861 [/TD] [TD="class: body"] 1011 [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] 84 - 85 [/TD] [TD="class: body"] 8 [/TD] [/TR] [TR] [TD="class: body"] 27365187 [/TD] [TD="class: body"] 1012 [/TD] [TD="class: body"] 1 [/TD] [TD="class: body"] 84 - 85 [/TD] [TD="class: body"] 19 [/TD] [/TR] [TR] [TD="class: body"] 27365187 [/TD] [TD="class: body"] 1013 [/TD] [TD="class: body"] 1 [/TD] [TD="class: body"] 84 - 85 [/TD] [TD="class: body"] 16 [/TD] [/TR] [TR] [TD="class: body"] 35654415 [/TD] [TD="class: body"] 1011 [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] 84 - 85 [/TD] [TD="class: body"] 9 [/TD] [/TR] [TR] [TD="class: body"] 35654415 [/TD] [TD="class: body"] 1013 [/TD] [TD="class: body"] 2 [/TD] [TD="class: body"] 84 - 85 [/TD] [TD="class: body"] 17 [/TD] [/TR] [/TABLE] مثال : معدل نمرات دانشجويان را از جدول Students محاسبه کرده و در ستونی به نام معدل نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Avg ( Students.Grade ) As معدل From Students [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] معدل [/TD] [/TR] [TR] [TD="class: body"] 16.8 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : معدل نمرات دانشجويان رشته نرم افزار را در درس پايگاه داده محاسبه کرده و در ستونی به نام معدل نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Avg ( Selection.Grade ) As معدل From Students,Selection,Courses Where Students.Student ID = Selection.StudentID AND Selection.Course ID = Courses.Course ID AND Major = 'Soft' AND CoTitle = 'پايگاه داده ' ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] معدل [/TD] [/TR] [TR] [TD="class: body"] 11.5 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] [HR][/HR] تابع Sum : تابع Sum ، مجموع مقادير اعداد در يک فيلد را محاسبه کرده و به عنوان خروجی بر می گرداند . نکته : اين تابع بايد با فيلدهايی که داده آنها از نوع عددی است ، به کار رود . مثال : از جدول انتخاب واحد ( Selection ) مجموع نمرات دانشجويان را در درس پايگاه داده با کد 1011 را محاسبه کنيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Sum ( Selection.Grade ) As مجموع نمرات پايگاه داده From Selection,Courses AND Selection.Course ID = Courses.Course ID AND Selection.Course ID = 1011 ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] مجموع نمرات پايگاه داده [/TD] [/TR] [TR] [TD="class: body"] 47 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : از جدول انتخاب واحد ، مجموع نمرات دانشجو حسام رضوی را محاسبه کنيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Sum ( Selecton.Grade ) As مجموع نمرات حسام رضوی From Students,Selection Where Students.Student ID = Selection.StudentID AND Name = ' Hesam ' AND Family = ' Razavi ' ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] مجموع نمرات حسام رضوی [/TD] [/TR] [TR] [TD="class: body"] 26 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] [HR][/HR] 3 ) تابع Min : اين تابع ، کمترين مقدار موجود در بين مقادير فيلدهای يک ستون را بر می گرداند . نکته : اين تابع با ستون هايی که داده آنها از نوع عددی يا حروفی باشد ، می تواند به کار رود . در فيلدها با مقادير عددی تابع کوچکترين عدد و در فيلدها با مقادير متنی ، تابع کلمه ای که به ترتيب حروف الفبا از آ تا ی در فارسی و A تا Z در انگلِسی در بالاترين رده باشد ، را بر می گرداند . مثال : اولين نام خانوادگی دانشجویان را از جدول Students نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Min ( Family ) As Family From Students [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] Family [/TD] [/TR] [TR] [TD="class: body"] Ahamdi [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : کمترين نمره دانشجویان را از جدول Selection نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Min ( Grade ) As کمترين نمره From Selection [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] کمترين نمره [/TD] [/TR] [TR] [TD="class: body"] 8 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] [HR][/HR] 4 ) تابع Max : اين تابع ، بيشترين مقدار موجود در بين مقادير فيلدهای يک ستون را بر می گرداند . نکته : اين تابع با ستون هايی که داده آنها از نوع عددی يا حروفی باشد ، می تواند به کار رود . در فيلدها با مقادير عددی تابع بزگترين عدد و در فيلدها با مقادير متنی ، تابع کلمه ای که به ترتيب حروف الفبا از آ تا ی در فارسی و A تا Z در انگلِسی در آخرين رده باشد ، را بر می گرداند . مثال : آخرين نام خانوادگی دانشجویان را از جدول Students نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Max ( Family ) As Family From Students [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] Family [/TD] [/TR] [TR] [TD="class: body"] Rezaee [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : بيشترين نمره دانشجویان را از جدول Selection نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Max ( Grade ) As بيشترين نمره From Selection [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] بيشترين نمره [/TD] [/TR] [TR] [TD="class: body"] 19 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] [HR][/HR] 5 ) تابع First : اين تابع مقدار اولين رکورد را در يک فيلد بر می گرداند . ترتيب در اينجا ، همان ترتیب قرار گيری رکوردها در جدول است . [HR][/HR] 6 ) تابع Last : اين تابع مقدار آخرين رکورد را در يک فيلد بر می گرداند . ترتيب در اينجا ، همان ترتیب قرار گيری رکوردها در جدول است . [HR][/HR] 7 ) تابع Count : اين تابع تعداد سطرهای موجود در يک فيلد را شمرده و مقدار آنرا بر می گرداند . به اين تابع ، تابع سطر شمار هم می گويند . مثال : اين تابع فيلدهايی که مقدار آنها خالی يا تکراری باشد را نمی شمارد . برای شمارش کليه فيلدها ( حتی تکراری ) بايد قبل از نام ستون در دستور Count عبارت Distinct ذکر شود . مثال : تعداد درس هايي که دانشجو با شماره دانشجويي 35654415 قبول شده را بدهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Count ( Course ID ) AS تعداد دروس From Selection Where Student ID = 35654415 AND Grade > 10 ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] تعداد دروس [/TD] [/TR] [TR] [TD="class: body"] 1 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : تعداد دانشجويانی که درس پايگاه داده را انتخاب کرده اند را اعلام کنيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Count ( DISTINCT Selection.Course ID ) AS تعداد دانشجويان From Selection , Courses Where Selection.Course ID = Courses.Course ID AND CoTitle = ' پايگاه داده ' ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] تعداد دانشجويان [/TD] [/TR] [TR] [TD="class: body"] 4 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : توابع درون ساخته SQL [h=2]توابع درون ساخته SQL[/h] دستور Group By : در هنگام استفاده از برخی از توابع درون ساخته SQL که عمل محاسبه ( مثل مجموع و ميانگين ) را بر روی داده ها انجام می دهند ، اين مشکل وجود دارد که اين توابع قادر به جدا کردن و متمايز کردن اطلاعات موجود در دو ستون نسبت به هم نيستند و نتايج محاسبات را به صورت کلی برای همه آنها در نظر می گيرند . از دستور Group By برای دسته بندی يک ستون بر حسب مقادير مشابه فيلدهای يک ستون ديگر استفاده می شود . شکل کلی استفاده از اين دستور به صورت زير است : Select نام ستون 1 , Sum ( 2 نام ستون ) ّFrom نام جدول Group By نام ستون 1 ; مثال : فرض کنيد جدولی به صورت زير برای نمرات 2 دانشجو داريم : [TABLE="class: ex, width: 50%"] [TR] [TD="class: header, colspan: 2"] Class Table [/TD] [/TR] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] Ali Ahmadi [/TD] [TD="class: body"] 18[/TD] [/TR] [TR] [TD="class: body"] Reza Hoseini [/TD] [TD="class: body"] 17[/TD] [/TR] [TR] [TD="class: body"] Ali Ahmadi [/TD] [TD="class: body"] 20[/TD] [/TR] [TR] [TD="class: body"] Reza Hoseini [/TD] [TD="class: body"] 13[/TD] [/TR] [/TABLE] در صورت عدم استفاده از دستور Group By در تابع Sum خروجی زير را خواهيم داشت : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Sum ( Grade ) As مجموع نمرات From Class ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] مجموع نمرات [/TD] [/TR] [TR] [TD="class: body"] 68 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] - مسلما خروجی فوق مورد نظر برنامه ساز نيست . می توان با استفاده از دستور Group By ، مجموع نمرات را برای دانشجويان بر حسب ستون Name به صورت جدا محاسبه کرد و به صورت زير نمايش داد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name ,Sum ( Grade ) As مجموع نمرات From Class Group By Name ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 400"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] مجموع نمرات [/TD] [/TR] [TR] [TD="class: body"] Ali Ahmadi [/TD] [TD="class: body"] 38 [/TD] [/TR] [TR] [TD="class: body"] Reaz Hoseini [/TD] [TD="class: body"] 30 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال 2 : از جدول Students و Selection مجموع نمرات هر دانشجو را به همراه نام و نام خانوادگی ، که بر حسب نام خانوادگی مرتب شده باشد نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 6"] Student Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [TD="class: body"] Hard Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 18[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Karaj[/TD] [TD="class: body"] 14[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] Zahra[/TD] [TD="class: body"] Hosini[/TD] [TD="class: body"] Hard Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 17[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] Sahar[/TD] [TD="class: body"] Ahmadi[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Bam[/TD] [TD="class: body"] 16[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] Hesam[/TD] [TD="class: body"] Razavi[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 19[/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 5"] Selection Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Course ID[/TD] [TD="class: header"] Term[/TD] [TD="class: header"] Year[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 16[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 14[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] 1012[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 17[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [TD="class: body"] 1012[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 11[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] 1013[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 13[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 8[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] 1012[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 19[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] 1013[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 16[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 9[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] 1013[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 17[/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family , Sum ( Selection.Grade ) As مجموع نمرات From Students , Selection Where Students.Student ID = Selection.Student ID Group By Name , Family Order By Family; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 600"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [TD="class: header"] مجموع نمرات [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi [/TD] [TD="class: body"] 35 [/TD] [/TR] [TR] [TD="class: body"] Ehsan [/TD] [TD="class: body"] Amiri [/TD] [TD="class: body"] 25 [/TD] [/TR] [TR] [TD="class: body"] Zahra [/TD] [TD="class: body"] Hoseini [/TD] [TD="class: body"] 21 [/TD] [/TR] [TR] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [TD="class: body"] 26 [/TD] [/TR] [TR] [TD="class: body"] Ahmad [/TD] [TD="class: body"] Rezaee [/TD] [TD="class: body"] 33 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : توابع درون ساخته SQL [h=2]توابع درون ساخته SQL[/h] دستور Having : از اين دستور برای افزودن شرط به توابع درون ساخته SQL استفاده می شود ، زيرا از دستور Where نمی توان برای کار با مقادير خروجی توابع درون ساخته SQL استفاده کرد . به عبارت ديگر Having برای اعمال شرط به ستون ها اعمال می شود و همان کاری را می کند که Where در رکوردها انجام می دهد .با مثال های زير استفاده از دستور Having را بررسی می کنيم : نکته : دستور Having معمولا با Group By می آيد . - توجه : از داده های جداول زير در مثال های اين صفحه استفاده می کنيم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 6"] Student Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [TD="class: body"] Hard Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 18[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Karaj[/TD] [TD="class: body"] 14[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] Zahra[/TD] [TD="class: body"] Hosini[/TD] [TD="class: body"] Hard Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 17[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] Sahar[/TD] [TD="class: body"] Ahmadi[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Bam[/TD] [TD="class: body"] 16[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] Hesam[/TD] [TD="class: body"] Razavi[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 19[/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 4"] Courses Table[/TD] [/TR] [TR] [TD="class: header"] Course ID[/TD] [TD="class: header"] Co Title[/TD] [TD="class: header"] Credit[/TD] [TD="class: header"] Co Type[/TD] [/TR] [TR] [TD="class: body"] 1011[/TD] [TD="class: body"] پايگاه داده[/TD] [TD="class: body"] 3[/TD] [TD="class: body"] عملی[/TD] [/TR] [TR] [TD="class: body"] 1012[/TD] [TD="class: body"] مباحث ويژه[/TD] [TD="class: body"] 3[/TD] [TD="class: body"] عملی[/TD] [/TR] [TR] [TD="class: body"] 1013[/TD] [TD="class: body"] زبان تخصصی[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] نطری[/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 5"] Selection Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Course ID[/TD] [TD="class: header"] Term[/TD] [TD="class: header"] Year[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 16[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 14[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] 1012[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 17[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [TD="class: body"] 1012[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 11[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] 1013[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 85 - 86[/TD] [TD="class: body"] 13[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 8[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] 1012[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 19[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] 1013[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 16[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] 1011[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 9[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] 1013[/TD] [TD="class: body"] 2[/TD] [TD="class: body"] 84 - 85[/TD] [TD="class: body"] 17[/TD] [/TR] [/TABLE] مثال : از جدول Students , Selection مجموع نمرات و نام و نام خانواگی دانشجويانی که مجموع نمرات آنها بيش از 25 است را نمايش دهيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family , Sum ( Selection.Grade ) As مجموع نمرات From Students , Selection Where Students.Student ID = Selection.Student ID Group By Name , Family Having Sum ( Selection.Grade ) > 25 Order By Family; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 600"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [TD="class: header"] مجموع نمرات [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi [/TD] [TD="class: body"] 35 [/TD] [/TR] [TR] [TD="class: body"] Ahmad [/TD] [TD="class: body"] Rezaee [/TD] [TD="class: body"] 33 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] مثال : از جدول Selection و Courses نام دروسی را ارائه دهيد که 4 بار توسط دانشجويان انتخاب شده باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select CoTitle , Count ( Selection.Course ID ) As تعداد انتخاب From Selection , Courses Where Selection.Course ID = Courses.Course ID Group By CoTitle Having Count ( Selection.Grade ) = 4 ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 400"] [TR] [TD="class: header"] CoTitle [/TD] [TD="class: header"] تعداد انتخاب [/TD] [/TR] [TR] [TD="class: body"] پايگاه داده[/TD] [TD="class: body"] 4[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : توابع درون ساخته SQL [h=2]توابع دورن ساخته SQL[/h] دستور Select Into : از دستور Select Into در موارد زير استفاده می شود : ايجاد يک Back Up ( نسخه پشتيبان ) از يک جدول . ايجاد يک آرشيو از رکوردهای يک جدول . قرار دادن برخی از رکوردها يا فيلدهای مورد نظر از يک جدول در يک جدول جديد . ايجاد يک نسخه پشتيبان از کل يک پايگاه داده در يک پايگاه داده جديد . شکل کلی استفاده از اين دستور به صورت زير است : Select نام فيلدهای مورد نظر Into نام جدول جديد [ IN نام يک پايگاه داده جديد ] From نام جدول مبدا ; نکته : ذکر نام يک پايگاه داده جديد در دستور Select Into اختياری است . چنانچه نامی در اين قسمت ذکر نشود ، برنامه نسخه پشتيبان را در همان پايگاه داده موجود ايجاد می کند و چنانچه نامی ذکر شود ، برنامه نسخه پشتيبان را در پايگاه داده ذکر شده ايجاد می کند . مثال : ايجاد يک Back Up از جدول Students در يک جدول جديد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * Into Student_Backup From Students ; [/TD] [TD="class: header"] کد[/TD] [/TR] [/TABLE] مثال : ايجاد يک Back Up از جدول Students در يک جدول ديگر در يک پايگاه داده جديد به نام Backup.mdb : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * Into Student_Backup In "Backup.mdb" From Students ; [/TD] [TD="class: header"] کد[/TD] [/TR] [/TABLE] توجه : در مثال های زير از اطلاعات جداول Students , Courses , Selection که در صفحات قبل معرفی کرديم ، استفاده می کنيم . برای رعايت اختصار از قرار دادن آنها در اينجا خودداری می کنيم . نکته : همچنين می توان فقط يک يا چند ستون يا رکورد را از يک جدول در يک جدول جديد وارد کرد . برای اين کار بايد نام آن فيلدها را پس از دستور Select تعيين کرده و برای رکوردهای مورد نظر نيز شروط مورد نظر تعريف شود . مثال : فيلدهای Name و Family را از جدول Students را در يک جدول جديد به نام Names وارد کنيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family Into Names From Students ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] بعد از اجرای دستور فوق جدول جديدی به نام Names با مشخصات زير ايجاد خواهد شد .[/TD] [TD="class: header"] توضيح[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 400"] [TR] [TD="class: header, colspan: 6"] Names Table[/TD] [/TR] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [/TR] [TR] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [/TR] [TR] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [/TR] [TR] [TD="class: body"] Zahra[/TD] [TD="class: body"] Hosini[/TD] [/TR] [TR] [TD="class: body"] Sahar[/TD] [TD="class: body"] Ahmadi[/TD] [/TR] [TR] [TD="class: body"] Hesam[/TD] [TD="class: body"] Razavi[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] مثال : از جدول Students ، مشخصات دانشجويانی که نمره آنها بيش از 17 است را در جدول جديدی به نام Highscores وارد کنيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * Into Highscores From Students where Grade > 17 ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] بعد از اجرای دستور فوق جدول جديدی به نام Names با مشخصات زير ايجاد خواهد شد .[/TD] [TD="class: header"] توضيح[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 6"] Highscores Table[/TD] [/TR] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Major[/TD] [TD="class: header"] City[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] 41252214[/TD] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [TD="class: body"] Hard Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 18[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] Hesam[/TD] [TD="class: body"] Razavi[/TD] [TD="class: body"] Soft Ware[/TD] [TD="class: body"] Tehran[/TD] [TD="class: body"] 19[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] مثال : مشخصات نام ، نام خانوادگی ، نام درس و نمره دانشجويانی که در جدول انتخاب واحد ، نمره آنها بيش از 15 بوده را در يک جدول جديد به نام Highgrades وارد کنيد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family , CoTitle , Selection.Grade Into Highgrades From Students , Selection , Courses WhereStudent.Student ID = Selection.Student ID AND Selection.Course ID = Courses.Course ID AND Grade > 15 ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] بعد از اجرای دستور فوق جدول جديدی به نام Names با مشخصات زير ايجاد خواهد شد .[/TD] [TD="class: header"] توضيح[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 4"] Highgrades Table[/TD] [/TR] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] CoTitle[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] Ahmad [/TD] [TD="class: body"] Rezaee [/TD] [TD="class: body"] پايگاه داده [/TD] [TD="class: body"] 16 [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi [/TD] [TD="class: body"] مباحث ويژه [/TD] [TD="class: body"] 19 [/TD] [/TR] [TR] [TD="class: body"] Ahmad [/TD] [TD="class: body"] Rezaee [/TD] [TD="class: body"] مباحث ويژه [/TD] [TD="class: body"] 17 [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi [/TD] [TD="class: body"] زبان تخصصی [/TD] [TD="class: body"] 16 [/TD] [/TR] [TR] [TD="class: body"] Heasm [/TD] [TD="class: body"] Razavi [/TD] [TD="class: body"] زبان تخصصی [/TD] [TD="class: body"] 17 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]