[h=2][/h] دستور Order By : اطلاعات خروجی در دستور select به طور کلی بی نظم است و مقادير خروجی در ستون های جدول بر حسب مقدار هيج ستونی مرتب نيستند . اين دستور برای مرتب کردن اطلاعات جدول بر اساس مقادير يک يا چند ستون برحسب شاخص هايی مثل ترتيب حروف الفبا ، بزرگتر يا کوچکتر بودن اعداد و ... استفاده می شود . شکل کلی اين دستور به صورت زير است : Select نام فيلدهای مورد نظر From جدول مورد نظر Order By فيلد مورد نظر * فيلدهای معرفی شده در دستور Select از جدول مذکور نمايش داده شده و اطلاعات بر حسب ستون مقابل دستور Order By مرتب می شوند . - عبارت ASC : به کار بردن اين دستور پس از دستور Order By باعث مرتب شدن اطلاعات درون جدول از کم به زياد می شود که البته اتخاب پيش فرض SQL است و نيازی به درج آن نيست . عبارت DESC : به کار بردن اين واژه پس از دستور Order By باعث مرتب شدن اطلاعات جدول از زِياد به کم در اعداد و در حروف از z تا a می شود ، که در صورت نياز درج آن ضروری است . مثال : از جدول Student ، مشخصات نام و نام خانوادگی دانشجويان رشته نرم افزار را بر حسب حروف الفبا نمايش دهيد : [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: 2"] مثال[/TD] [/TR] [TR] [TD="class: body"] Select Name , Family From Student Where Major ="Soft Ware" Order By Family [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 200"] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [/TR] [TR] [TD="class: header"] Sahar[/TD] [TD="class: header"] Ahmadi[/TD] [/TR] [TR] [TD="class: header"] Ehsan[/TD] [TD="class: header"] Amiri[/TD] [/TR] [TR] [TD="class: header"] Hesam[/TD] [TD="class: header"] Razavi[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] [HR][/HR] نکته : همچنين می توان يک جدول را بر حسب بيش از يک فيلد مرتب کرد ، برای اين منظور پس از دستور Order By نام تمام فيلدهای مورد نظر را نوشته و آنها را با کاما از هم دا می کنيم . اولويت مرتب سازی با فيلدهای است که نام آنها زودتر ذکر شده باشند . مثال : جدول مشخصات دانشجويان را بر حسب فيلد نام ( بر حسب حروف از a تا z ) و بر حسب نمره ( از کم به زياد ) مرتب کنيد : [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"] 15[/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"] 19[/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"] 18[/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"] 20[/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"] 14[/TD] [/TR] [/TABLE] نکته : در جدول خروجی مثال زير به ارتباط مقادير ستون های Family , Grade توجه کنيد . باوجود اينکه نمره درسی دانشجو حسام رضوی از احمد رضايی کمتر است ، ولی به دليل اينکه اولويت مرتب سازی با نام خانوادگی است ، نام رضوی بالاتر از رضايی قرار گرفته است . [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال[/TD] [/TR] [TR] [TD="class: body"] Select Name , Family , Grade From Student Order By Family ASC , Grade DESC [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 300"] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Grade[/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi[/TD] [TD="class: body"] 20[/TD] [/TR] [TR] [TD="class: body"] Ehsan [/TD] [TD="class: body"] Amiri[/TD] [TD="class: body"] 19[/TD] [/TR] [TR] [TD="class: body"] Zahra[/TD] [TD="class: body"] Hoseini[/TD] [TD="class: body"] 18[/TD] [/TR] [TR] [TD="class: body"] Hesam[/TD] [TD="class: body"] Razavi[/TD] [TD="class: body"] 14[/TD] [/TR] [TR] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [TD="class: body"] 16[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] نکته : می توان در دستور Order By به جای ذکر نام ستون ها از يک عدد به جای آن استفاده کرد . عدد استفاده شده شماره قرار گيری ستون مورد نظر در دستور Select است . برای مثال اولين ستون دستور Select عدد 1 و دومين ستون عدد 2 و ... را خواهند داشت . بازنویسی دستور بالا با استفاده از اين روش به صورت زير خواهد بود : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال[/TD] [/TR] [TR] [TD="class: body"] Select Name , Family , Grade from Student Order By 2 ASC , 3 DESC [/TD] [TD="class: header"] کد[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] دستور AND & OR : از And و Or برای ترکيب شرط ها در دستور Where استفاده می شود . گاهی اوقات اطلاعات مورد نياز ما در دستور Select دارای چندين شرط مختلف است . به طور مثال ما مشخصات دانشجويان ترم دوم رشته نرم افزار که معدل آنها بيش از 15 است را می خواهيم . در اين حالت بايستی هر يک از شرط های مسئله را به تنهايی تعريف کرده و سپس آنها را با هم ترکيب کنيم . برنامه به ارزيابی هر يک از شرط ها پرداخته ، سپس نتايج حاصله را با هم ترکيب کرده و خروجی را تعيين می کند . عملگر And برای اجرای دستور نياز دارد تا تمام شرط های تعيين شده برای آن درست باشد . در حالی که عمگر Or فقط نياز دارد که حداقل يکی از شرط های آن درست باشد . در جداول زير چگونگی برقراری نتيجه نهايی در هنگام استفاده از اين دو اوپراتور را مشاهده می کنيم : در حالت 2 شرط : [TABLE="width: 100%"] [TR] [TD] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 3"] OR [/TD] [/TR] [TR] [TD="class: header"] شرط 1 [/TD] [TD="class: header"] شرط 2 [/TD] [TD="class: header"] نتيجه [/TD] [/TR] [TR] [TD="class: body"] درست [/TD] [TD="class: body"] درست [/TD] [TD="class: body"] درست [/TD] [/TR] [TR] [TD="class: body"] درست [/TD] [TD="class: body"] غلط [/TD] [TD="class: body"] درست [/TD] [/TR] [TR] [TD="class: body"] غلط [/TD] [TD="class: body"] درست [/TD] [TD="class: body"] درست [/TD] [/TR] [TR] [TD="class: body"] غلط [/TD] [TD="class: body"] غلط [/TD] [TD="class: body"] غلط [/TD] [/TR] [/TABLE] [/TD] [TD] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 3"] AND [/TD] [/TR] [TR] [TD="class: header"] شرط 1 [/TD] [TD="class: header"] شرط 2 [/TD] [TD="class: header"] نتيجه [/TD] [/TR] [TR] [TD="class: body"] درست [/TD] [TD="class: body"] درست [/TD] [TD="class: body"] درست [/TD] [/TR] [TR] [TD="class: body"] درست [/TD] [TD="class: body"] غلط [/TD] [TD="class: body"] غلط [/TD] [/TR] [TR] [TD="class: body"] غلط [/TD] [TD="class: body"] درست [/TD] [TD="class: body"] غلط [/TD] [/TR] [TR] [TD="class: body"] غلط [/TD] [TD="class: body"] غلط [/TD] [TD="class: body"] غلط [/TD] [/TR] [/TABLE] [/TD] [/TR] [/TABLE] چگونگی حالت های فوق را در مثال های زير بررسی می کنيم : [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] مثال 1 : مشخصات دانشجويانی را از جدول Student ارائه دهيد که نمره آنها بيش از 15 و رشته تحصيلی آنها نرم افزار باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * From Student Where Major = 'Soft Ware' AND Grade > 15 ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [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"] 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] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال 2 : مشخصات دانشجويانی را از جدول Student ارائه دهيد که نمره آنها بيش از 17 بوده يا رشته تحصيلی آنها نرم افزار باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * From Student where Major = 'Soft Ware' OR Grade > 17 ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [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] [HR][/HR] نکته مهم : همچنين می توان با استفاده از عملگر پرانتز چندين شرط مختلف را به صورت دسته های مجزا تعريف کرده و سپس همه آنها را با هم ترکيب کرد . در اين حالت شرط های هر گروه ابتدا در داخل پرانتز با هم ترکيب شده ، سپس نتيجه حاصله به عنوان نتيجه نهايي آن گروه شرط به دستور Where ارسال می شود و درنهايت نتايج تمام گروه ها با هم ترکيب می شوند . مثال مهم : از جدول Student مشخصات دانشجويانی را ارائه دهيد که نمره آنها 18 و رشته تحصيلی آنها سخت افزار بوده يا نمره آنها 16 و رشته تحصيلی شان نرم افزار باشد : [TABLE="class: ex"] [TR] [TD="class: header"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * From Student Where ( ( Grade = 18 AND Major = 'Hard Ware' ) OR ( Garde = 16 AND Major = 'Soft Ware' ) ) " ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [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"] 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] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستوات پيشرفته SQL[/h] دستور In : اين دستور برای مشاهده اطلاعات رکوردهايی از جدول به کار می رود که شما مقدار دقيق حداقل يکی از فيلدهای آنرا می دانيد . شکل کلی اين دستور به صورت زير است : Select نام ستون From نام جدول Where نام فيلد IN ( مقدار 1 ، مقدار 2 و ... ) [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] مثال : از جدول Student مشخصات دانشجويانی را بدهيد که نام خانوادگی آنها احمدی يا رضايی است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * From student Where Family IN ( "Ahmadi" , "Rezaee" ); [/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] [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"] 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] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] دستور Between ... And : اين دستور برای انتخاب اطلاعات در يک محدوده خاص ، در بين دو مقدار تعيين شده استفاده می شود . اين مقادير می تواند از نوع عددی ، متن يا تاريخ باشد . ( بايد نوع مدنظر با نوع داده ای فيلد های استفاده شده در دستور يکسان باشد ). شکل کلی اين دستور به شکل زير است : Select نام فيلدهای مورد نظر برای نمايش From نام جدول Where نام فيلد مورد نظر Between مقدار 1 And مقدار 2 نکته : در مورد داده های متنی ، ترتيب قرار گيری حروف الفبا مد نظر برنامه است . مثال : از جدول Student مشخصات دانشجويانی را ارائه دهيد ، که نام خانوادگی آنها بين دو مقدار احمدی و حسينی باشد . در ضمن خروجی بر حسب نام خانوادگی به ترتيب حروف الفبا مرتب باشد : [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: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * From Student Where Family Between 'Ahmadi' And 'Hoseini' Order By family; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [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"] 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"] 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] [/TABLE] [/TD] [TD="class: header"] مثال[/TD] [/TR] [/TABLE] [HR][/HR] نکته : قرار گرقتن خود رکوردهای 2 مقدار تعيين شده در خروجی دستور Select ، بسته به نوع برنامه پايگاه و مديريت آن دارد . در برخی از پايگاه های داده رکوردهای هر 2 مقدار ابتدا و انتها نمايش داده می شود و در برخی هم فقط يکی از آنما نمايش داده می شود . نکته : برای نمايش اطلاعات خارج از محدوده تعيين شده از يک عملگر NOT قبل از دستور Between ... And استفاده می شود . مثال : از جدول student مشخصات دانشجويانی زا ارائه دهيد که نمره آنها خارج از محدوده 12 تا 15 باشد . در ضمن مقادير خروجی بر حسب نام خانوادگی به ترتيب حروف الفبا مرتب باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select * From Student Where Grade NOT Between 12 And 15 Order By Family ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [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"] 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"] 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"] 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] [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] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] ويژگی Alias : همانطور که در تمام مثال های ذکر شده از دستور Select مشاهده کرديد ، نام يا عنواني که در بالای هر ستون در خروجی نمايش داده می شود ، همان نام فيلد مربوط به داده در جدول اصلی پايگاه داده است . گاهی اوقات تمايل بر اين است که اين نام را تغيير دهيم ، يا در مواردی که در بخش توابع SQL خواهيم ديد ، يک ستون جديد ايجاد می کنيم که بايد نامی برای آن تعيين شود . از ويژگی Alias برای در نظر گرفتن يک نام مستعار و مجازی برای قرار گرفتن در بخش عنوان هر ستون در خروجی دستور Select استفاده می شود . شکل کلی اين دستور به صورت زير است : Select نام فيلد As عنوان ( Alias ) From نام جدول مثال : از جدول Student نام و نام خانوادگی دانشجويان رشته نرم افزار را بر حسب حروف الفبا در 2 ستون تحت عنوان های " نام " و " نام خانوادگی " نمايش دهيد : [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: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name As نام , Family As خانوادگی From Student Where Major = 'Soft Ware' Order By Family ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] نام [/TD] [TD="class: header"] خانوادگی [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahmadi [/TD] [/TR] [TR] [TD="class: body"] Ehsan [/TD] [TD="class: body"] Amiri [/TD] [/TR] [TR] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] مثال [/TD] [/TR] [/TABLE] [HR][/HR] نکته مهم : می توان بر روی مقادير ستون هايی که داده عددی دارند ، عمليات رياضی ( مثل ضرب ، تقسيم و ... ) انجام داده و سپس نتايج محاسبات را در يک ستون جديد با عنوان دلخواه تعيين شده توسط ويژگی Alias در خروجی دستور Select نمايش داد .در اين حالت ستون يا ستون های به جدول خروجی اضافه می شود . در اين ارتباط مثالی را ذکر می کنيم : مثال : فرض کنيد جدولی داريم به نام Books ، که در آن مشخصات چند کتاب مختلف قرار دارد . در اين جدول قيمت کتاب ها به دلار است و ما می خواهيم قيمت کتاب ها را در يک ستون جديد به تومان مشاهده کنيم . در اين به روش زير عمل می کنيم : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 4"] Books Table [/TD] [/TR] [TR] [TD="class: header"] Radif [/TD] [TD="class: header"] Name [/TD] [TD="class: header"] Publisher [/TD] [TD="class: header"] Price $ [/TD] [/TR] [TR] [TD="class: body"] 1 [/TD] [TD="class: body"] Learning Access [/TD] [TD="class: body"] Microsoft [/TD] [TD="class: body"] 8 [/TD] [/TR] [TR] [TD="class: body"] 2 [/TD] [TD="class: body"] Java Script Samples [/TD] [TD="class: body"] DeveloperStudio [/TD] [TD="class: body"] 6 [/TD] [/TR] [TR] [TD="class: body"] 3 [/TD] [TD="class: body"] HTML Reference [/TD] [TD="class: body"] DeveloperStudio [/TD] [TD="class: body"] 7 [/TD] [/TR] [/TABLE] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Radif , Name , Publisher , Price , Price * 840 As قيمت به تومان From Books ; [/TD] [TD="class: header"] کد [/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 5"] Books Table [/TD] [/TR] [TR] [TD="class: header"] Radif [/TD] [TD="class: header"] Name [/TD] [TD="class: header"] Publisher [/TD] [TD="class: header"] Price $ [/TD] [TD="class: header"] قيمت به تومان [/TD] [/TR] [TR] [TD="class: body"] 1 [/TD] [TD="class: body"] Learning Access [/TD] [TD="class: body"] Microsoft [/TD] [TD="class: body"] 8 [/TD] [TD="class: body"] 6720 [/TD] [/TR] [TR] [TD="class: body"] 2 [/TD] [TD="class: body"] Java Script Samples [/TD] [TD="class: body"] DeveloperStudio [/TD] [TD="class: body"] 6 [/TD] [TD="class: body"] 5040 [/TD] [/TR] [TR] [TD="class: body"] 3 [/TD] [TD="class: body"] HTML Reference [/TD] [TD="class: body"] DeveloperStudio [/TD] [TD="class: body"] 7 [/TD] [TD="class: body"] 5880 [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] پيوند جدول ها : تا اين قسمت تمام مثال ها و مسئله هايی که در SQL به آنها پاسخ داديم ، مسئله هايی بودند که اطلاعات ما فقط از يک جدول استخراج می شد . اما در برنامه نويسی واقعی پايگاه داده ها ، ما مجبور هستيم که اطلاعات خود را از بيش از يک جدول استخراج کنيم . در اين حالت ما ابتدا بايد جدول هايی که می خواهيم اطلاعات را از آنها استخراج کنيم ، با هم پيوند دهيم . هدف از ايجاد اين ارتباط تلفيق اطلاعات در جدول ها و چاپ اطلاعات مورد نظر در خروجی است . [HR][/HR] مفاهيم اوليه : برای پيوند دادن جدول ها ابتدا بايد چند مفهوم زير را بشناسيم : کليد اصلی : فيلد کليد اصلی در يک جدول ، فيلدی است که شرايط زير را داشته باشد : مقدار آن برای هر نمونه رکورد ( سطر ) منحصر به فرد و غير تکراری باشد . به عبارت ديگر هيچ 2 رکوردی در يک جدول در اين فيلد مقدار يکسان نداشته باشد . کليد اصلی وجه تمايز 2 نمونه رکورد مختلف در يک جدول است . طول مقادير آن حدامکان کوتاه باشد . نکته : يک جدول می تواند بيش از يک کليد اصلی داشته باشد . مثال : فيلد شماره دانشجويی در جدول Student کليد اصلی است . هيچ دو دانشجويی نمی توانند دارای شماره دانشجويی يکسان باشند . کليد خارجی : کليد خارجی ، فيلدی است که در يک جدول کليد اصلی و در جدول ديگر به تنهايی کليد اصلی نباشد . از کليد خارجی برای ارتباط يک به چند 2 جدول با هم استفاده می شود . [HR][/HR] شرط ارتباط 2 جدول : برای ارتباط بين جدول ها بايد شرط های زير برقرار باشد . بايد قبل از طراحی پايگاه داده و جدول های آن موارد زير را جهت ارتباط جدول های مورد نظر رعايت کرد . وجود فيلد مشترک دقيقا از يک نوع و يک سايز . فيلد مشترک در يکی از جدول ها کليد اصلی و در جدول ديگر کليد خارجی باشد . [HR][/HR] معرفی 2 جدول ديگر : از اين به بعد ما در مثال های خود از 2 جدول ديگر به غير از جدول Student ، به نام های Courses ( درس ها ) و Selection ( انتخاب واحد ) به شرح زير استفاده می کنيم : [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"] کد درس ( کليد اصلی ) [/TD] [TD="class: body"] عنوان درس [/TD] [TD="class: body"] تعداد واحد [/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"] شماره دانشجويی ( کليد اصلی خارجی )[/TD] [TD="class: body"] کد درس ( کليد اصلی خارجی )[/TD] [TD="class: body"] ترم تحصيلی [/TD] [TD="class: body"] سال تحصيلی[/TD] [TD="class: body"] نمره[/TD] [/TR] [/TABLE] نکته مهم : در تمام مثال های قبلی ، ما در دستور Select فقط نام ستون ها را به تنهايی ذکر می کرديم ، زيرا در آن زمان ، اطلاعات ما فقط از يک جدول استخراج می شد . اما در هنگام پيوند دو جدول و استفاده از چند جدول در دستور Select بايد نام ستون را به همراه نام جدول مربوط به آن ذکر کرد . اين کار 2 دليل اصلی دارد : باعث تمايز ستون های مشترک در جدول ها از هم می شود و مشخص می کند که هر ستون مربوط به کدام جدول است . باعث خوانايی و دقت بيشتر برنامه می شود . شکل کلی اين دستور به صورت زير است : نام ستون . نام جدول مثال : انتخاب ستون StudedntID از جدول Student : Student.StudentID [HR][/HR] مثال های پيوند جدول ها : در اين قسمت با ارائه چندين مثال ، انواع حالت های مختلف پيوند جدول ها را بررسی می کنيم . از داده های موجود در جداول زير برای مثال ها استفاده می کنيم : توجه : جدول انتخاب واحد نشان دهنده اين است که هر دانشجو چه واحدهای درسی را در چه ترم و سال و با چه نمره ای گذارنده است . [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] شکل کلی پيوند 2 جدول برای استخراج اطلاعات به صورت زير است : Select نام ستون های مورد نظر برای نمايش From نام جدول ها where برابر قرار دادن فيلدهای مشترک 2 جدول And بقيه شرط های مورد نظر ; در اين حالت ابتدا در دستور Select نام ستون هايی که از 2 جدول می خواهيم نمايش دهيم را تعيين می کنيم . سپس نام 2 جدول را در مقابل دستور From نوشته و در اولين شرط دستور Where نام فيلد مشترک را از هر 2 جدول نوشته و آنها را برابر هم قرار می دهيم . اين شرط ، شرط برقراری پيوند و تلفيق اطلاعات 2 جدول است . در ادامه هم می توان شرط های ديگری را برای استخراج اطلاعات تعيين کرد . در مثال های زير اين مسئله را بررسی می کنيم : مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال[/TD] [/TR] [TR] [TD="class: body"] Select Students.Name , Students.Family , Selection.Term , Selection.Year From Students , Selection where Student.Student ID = Selection.Stuedent ID AND Course ID = 1012 AND Term = 1 AND Year = '85 - 86' Order By Students.Family; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Term[/TD] [TD="class: header"] Year[/TD] [/TR] [TR] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [/TR] [TR] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويی 10254861 انتخاب کرده است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Courses.Course ID , Courses.Co Title from Courses , selection Where Courses.Course ID = selection.Course ID AND Selection.Student ID = 102548861 ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Course ID [/TD] [TD="class: header"] Course Title [/TD] [/TR] [TR] [TD="class: body"] 1011 [/TD] [TD="class: body"] پايگاه داده [/TD] [/TR] [TR] [TD="class: body"] 1013 [/TD] [TD="class: body"] زبان تخصصی [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که درس با کد 1013 در سال تحصيلی 84 - 85 را با نمره بالاتر از 15 گذارنده اند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال[/TD] [/TR] [TR] [TD="class: body"] SELECT Students.Name , Students.Family From Students , Selection Where Students.Studentid = Selection.Studentid And Selection.Courseid = '1013' And Year = '84 - 85' And Grade > 15 ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahamdi [/TD] [/TR] [TR] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] [HR][/HR] پيوند بيش از 2 جدول به هم : گاهی اوقات لازم است که اطلاعات مورد نياز ما از 3 جدول يا بيشتر استخراج شود . در اين حالت بايد کليه جدول ها را به هم پيوند دهيم به اين صورت که معمولا از يک جدول سوم برای پيوند 2 جدول ديگر استفاده می شود و 2 به 2 جدول هايی که با هم فيلد مشترک دارند را با ذکر شرط پيوند در دستور Where به هم پيوند می دهيم . سپس بقيه شروط دلخواه را نيز ذکر می کنيم . شکل کلی اين حالت به صورت زير است : Select نام ستون های مورد نظر از جدول ها From نام تمام جدول ها Where برابر قرار دادن فيلد مشترک جدول های 1 و 2 AND برابر قرار دادن فيلدهای مشترک جدول های 2 و 3 AND ... ; مثال : نام و نام خانوادگی دانشجويانی را بدهيد که حداقل يک درس از نوع نظری را انتخاب کرده باشند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Students.Name , Students.Family , Courses.CoTitle , Courses.CoType From Students , Courses , Selections Where Student.StudentID = Selection.StudentID AND Courses.CourseID = Selection.CourseID AND Courses.CoType = ' نظری ' ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [TD="class: header"] CoTitle [/TD] [TD="class: header"] CoType [/TD] [/TR] [TR] [TD="class: body"] Zahra [/TD] [TD="class: body"] Hosini [/TD] [TD="class: body"] زبان تخصصی [/TD] [TD="class: body"] نظری [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahamadi [/TD] [TD="class: body"] زبان تخصصی [/TD] [TD="class: body"] نظری [/TD] [/TR] [TR] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [TD="class: body"] زبان تخصصی [/TD] [TD="class: body"] نظری [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] * با دقت در اطلاعات جدول های اصلی متوجه درست بودن نتايج خروجی خواهيد شد .
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] دستور Join : از دستور Join نيز همانند قسمت قبلی ( پيوند جدول ها ) ، برای پيوند جدول ها در پايگاه داده ها استفاده می شود . تمام شرايط و ضوابط ذکر شده در قسمت قبل در مورد دستور Join نيز صادق است . به عبارت ديگر دستور Join روشی متفاوت برای پيوند جدول هاست که همان خروجی را توليد می کند . برای پيوند جدول ها با استفاده از دستور Join ، از روش کلی زير استفاده می شود : Select نام ستونهای مورد نظر جهت نمايش از هر 2 جدول From نام جدول 1 Inner Join نام جدول 2 On برابر قرار دادن فيلدهای مشترک 2 جدول با هم Where بقيه شرط ها ; برخی از مثال های قسمت قبل را با دستور Join باز نويسی می کنيم . مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند : [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] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال[/TD] [/TR] [TR] [TD="class: body"] Select Students.Name , Students.Family , Seleciton.Term , Selection.Year From Students Inner Join Seleciton On Students.Student ID = Selection.Student ID Where Selection.Course ID = 1012 AND Term = 1 AND Year = ' 85 - 86 ' ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [TD="class: header"] Term[/TD] [TD="class: header"] Year[/TD] [/TR] [TR] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [/TR] [TR] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [TD="class: body"] 1[/TD] [TD="class: body"] 85 - 86[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويی 10254861 انتخاب کرده است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Courses.Course ID , Courses.Co Title From Courses Inner Join Selection ON Courses.Course ID = Selection.Course ID Where Selection.Student ID = 102548861 ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Course ID [/TD] [TD="class: header"] Course Title [/TD] [/TR] [TR] [TD="class: body"] 1011 [/TD] [TD="class: body"] پايگاه داده [/TD] [/TR] [TR] [TD="class: body"] 1013 [/TD] [TD="class: body"] زبان تخصصی [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] Select های تو در تو : می توان در درون يک دستور Select ، دستور Select ديگری را تعريف کرد . در اين حالت ابتدا دستور Select درونی اجرا شده و نتايج مورد نظر خود را که سطرهايی از جدول مربوط به آن هستند را استخراج کرده و آنرا به Select بيرونی انتقال می دهد . سپس Select بيرونی نيز اجرا شده و نتايج استخراجی خود را با استفاده از فيلد مشترک بين 2 جدول با سطرهای Select درونی پيوند زده و سطرهای مطابق با شروط تعيين شدهخ را نمايش می دهد . از حالت Select های تو در تو برای پيوند جدول ها استفاده می شود و برای زمانی مناسب است که بخواهيم ستون های خروجی در دستور Select فقط از يک جدول که در بيرونی ترين Select تعريف شده اند ، نمايش داده شوند . نکته : به تعداد دستورات Select تو در تو ، سطح آن می گويند . [HR][/HR] Select های 2 سطحی : در اين حالت يک دستور Select در درون دستور Select ديگری تعريف می شود و برای پيوند 2 جدول با استفاده از فيلد مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل سطرهای از جدول Select بيرونی باشد . شکل کلی پيوند 2 جدول بااستفاده از Select 2 سطحی به صورت زير است : Select نام ستون های مورد نظر برای نمايش از جدول بيرونی From نام جدول 1 Where نام فيلد مشترک 2 جدول IN ( Select نام فيلد مشترک 2 جدول From نام جدول 2 Where شرط ها ... ) ; مثال های قسمت های قبل پيوند جدول ها را با استفاده از Select های تو در تو بازنويسی می کنيم . مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family From Students Where Student ID IN ( Select Student ID From Selection Where Course ID = 1012 AND Term = 1 AND Year = ' 85 - 86 ' ) ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [/TR] [TR] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [/TR] [TR] [TD="class: body"] Ahmad[/TD] [TD="class: body"] Rezaee[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی [/TD] [/TR] [/TABLE] نکته : تفاوت اين حالت با مثال های قبلی در اين است که ستون های نمايش داده شده فقط از يک جدول ( جدول Select بيرونی ) نمايش داده می شوند . مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويي 10254861 انتخاب کرده است : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Coures ID , CoTitle From Courses Where Course ID IN ( Select Course ID From Selection Where Student ID = 10254861 ) ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Course ID [/TD] [TD="class: header"] Course Title [/TD] [/TR] [TR] [TD="class: body"] 1011 [/TD] [TD="class: body"] پايگاه داده [/TD] [/TR] [TR] [TD="class: body"] 1013 [/TD] [TD="class: body"] زبان تخصصی [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] [HR][/HR] Select های 3 سطحی : در اين حالت 3 دستور Select به صورت تو در تو تعريف شده اند و برای پيوند 3 جدول به صورت 2 به 2 و با استفاده از فيلد های مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل ستون هايي از بيرونی ترين Select تعريف شده باشد . در اين حالت از جدول دوم برای پيوند جدول های 1 و 3 استفاده می شود . شکل کلی پيوند 3 جدول با استفاده از Select های 3 سطحی به صورت زير است : Select نام ستون های مورد نظر جهت نمايش از جدول 1 From نام جدول 1 where نام فيلد مشترک جدول 1 و 2 IN ( Select نام فيلد مشترک جدول 1 و2 From نام جدول 2 Where نام فيلد مشترک جدول 2 و 3 IN ( Select نام فيلد مشترک جدول 2 و 3 From نام جدول 3 Where بقيه شرط ها ... )) ; مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که حداقل يک درس از نوع نظری را انتخاب کرده باشد : [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Name , Family From Students where Student ID IN ( Select Student ID From Selection Where Course ID IN ( Select Course ID From Courses Where CoType = ' نظری ' )) ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Name [/TD] [TD="class: header"] Family [/TD] [/TR] [TR] [TD="class: body"] Zahra [/TD] [TD="class: body"] Hosini [/TD] [/TR] [TR] [TD="class: body"] Sahar [/TD] [TD="class: body"] Ahamadi [/TD] [/TR] [TR] [TD="class: body"] Hesam [/TD] [TD="class: body"] Razavi [/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] دستور Unoin : از دستور Union برای ترکيب و ادغام دو يا چند ستون مختلف از 2 يا چند جدول و نشان دادن آنها در يک ستون مشترک استفاده می شود . در اين دستور ، نوع داده ای ستون های انتخاب شده برای ترکيب بايد يکسان باشند . دستور Union در هنگام ترکيب فيلد ها ، در صورت برخورد با مقادير تکراری آنها را حذف کرده و از هر مقدار يک نمونه را نمايش می دهد . برای مشاهده تمام مقادير ، حتی مقادير تکراری بايد از دستور Union ALL استفاده کرد . شکل کلی استفاده از اين دستور به صورت زير است : SQL Statment 1 ( نام فيلد 1 اتخابی ) Union SQL Statment 1 ( نام فيلد 2 اتخابی ) مثال : شماره دانشجويی ، دانشجويانی را بدهيد که يا دانشجوی رشته نرم افزار بوده يا در درس زبان تخصصی با کد 1013 ثبت نام کرده اند : [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] [TABLE="class: ex"] [TR] [TD="class: header, colspan: 2"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Stuedent ID From Students Where Major = ' Soft ' Union Select Student ID From Selection Where Course ID = 1013 ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex, width: 25%"] [TR] [TD="class: header"] Student ID[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [/TR] [TR] [TD="class: body"] 10724113[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE] [HR][/HR] توجه : می توان دستورات Select تعريف شده در دستور Union را تا حد نياز گسترش د اد . به عبارت ديگر هر دستور مجاز Select در اين قسمت قابل تعريف است . برای مثال می توان در دستورات Select تعريف شده ، جدول ها را به هم پيوند داد و فقط يک ستون خروجی توليد کرد و سپس آن را با ستون طرف ديگر پيوند زد . نکته : می توان در دستور Union بيش از يک ستون مجزا را تعريف کرد . فقط بايد تعداد ستون های و ترتيب نوع داده ای ستون های تعريف شده يکسان باشند . برنامه مقادير ستون ها را به ترتيب با هم پيوند می دهد . مثال : شماره دانشجويي ، نام و نام خانوادگی دانشجويانی را بدهيد که در رشته سخت افزار تحصيل کرده يا حداقل يک درس از نوع نظری را انتخاب کرده باشند : [TABLE="class: ex"] [TR] [TD="class: header"] مثال [/TD] [/TR] [TR] [TD="class: body"] Select Student ID , Name , Family From Students Where Major = ' Hard ' Union Select Student ID , Name , Family From Students , Seleciton , Courses where Students.Student ID = Selection.Student ID AND Selection.Course ID = Courses.Course ID AND CoType = ' نظری ' ; [/TD] [TD="class: header"] کد[/TD] [/TR] [TR] [TD="class: body"] [TABLE="class: ex"] [TR] [TD="class: header"] Student ID[/TD] [TD="class: header"] Name[/TD] [TD="class: header"] Family[/TD] [/TR] [TR] [TD="class: body"] 10254861[/TD] [TD="class: body"] Zahra[/TD] [TD="class: body"] Hosini[/TD] [/TR] [TR] [TD="class: body"] 107241113[/TD] [TD="class: body"] Ehsan[/TD] [TD="class: body"] Amiri[/TD] [/TR] [TR] [TD="class: body"] 27365187[/TD] [TD="class: body"] Sahar[/TD] [TD="class: body"] Ahmadi[/TD] [/TR] [TR] [TD="class: body"] 35654415[/TD] [TD="class: body"] Hesam[/TD] [TD="class: body"] Razavi[/TD] [/TR] [/TABLE] [/TD] [TD="class: header"] خروجی[/TD] [/TR] [/TABLE]
پاسخ : دستورات اوليه SQL [h=2]دستورات پيشرفته SQL[/h] دستور Create : دستور Create برای ايجاد يک جزء جديد در سيستم های پايگاه داده مورد استفاده قرار می گيرد . [HR][/HR] 1 ) ايجاد يک پايگاه داده Create a DataBase : برای ايجاد يک پايگاه داده جديد از دستور زير استفاده می شود : Create DataBase نام پايگاه داده مثال : Create DataBase UniverCity [HR][/HR] 2 ) ايجاد يک جدول Create a Table : برای ايجاد يک جدول جديد در پايگاه داده از دستور زير استفاده می شود . برای ایجاد يک جدول 3 عامل اصلی را بايد در نظر گرفت : تعيين يک نام منحصر به فرد برای جدول . تعيين تعداد ستون های ( فيلد ها ) جدول و نام آنها . تعيين نوع داده ای ستون های جدول و اندازه آنها در صورت نياز . شکل کلی دستور ايجاد جدول به صورت زير است : Create Table نام جدول { نوع داده ستون 1 نام ستون 1 , نوع داده ستون 2 نام ستون 2 , نوع داده ستون 3 نام ستون 3 , ... ; } مثال : Create Table Students { Student ID Numeric (8) , Name Char (15) , Family Char (15) , ... ; } نکته 1 : نوع داده انتخابی برای ستون ها ، بايستی يکی از انواع داده ای مجاز در SQL باشد . برای فيلد های که می خواهيد حداکثر طول مجاز را تعيين کنيد ، می توانيد مقدار آنرا در پرانتز جلوی نام نوع داده فيلد ذکر کرد . مثال : نوع داده ای کاراکتر با حداکثر طول 15 کاراکتر : Name Char (15) ; [HR][/HR] 3 ) ايجاد يک انديس Create Index : از اين دستور برای ايجاد انديس در ستون های جدول استفاده می شود . در يک جدول می توان برای يک يا چند ستون جدول انديس ايجاد کرد ، که اين انديس ها باعث بالا رفتن سرعت جستجو در رکوردهای جدول مي شود . انديس يک شماره است که به هر سطر جدول اختصاص داده می شود و معمولا از صفر شروع می شود . انديس ها از ديد کاربر مخفی هستند و هر انديس يک نام منحصر به فرد دارد . شکل کلی ايجاد يک انديس به صورت زير است : Create Index نام انديس On نام جدول ( نام فيلد مورد نظر )ن مثال : Create Index Rowup On Students ( Student ID ) ; نکته 1 : در صورت آوردن واژه Unique قبل از واژه Index در دستور فوق ، باعث ايجاد يک شماره منحصر به فرد برای هر رکورد در ستون جدول می شود ، به اين معنی که هيچ در رکوردی دارای انديس های يکسان نخواهند بود . نکته 2 : انديس ها به صورت پيش فرض صعودی ( از کم به زياد ) هستند ، برای ايجاد يک انديس با ترتيب بر عکس ( از زياد به کم ) بايد بعد از نام فيلد در پرانتز ، عبارت DESC ذکر شود . نکته 3 : برای ايجاد يک انديس برای بيش از يک فيلد ، بايد نام فيلد های مورد نظر را به ترتيب در پرانتز بعد از نام جدول وارد کرد . مثال : Create Index Rowup On Students ( Student ID , Name , Family ) ;