دستورات SQL – قسمت دوم

دسته‌بندی:
بدون دیدگاه

در قسمت اول آموزش دستورات SQL دستورات پایه و مهم SQL را بررسی کردیم. در این نوشته با بررسی چند مثال دستورات آموزش داده شده را بهتر بررسی میکنیم. همانطور که در جلسه قبل آموزش گفتیم، از دیتابیس university که شامل جداول زیر است استفاده میکنیم:
جدول student (دانشجو)، clg(دانشکده یا بخش)، course (درس)، prof (استاد) و sec(گروه) است.


Student (s# , sname , city , clg#)
Clg(clg#, clgname , prof# , city)
Course(crs# , cname , unit , clg#)
Prof(prof# , pname , degree , office)
Sec(s# , crs#, prof# , term , score)

در جدول دانشجو اطلاعاتی نظیر شماره دانشجو ، نام دانشجو، شهر دانشجو و کد دانشکده وجود دارد.
در جدول دانشکده اطلاعاتی نظیر شماره دانشکده، نام دانشکده، کد رییس دانشکده و شهر مکان دانشکده وجود دارد.
در جدول course اطلاعاتی نظیر کد درس، نام درس، تعداد واحد درس، کد دانشکده ای که این درس را ارائه کرده است وجود دارد.
در جدول prof اطلاعاتی نظیر کد استاد، نام استاد، مدرک استاد و اتاق کار استاد وجود دارد.
در جدول sec که مهم‌ترین جدول دیتابیس است مشخص می‌شود که چه دانشجویی در چه درسی و با چه استادی در چه ترمی چه نمره ای گرفته است!

مثال ۱- پرس‌وجویی بنویسید که نام اساتیدی که درس پایگاه داده را تدریس کرده‌اند را در خروجی نمایش دهد

در مثال ۱۰ آموزش دستورات SQL این مثال توضیح داده شده است.

مثال ۲- پرس‌وجویی بنویسید که تعداد دروس دانشکده کامپیوتر را چاپ کند.

برای نوشتن این پرس‌وجو به دو جدول course و clg نیاز است که با استفاده از شرط #clg این دو جدول را پیوند میزنیم. همچنین شرط clgname=’computer’ را در شرط پیوند قید می‌کنیم.

مثال ۳- پرس‌وجویی بنویسید که تعداد دروس ۳ واحدی دانشکده کامپیوتر را نمایش دهد.

شبیه به مثال ۲ با این تفاوت که شرط unit=3 اضافه شده است

مثال ۴- پرس‌وجویی بنویسید که لیستی از دانشجویانی که بیش از ۱۰۰ واحد پاس کرده‌اند را در خروجی نمایش دهد

در این مثال به سه جدول student و sec و course نیاز است. در خط ۲ تا ۵ دو جدول sec و course را پیوند میزنیم و نام جدول حاصل table1 قرار میدهیم. و در ادامه دو جدول table1 و sec را پیوند می‌زنیم. جدول حاصل جدولی خواهد بود که در کنار هر سطر از جدول Sec اطلاعات درس (که تعداد واحد نیز شامل می‌شود) و اطلاعات دانشجو قرار دارد. حال بر اساس #s گروه بندی میکنیم تا دروسی که هر دانشجو پاس کرده است در یک گروه قرار گیرد. در نهایت با استفاده از شرط having دانشجویانی که بیش از ۱۰۰ واحد پاس کرده اند در خروجی نمایش می‌دهد.

نکات:
۱- همانطور که در جلسه قبل گفتیم هر صفتی که در group by ظاهر می‌شود در دستور select هم باید ظاهر شود
۲- از آنجایی که در این مثال و در پیوند سه جدول دو صفت #s داریم (یکی برای جدول student و دیگری sec) حتما موقع استفاده از صفت #s باید دقیقا مشخص کنیم که با #s کدام جدول میخواهیم کار کنیم. به همین دلیل است که در خط ۷ از #sec.s استفاده شده است.

مثال ۵- پرس‌وجویی بنویسید که مجموع واحدهای گذرانده دانشجویانی با نام رضایی را در خروجی نمایش دهد

مثال ۶- پرس‌وجویی بنویسید که مشخصات اساتیدی که در ترم اول ۹۷ بیش از ۲۰ واحد تدریس کرده اند را نمایش دهد.

مثال ۷ – مشخصات اساتیدی که هیچ درس یک واحدی تدریس نکرده اند

در این مثال ابتدا اساتیدی که درس یک واحدی ارائه کرده‌اند را پیدا می‍کنیم و از کل اساتید کم می‌کنیم.

مثال ۸- رییس دانشکده‌هایی که هیچ دانشجوی افتاده ای ندارند.

از پیوند دو جدول prof و clg بر اساس #prof جدولی بدست می‌آید که مشخصات رییس دانشکده ها را نمایش می‌دهد. برای اینکه پرس‌وجوی خواسته شده در مثال را پیاده کنیم، اساتیدی که دانشجوی افتاده دارند را از کل رییس دانشگده ها کم می کنیم. به همین دلیل در خط ۴ تا ۶ زیر پرس و جویی نوشته شده است که اساتیدی که دانشجوی افتاده دارند را بر میگرداند.

مثال ۹- مشخصات دانشکده هایی که بیشتر از ۱۰۰ دانشجو دارند.

مثال ۱۰- مشخصات دانشکده هایی که هیچ درس یک واحدی ارائه نکرده اند.

مثال ۱۱- مشخصات دانشجویانی که همه دروس دانشکده برق را گذرانده اند.

مثال ۱۲- مشخصات دانشجویانی که همه دروس دانشکده خود را گذرانده اند.

  • نویسنده
    حمید جهانگیری
  • تعداد بازدید
    973
۰دیدگاه فرستاده شده است.
شما هم دیدگاه خود را بنویسید
نوشته‌های ویژه
اخبار ویژه

با عضویت در خبرنامه، تازه‌ترین نوشته‌های وبلاگ را در ایمیل‌تان دریافت کنید.
برای عضویت نشانی ایمیل خود را وارد کرده و بر روی دکمه عضویت کلیک نمایید.