پیوند جدول ها :
تا این قسمت تمام مثال ها و مسئله هایی که در SQL به آنها پاسخ دادیم ، مسئله هایی بودند که اطلاعات ما فقط از یک جدول استخراج می شد . اما در برنامه نویسی واقعی پایگاه داده ها ، ما مجبور هستیم که اطلاعات خود را از بیش از یک جدول استخراج کنیم . در این حالت ما ابتدا باید جدول هایی که می خواهیم اطلاعات را از آنها استخراج کنیم ، با هم پیوند دهیم . هدف از ایجاد این ارتباط تلفیق اطلاعات در جدول ها و چاپ اطلاعات مورد نظر در خروجی است .
مفاهیم اولیه :
برای پیوند دادن جدول ها ابتدا باید چند مفهوم زیر را بشناسیم :
- کلید اصلی : فیلد کلید اصلی در یک جدول ، فیلدی است که شرایط زیر را داشته باشد :
- مقدار آن برای هر نمونه رکورد ( سطر ) منحصر به فرد و غیر تکراری باشد . به عبارت دیگر هیچ ۲ رکوردی در یک جدول در این فیلد مقدار یکسان نداشته باشد . کلید اصلی وجه تمایز ۲ نمونه رکورد مختلف در یک جدول است .
- طول مقادیر آن حدامکان کوتاه باشد .
نکته : یک جدول می تواند بیش از یک کلید اصلی داشته باشد .
مثال : فیلد شماره دانشجویی در جدول Student کلید اصلی است . هیچ دو دانشجویی نمی توانند دارای شماره دانشجویی یکسان باشند .
- کلید خارجی : کلید خارجی ، فیلدی است که در یک جدول کلید اصلی و در جدول دیگر به تنهایی کلید اصلی نباشد . از کلید خارجی برای ارتباط یک به چند ۲ جدول با هم استفاده می شود .
شرط ارتباط ۲ جدول :
برای ارتباط بین جدول ها باید شرط های زیر برقرار باشد . باید قبل از طراحی پایگاه داده و جدول های آن موارد زیر را جهت ارتباط جدول های مورد نظر رعایت کرد .
- وجود فیلد مشترک دقیقا از یک نوع و یک سایز .
- فیلد مشترک در یکی از جدول ها کلید اصلی و در جدول دیگر کلید خارجی باشد .
معرفی ۲ جدول دیگر :
از این به بعد ما در مثال های خود از ۲ جدول دیگر به غیر از جدول Student ، به نام های Courses ( درس ها ) و Selection ( انتخاب واحد ) به شرح زیر استفاده می کنیم :
Courses Table | |||
Course ID | Co Title | Credit | Co Type |
کد درس ( کلید اصلی ) |
عنوان درس | تعداد واحد | نوع درس |
Selection Table | ||||
Student ID | Course ID | Term | Year | Grade |
شماره دانشجویی ( کلید اصلی خارجی ) |
کد درس ( کلید اصلی خارجی ) |
ترم تحصیلی | سال تحصیلی | نمره |
نکته مهم : در تمام مثال های قبلی ، ما در دستور Select فقط نام ستون ها را به تنهایی ذکر می کردیم ، زیرا در آن زمان ، اطلاعات ما فقط از یک جدول استخراج می شد . اما در هنگام پیوند دو جدول و استفاده از چند جدول در دستور Select باید نام ستون را به همراه نام جدول مربوط به آن ذکر کرد . این کار ۲ دلیل اصلی دارد :
- باعث تمایز ستون های مشترک در جدول ها از هم می شود و مشخص می کند که هر ستون مربوط به کدام جدول است .
- باعث خوانایی و دقت بیشتر برنامه می شود .
شکل کلی این دستور به صورت زیر است :
نام ستون . نام جدول
مثال : انتخاب ستون StudedntID از جدول Student :
Student.StudentID
مثال های پیوند جدول ها :
در این قسمت با ارائه چندین مثال ، انواع حالت های مختلف پیوند جدول ها را بررسی می کنیم . از داده های موجود در جداول زیر برای مثال ها استفاده می کنیم :
توجه : جدول انتخاب واحد نشان دهنده این است که هر دانشجو چه واحدهای درسی را در چه ترم و سال و با چه نمره ای گذارنده است .
Student Table | |||||
Student ID | Name | Family | Major | City | Grade |
۴۱۲۵۲۲۱۴ | Ahmad | Rezaee | Hard Ware | Tehran | ۱۸ |
۱۰۷۲۴۱۱۳ | Ehsan | Amiri | Soft Ware | Karaj | ۱۴ |
۱۰۲۵۴۸۶۱ | Zahra | Hosini | Hard Ware | Tehran | ۱۷ |
۲۷۳۶۵۱۸۷ | Sahar | Ahmadi | Soft Ware | Bam | ۱۶ |
۳۵۶۵۴۴۱۵ | Hesam | Razavi | Soft Ware | Tehran | ۱۹ |
Courses Table | |||
Course ID | Co Title | Credit | Co Type |
۱۰۱۱ | پایگاه داده | ۳ | عملی |
۱۰۱۲ | مباحث ویژه | ۳ | عملی |
۱۰۱۳ | زبان تخصصی | ۲ | نطری |
Selection Table | ||||
Student ID | Course ID | Term | Year | Grade |
۴۱۲۵۲۲۱۴ | ۱۰۱۱ | ۲ | ۸۵ – ۸۶ | ۱۶ |
۱۰۷۲۴۱۱۳ | ۱۰۱۱ | ۲ | ۸۵ – ۸۶ | ۱۴ |
۴۱۲۵۲۲۱۴ | ۱۰۱۲ | ۱ | ۸۵ – ۸۶ | ۱۷ |
۱۰۷۲۴۱۱۳ | ۱۰۱۲ | ۱ | ۸۵ – ۸۶ | ۱۱ |
۱۰۲۵۴۸۶۱ | ۱۰۱۳ | ۲ | ۸۵ – ۸۶ | ۱۳ |
۱۰۲۵۴۸۶۱ | ۱۰۱۱ | ۲ | ۸۴ – ۸۵ | ۸ |
۲۷۳۶۵۱۸۷ | ۱۰۱۲ | ۱ | ۸۴ – ۸۵ | ۱۹ |
۲۷۳۶۵۱۸۷ | ۱۰۱۳ | ۱ | ۸۴ – ۸۵ | ۱۶ |
۳۵۶۵۴۴۱۵ | ۱۰۱۱ | ۲ | ۸۴ – ۸۵ | ۹ |
۳۵۶۵۴۴۱۵ | ۱۰۱۳ | ۲ | ۸۴ – ۸۵ | ۱۷ |
شکل کلی پیوند ۲ جدول برای استخراج اطلاعات به صورت زیر است :
Select نام ستون های مورد نظر برای نمایش
From نام جدول ها
where برابر قرار دادن فیلدهای مشترک ۲ جدول
And بقیه شرط های مورد نظر ;
در این حالت ابتدا در دستور Select نام ستون هایی که از ۲ جدول می خواهیم نمایش دهیم را تعیین می کنیم . سپس نام ۲ جدول را در مقابل دستور From نوشته و در اولین شرط دستور Where نام فیلد مشترک را از هر ۲ جدول نوشته و آنها را برابر هم قرار می دهیم . این شرط ، شرط برقراری پیوند و تلفیق اطلاعات ۲ جدول است . در ادامه هم می توان شرط های دیگری را برای استخراج اطلاعات تعیین کرد . در مثال های زیر این مسئله را بررسی می کنیم :
مثال : نام و نام خانوادگی دانشجویانی را ارائه دهید که در ترم ۱ سال تحصیلی ۸۵ – ۸۶ ، درس با کد ۱۰۱۲ را انتخاب کرده اند :
مثال | |||||||||||||
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; |
کد | ||||||||||||
|
خروجی |
مثال : نام دروسی را ارائه دهید که دانشجو با شماره دانشجویی ۱۰۲۵۴۸۶۱ انتخاب کرده است :
مثال | |||||||
Select Courses.Course ID , Courses.Co Title from Courses , selection Where Courses.Course ID = selection.Course ID AND Selection.Student ID = 102548861 ; |
کد | ||||||
|
خروجی |
مثال : نام و نام خانوادگی دانشجویانی را ارائه دهید که درس با کد ۱۰۱۳ در سال تحصیلی ۸۴ – ۸۵ را با نمره بالاتر از ۱۵ گذارنده اند :
مثال | |||||||
SELECT Students.Name , Students.Family From Students , Selection Where Students.Studentid = Selection.Studentid And Selection.Courseid = ‘1013’ And Year = ’84 – 85′ And Grade > 15 ; |
کد | ||||||
|
خروجی |
پیوند بیش از ۲ جدول به هم :
گاهی اوقات لازم است که اطلاعات مورد نیاز ما از ۳ جدول یا بیشتر استخراج شود . در این حالت باید کلیه جدول ها را به هم پیوند دهیم به این صورت که معمولا از یک جدول سوم برای پیوند ۲ جدول دیگر استفاده می شود و ۲ به ۲ جدول هایی که با هم فیلد مشترک دارند را با ذکر شرط پیوند در دستور Where به هم پیوند می دهیم . سپس بقیه شروط دلخواه را نیز ذکر می کنیم .
شکل کلی این حالت به صورت زیر است :
Select نام ستون های مورد نظر از جدول ها
From نام تمام جدول ها
Where برابر قرار دادن فیلد مشترک جدول های ۱ و ۲
AND برابر قرار دادن فیلدهای مشترک جدول های ۲ و ۳
AND … ;
مثال : نام و نام خانوادگی دانشجویانی را بدهید که حداقل یک درس از نوع نظری را انتخاب کرده باشند :
مثال | |||||||||||||||||
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 = ‘ نظری ‘ ; |
کد | ||||||||||||||||
|
خروجی |