Sql

|

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

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

دراین صورت ما باید ابتدا جدول هایی که می خواهیم از آن ها اطلاعات به دست آوریم را یکی کنیم.هدف از این کار تلفیق اطلاعات در جداول و چاپ اطلاعات درخواستی در خروجی است.

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

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

1.کلید اصلی:فیلد کلید اصلی در جدول دارای شرایط زیر است:

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

ب:طول مقادیر آن تا جایی که ممکن است کوتاه باشد.

نکته:یک جدول می تواند بیش از یک کلید اصلی داشته باشد.

برای مثال فیلد شماره دانشجویی در جدول student کلید اصلی ما می باشد و هیچ 2 دانشجوی نمیتوانند دارای شماره دانشجویی مشابه باشند.

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

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

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

1.وجود فیلد مشترک دقیقا از یک نوع و یک سایز.

2.فیلد مشترک در یکی از جدول ها کلید اصلی ودر جدول دیگر کلید خارجی.

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

بعد از این در مثال های خود از 2 جدول دیگرغیر از جدول student ,به نام های courses(درس ها) و selection(انتخاب واحد) مانند زیر استفاده میکنیم:

Course table

Co type

credit

Co title

Cours ID

نوع درس

تعداد واحد

عنوان درس

کد درس(کلید اصلی)

x

Selection table

grade

year

term

Course ID

Student ID

نمره

سال تحصیلی

ترم تحصیلی

کد درس(کلید اصلی خارجی)

شماره دانشجویی(کلید اصلی خارجی)

نکته مهم:در تمام مثال های قبل در دستور select نام ستون هارا تنها ذکر میکردیم,زیرا در آنموقع اطلاعات ما تنها از یک جدول به دست می آمد اما در هنگام پیوند 2 جدول و استفاده از چند جدول در دستور select باید نام ستون را به همراه نام جدول مربوط به آن ذکر کرد . اين کار به 2 دليل اصلی است:

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

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

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

برای مثال انتخاب ستون student ID از جدول student:

Student.studentID

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

در اين قسمت با نشان دادن چندين مثال ،حالت های مختلف پيوند جدول ها را مورد بررسی قرار می دهیم . از داده های موجود در جدول های زير برای مثال ها استفاده می کنيم :

دقت کنید کهجدول انتخاب واحد نشان می دهد که هر دانشجو چه واحدهای درسی را در چه ترم و سال و با چه نمره ای پشت سرگذاشته است .

Student table

Grade

City

Major

Family

Name

Student ID

15

mashhad

hardware

khorsandi

ali

63927463

16

tehran

software

ahmadi

maryam

18746094

14

esfahan

software

faraji

meysam

98546247

18

tabriz

hardware

nikfetrat

aria

98453287

17

shiraz

hardware

khaleghi

leyla

46382976

Courses Table

Co Type

Credit

Co Title

Course ID

عملی

3

پایگاه داده

1122

عملی

3

مباحث ویژه

1123

نظری

2

زبان عمومی

1124

Selection Table

Grade

Year

Term

Course ID

Student ID

13

91-92

3

1122

13456548

14

92-93

2

1123

65728794

14

90-91

4

1124

76345862

16

92-93

2

1125

98765683

17

92-93

2

1126

12348764

16

92-93

2

1127

98654323

18

92-93

2

1128

76463423

12

93-94

1

1129

19864853

13

92-93

2

1122

11345578

19

92-93

2

1124

23435682

شکل کلی پيوند 2 جدول برای استخراج اطلاعات به صورت زير است :

Select نام ستون های مورد نظر برای نمايش
From نام جدول ها
where برابر قرار دادن فيلدهای مشترک 2 جدول
And بقيه شرط های مورد نظر

در اين حالت ابتدا در دستور Select نام ستون هايی که میخواهیم از 2 جدول نمايش دهيم را انتخاب می کنيم .سپس نام 2 جدول را در مقابل دستور From مینویسیم و در اولين شرط دستور Where نام فيلد مشترک را از هر 2 جدول نوشته و آنها را برابر هم قرار می دهيم . اين شرط ، شرط برقراری پيوند و تلفيق اطلاعات 2 جدول است . در ادامه نیز می توان شروط ديگری را برای استخراج اطلاعات تعيين کنیم . در مثال های زير اين مسئله را بررسی می کنيم :

برایم مثالنام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 2 سال تحصيلی 93-94، درس با کد 1123 را انتخاب کرده اند :

Select Students.Name , Students.Family , Selection.Term ,Selection.Year
From Students , Selection
where Student.Student ID = Selection.Stuedent ID
AND Course ID = 1123 AND Term = 2 AND Year = 93-94
Order By Students.Family;

Year

Term

Family

Name

93-94

2

goodarzi

ali

93-94

2

amini

ahmad

مثال دیگرنام دروسی را ارائه می دهد که دانشجو با شماره دانشجويی 34879876 انتخاب کرده است :

Select Courses.Course ID , Courses.Co Title
from Courses , selection
Where Courses.Course ID = selection.Course ID
ANDSelection.Student ID = 34879876;

Course Title

Course ID

پایگاه داده

1123

زبان عمومی

1127

در مثال بعدنام و نام خانوادگی دانشجويانی را ارائه می دهد که درس با کد 1125 در سال تحصيلی 93-94 را با نمره بالاتر از 12 گذارنده اند :

SELECT Students.Name , Students.Family
From Students , Selection
Where Students.Studentid = Selection.Studentid
And Selection.Courseid = '1125' And Year = 93-94' And Grade > 12;

Family

Name

sotoode

nasim

Bozorg mehr

ali

پيوند بيش از 2 جدول به هم :

گاهی وقت ها لازم است که اطلاعات مورد نياز ما از 3 جدول يا بيشتر استخراج شود . در اين حالت بايد کليه جدول ها را به هم پيوند دهيم بدین شکل که معمولا از يک جدول سوم برای پيوند 2 جدول ديگر استفاده میکنیم و 2 به 2 جدول هايی که با هم فيلد مشترک دارند را با ذکر شرط پيوند در دستور Where به هم پيوند می دهيم . سپس بقيه شرط های دلخواه را نيزاضافه می کنيم .

شکل کلی اين حالت به این صورت است :

Select نام ستون های مورد نظر از جدول ها
From نام تمام جدول ها
Where برابر قرار دادن فيلد مشترک جدول های 1 و 2
AND برابر قرار دادن فيلدهای مشترک جدول های 2 و 3
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 = 'تخصصی ';

CoType

CoTitle

Family

Name

تخصصی

پایگاه داده

alavi

ali

تخصصی

پایگاه داده

salighe

ahmad

تخصصی

پایگاه داده

katari

soheil

* با توجه به اطَلاعات جدول های اصلی متوجه درست بودن نتايج خروجی خواهيد شد .

دریافت آخرین مطالب وبلاگ در کانال داتینه

علی نعیمی

علی نعیمی هستم،دارای لیسانس سخت افزار.
از سال 90 بصورت تخصصی به فراگیری زبان سی شارپ پرداختم. در حال حاضر مسلط به سی شارپ، جاوا، پایگاه داده و زبان های تحت وب هستم.

نظرات
نظر بدهید