آموزش sql server – جلسه چهارم
سلام. خدمت دوستان عزیز باید بگم که در این جلسه از آموزشمون قراره پرکاربرد ترین و مهمترین دستورات SQL را آموزش بدهم.پس سعی کنید خوب یاد بگیرید( البته مثل همیشه همراه با مثال و تمرین )
انواع Query یا پرس وجو
۱.پرس و جوی عمومی (انتخاب همه اطلاعات جدول)
نام جدول select * from
مثال:
select * from student
تمامی رکورد های جدول دانش اموز را نمایش می دهد.
۲٫پرس و جوی فیلد های خاصی از جدول
نام جدول from …,نام فیلد۲ , نام فیلد۱ select
۳٫انتخاب فیلد های خاص و نمایش آنها با نام های جدید در خروجی
نام جدول from …, ‘نام جدید برای فیلداول ‘ as نام فیلد۱ select
۴٫مرتب سازی پرس وجو
نام فیلد orther by نام جدول from نام فیلد ها select
پرس جو براساس نام فیلدی که در جلوی orther by نوشته شده است مرتب می شود.
۵٫استفاده از عملگر های منطقی در شرط نمایش orther by
شرط ۲ (and/or/not ) شرط۱ where نام فیلد orther by نام جدول select * from
۶٫نمایش query با حذف مقادیر تکراری
…. نام جدول from …, نام فیلد select distinct
۷٫استفاده از litrall یا رشته همراه با پرس وجو
…. نام جدول from …. , نام فیلد ۱, ‘ select ‘litrall1
۸٫ استفاده از عملگر like
توسط عملگر like می توانیم یک الگو یا شکل کلی برای ارزیابی مقادیری که می خواهیم تعریف کنیم که در صورت مطابقت با الگو نمایش داده شوند.
‘الگو’ where like [نام فیلد orther by] نام جدول select * from
۹.استفاده از gruop by
هرگاه بخواهیم نتیجه نمایش پرس وجو بر اساس یک فیلد دسته بندی شود نام آن را در جلوی عبارت gruop by می نویسیم. توجه کنید نام فیلد جلوی gruop by حتما باید در جلوی دستورselect نوشته شود ودر صورت استفاده از فیلد های دیگر باید از توابع جمعی استفاده کنیم.
نکته:همیشه و همیشه هنگامی که از توابع جمعی استفاده می کنیم حتما باید از کلمه gruop by استفاده شود.
توابع جمعی:
()sum: جمع
()avg: میانگین
() max: پیدا کردن بزرگترین مقدار
()min: پیدا کردن کوچکترین مقدار
() cuont: شمارش تعداد
نام فیلد group by نام جدول select * from
مثال:
جمع نمرات هر دانش آموز با سن بالای ۱۵ (دسته بندی بر اساس نام و فامیل)
select std_name , std_family,sum(grade) from student
where age>15 gruop by std_name,std_family
۱۰.استفاده از group by اعمال شرط having بر روی آن
برای شرط دسته بندی رکورد ها استفاده می شود. عبارت having شرط نمایش مقادیر دسته ها را مشخص می کند و بعد از دسته بندی شدن اعمال می شود ولی شرط جلوی where روی تمامی رکورد ها و قبل از دسته بندی شدن اعمال می شود.
شرط having نام فیلد group by نام جدول select * from
مثال:
جمع نمرات دانش اموزانی بالای ۱۵ سال که جمع نمرا ت آنها از ۱۶ بیشتر شده است .
select std_name , std_family,sum(grade) from student
where age>15 gruop by std_name,std_family having sum(*)>16
نکته : معمولا having هرشرطی را با توابع جمعی بیان می کند در غیر این صورت فقط می توان در شرط از نام فیلدی استفاده کرد که در جلوی عبارت group by نوشته شده است.
۱۱.استفاده ا ز عملگر in
جهت تعیین شرط با محدوده ای از مقادیر(عملیات in شبیه عملگر or می باشد)
(‘رشته ۳′,’رشته ۲′,’رشته ۱’) in نام فیلد where نام جدول select * from
۱۲٫استفاده از عملگر top:
هرگاه بخواهیم حداکثر تعداد رکورد های نمایشی را در خروجی نمایش دهیم از این عملگر استفاده می کنیم.
select top 5 grade from student
۵نمره اول جدول دانش آموز را برمی گرداند.
تذکر:برای نمایش درصدری از رکورد ها در خروجی بعد از کلمه top ابتدا عدد و سپس کلمه percent را می نویسم .
select top 5 percent grade from student
۵درصد اول نمرات جدول دانش آموز را برمی گرداند.
۱۳٫برای بررسی مقادیر فیلد ها با مقدار null در شرط نمایش رکورد ها
is null/is not null نام فیلد where نام جدول select * from
۱۴.استفاده از عبارت comput by:
توسط این عبارت یک عملیات را روی رکورد های دسته بند ی شده توسط توابع جمعی انجام می دهیم.هنگام استفاده از این عملگر حتما باید عبارت orther by را نوشته و فیلد جلوی comput حتماباید جلوی orther آمده باشد.
شرط where نام جدول select * from
نام فیلد orther by
نام فیلد دسته بندی شده by توابع جمعی compute
تفاوت gruop by و comput by :
comput نتیجه عملیات روی رکورد های دسته بندی شده را به صورت تفکیک شده نمایش می دهد.
۱۵٫استفاده از عبارت into:
نتیجه پرس وجو در یک جدول موقت ذخیره میشود که نام آن جدول حتما باید ذکر شود.نشانه یک جدول موقت عبارت# می باشد.جدول موقت می تواند توسط دستور select مقادیر خود را نمایش دهد.
…. نام جدول اصلی from نام جدول موقت select * into
ایجاد جستجوی های فرعی :
هر گاه قسمت where یک دستور select با یکی از عملگر های زیر select دیگری را بنویسیم یک پرس و جو یفرعی ایجاد کرده ایم.
in: بررسی وجود مقادیر یک فیلد در یک مجموعه جواب که خروجی select فرعی است.
(دستورات پرس و جوی فرعی ) inنام فیلد where نام جدول select * from
any: مقادیر یک فیلد توسط عملگر “=” با مقدار جواب select داخلی مقایسه می شود.
(دستورات پرس و جوی فرعی )= نام فیلد where نام جدول select * from
all:مقادیر یک فیلد توسط عملگرهای “=<>” با مقدار جواب select داخلی مقایسه می شود.
(دستورات پرس و جوی فرعی ) =/</> نام فیلد where نام جدول select * from
exists/not exists:وجود مقادیر یک فیلد یا عدم وجود آن که بامقدار جواب select داخلی مقایسه می شود.
(دستورات پرس و جوی فرعی ) exists/not exists نام فیلد where نام جدول select * from
مثال:
ابتدا جداول زیر را بسازید.
جدول فروشنده(saller):
با فیلد های:saller_ name,saller _num
جدول محصولات(product):
با فیلد های:pro_ name,pro _num
جدول فروش(salle):
با فیلد های:saller_ num,pro _num,number
۱٫نام فروشندگانی که یکی از کالاهایی که احمدی فروخته است را فروخته اند نمایش داده شود.
پاسخ:
باتوجه به این که اطلاعات در دو جدول جداگانه ذخیره شده باید از پرس و جوی های فرعی استفاده کنیم.
select saller_name from saller
where saller.saller_num=salle.saller num
(این دستور ارتباط بین جداول را ابتدا چک می کند)
and pro _num in
select pro_num from salle )
where saller.saller_num=salle.saller num and
(‘saller_name=’ahmadi
و در آخر سعی کنید این دو تمرین را حل کنید تا در جلسه بعد پاسخ خودتون و پاسخ من روباهم مقایسه کنیم.
۲٫نام فروشندگانی که هیچ کالای نفروخته اند نمایش داده شود.
۳٫کد کالا هایی که بیش از یک بار فروخته شده است.
موفق باشید