آشنایی با SQL – بخش یازدهم – آشنایی با پیوند جدول ها

SQL

چنانچه بخواهیم گزارشی تهیه کنیم که در تولید آن، بازیابی و ترکیب داده های  بیش از یک رکورد یا یک جدول بر اساس رابطه ای که مابین آنها وجود دارد، مورد نیاز باشد از پیوند استفاده می کنیم.

آشنائی با کاربرد join

فرض کنید جدول های Personnel و City با داده های زیر موجود است :

City-Table
Personnel-Table

فیلد CityID در جدول Personel از طریق اشاره به فیلدID  از جدول City شهر یک کارمند را مشخص می کند. به  CityID  در اصطلاح کلید خارجی (Foreign key – FK) می گویند.

می خواهیم گزارشی از اسامی کارمندان  تهیه کنیم به نحوی که به جای شناسه شهر (CityID)  نام شهر نمایش داده شود :

SELECT Personnel.Family, City.Name
FROM Personnel, City
WEHERE Personnel.CityID = City.ID;

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

سئوال ۱ : اگر در مثال بالا شرط را کاملا حذف کنیم چه نتیجه ای بدست می آید؟

سئوال ۲ : با توجه به اینکه نام جداول پس از FROM آمده است، آیا ذکر آنها در مقابل عبارت SELECT اجباریست؟

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

SELECT Personnel.Family, City.Name
FROM Personnel
INNER JOIN City
ON Personnel.CityID = City.ID;

با استفاده از عبارت AS می توان دستورات را خلاصه نویسی کرد. این روش خصوصا زمانی که حجم و پیچیدگی دستورات زیاد است راهگشا خواهد بود.

SELECT P.Family, C.Name
FROM Personnel AS P
INNER JOIN City AS C
ON P.CityID = C.ID;

 تمرین : با استفاده از جدول ها و داده های بالا، دستورات زیر را اجرا و درمورد نتایج و کاربردهای احتمالی بحث کنید.

SELECT P.Family, C.Name
FROM Personnel AS P
RIGHT JOIN City AS C
ON P.CityID = C.ID;

SELECT P.Family, C.Name
FROM Personnel AS P
LEFT JOIN City AS C
ON P.CityID = C.ID;

SELECT P.Family, C.Name
FROM Personnel AS P
FULL JOIN City AS C
ON P.CityID = C.ID;

SELECT P.Family, C.Name
FROM Personnel AS P
CROSS JOIN City AS C;

تمرین : مثال های قبلی همگی درباره پیوند دو جدول بودند. آیا می توانید مثالی کاربردی و دستوراتی برای پیوند سه جدول ارائه دهید؟

تمرین : مثالی ارائه دهید که در آن لازم باشد یک جدول با خودش پیوند زده شود. آیا می توانید دستورات SQL لازم را بنویسید؟