پیوند جدول ها :

تا این قسمت تمام مثال ها و مسئله هایی که در SQL به آنها پاسخ دادیم ، مسئله هایی بودند که اطلاعات ما فقط از یک جدول استخراج می شد . اما در برنامه نویسی واقعی پایگاه داده ها ، ما مجبور هستیم که اطلاعات خود را از بیش از یک جدول استخراج کنیم . در این حالت ما ابتدا باید جدول هایی که می خواهیم اطلاعات را از آنها استخراج کنیم ، با هم پیوند دهیم . هدف از ایجاد این ارتباط تلفیق اطلاعات در جدول ها و چاپ اطلاعات مورد نظر در خروجی است .

مفاهیم اولیه :

برای پیوند دادن جدول ها ابتدا باید چند مفهوم زیر را بشناسیم :

  1. کلید اصلی : فیلد کلید اصلی در یک جدول ، فیلدی است که شرایط زیر را داشته باشد :
    1. مقدار آن برای هر نمونه رکورد ( سطر ) منحصر به فرد و غیر تکراری باشد . به عبارت دیگر هیچ ۲ رکوردی در یک جدول در این فیلد مقدار یکسان نداشته باشد . کلید اصلی وجه تمایز ۲ نمونه رکورد مختلف در یک جدول است .
    2. طول مقادیر آن حدامکان کوتاه باشد .

نکته : یک جدول می تواند بیش از یک کلید اصلی داشته باشد .
مثال : فیلد شماره دانشجویی در جدول Student کلید اصلی است . هیچ دو دانشجویی نمی توانند دارای شماره دانشجویی یکسان باشند .

  1. کلید خارجی : کلید خارجی ، فیلدی است که در یک جدول کلید اصلی و در جدول دیگر به تنهایی کلید اصلی نباشد . از کلید خارجی برای ارتباط یک به چند ۲ جدول با هم استفاده می شود .

شرط ارتباط ۲ جدول :

برای ارتباط بین جدول ها باید شرط های زیر برقرار باشد . باید قبل از طراحی پایگاه داده و جدول های آن موارد زیر را جهت ارتباط جدول های مورد نظر رعایت کرد .

  1. وجود فیلد مشترک دقیقا از یک نوع و یک سایز .
  2. فیلد مشترک در یکی از جدول ها کلید اصلی و در جدول دیگر کلید خارجی باشد .

معرفی ۲ جدول دیگر :

از این به بعد ما در مثال های خود از ۲ جدول دیگر به غیر از جدول Student ، به نام های Courses ( درس ها ) و Selection ( انتخاب واحد ) به شرح زیر استفاده می کنیم :

Courses Table
Course ID Co Title Credit Co Type
کد درس
( کلید اصلی )
عنوان درس تعداد واحد نوع درس

 

Selection Table
Student ID Course ID Term Year Grade
شماره دانشجویی
( کلید اصلی خارجی )
کد درس
( کلید اصلی  خارجی )
ترم تحصیلی سال تحصیلی نمره

نکته مهم : در تمام مثال های قبلی ، ما در دستور Select فقط نام ستون ها را به تنهایی ذکر می کردیم ، زیرا در آن زمان ، اطلاعات ما فقط از یک جدول استخراج می شد . اما در هنگام پیوند دو جدول و استفاده از چند جدول در دستور Select باید نام ستون را به همراه نام جدول مربوط به آن ذکر کرد . این کار ۲ دلیل اصلی دارد :

  1. باعث تمایز ستون های مشترک در جدول ها از هم می شود و مشخص می کند که هر ستون مربوط به کدام جدول است .
  2. باعث خوانایی و دقت بیشتر برنامه می شود .

شکل کلی این دستور به صورت زیر است :

نام ستون . نام جدول

مثال : انتخاب ستون 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;
کد
Name Family Term Year
Ehsan Amiri ۱ ۸۵ – ۸۶
Ahmad Rezaee ۱ ۸۵ – ۸۶
خروجی

 

مثال : نام دروسی را ارائه دهید که دانشجو با شماره دانشجویی ۱۰۲۵۴۸۶۱ انتخاب کرده است :

مثال
Select  Courses.Course ID , Courses.Co Title
from  Courses , selection
Where   Courses.Course ID = selection.Course ID
AND Selection.Student ID = 102548861 ;
کد
Course ID Course Title
۱۰۱۱ پایگاه داده
۱۰۱۳ زبان تخصصی
خروجی

مثال : نام و نام خانوادگی دانشجویانی را ارائه دهید که درس با کد ۱۰۱۳ در سال تحصیلی ۸۴ – ۸۵ را با نمره بالاتر از ۱۵ گذارنده اند :

مثال
SELECT  Students.Name , Students.Family
From  Students , Selection
Where   Students.Studentid = Selection.Studentid
And  Selection.Courseid = ‘1013’  And  Year = ’84 – 85′  And  Grade > 15 ;
کد
Name Family
Sahar Ahamdi
Hesam Razavi
خروجی

 

پیوند بیش از ۲ جدول به هم :

گاهی اوقات لازم است که اطلاعات مورد نیاز ما از ۳ جدول یا بیشتر استخراج شود . در این حالت باید کلیه جدول ها را به هم پیوند دهیم به این صورت که معمولا از یک جدول سوم برای پیوند ۲ جدول دیگر استفاده می شود و ۲ به ۲ جدول هایی که با هم فیلد مشترک دارند را با ذکر شرط پیوند در دستور 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 = ‘ نظری ;
کد
Name Family CoTitle CoType
Zahra Hosini زبان تخصصی نظری
Sahar Ahamadi زبان تخصصی نظری
Hesam Razavi زبان تخصصی نظری
خروجی