دستور left join ، right join و full join

با نام و یاد خداوند. سلام خدمت کاربران گرامی
در جلسه قبل با دستور inner join آشنا شدیم. با استفاده از دستور inner join می توانستیم ارتباط بین جداول را برقرار کنیم . در این جلسه قصد داریم شما را با دستور  join  بر اساس جدول چپ (left join) و join  بر اساس جدول راست (right join)  و همچنین بر اساس کل جداول (full join) آشنا کنیم  .

دو تا جدول به نام های Student و Course داشتیم . ابتدا با استفاده از دستور select اطلاعات جداول خود را مشاهده می کنیم.

select *
from Student

خروجی جدول student:

دستور join در SQL -تصویر 1

 

select *
from Course

خروجی جدول Course:

دستور join در SQL -تصویر 2

دستور join ای داریم بنام join  بر اساس جدول چپ یا  left join و join  بر اساس جدول راست یا  right join  که می خواهیم جدول Student و Course را بر اساس جدول چپ پیوند دهیم (left join).

دستور left join

دستور left join | دستور right join | تصویر left join

از دستور left outer join برای این عملیات استفاده می کنیم .

select *
from Student left outer join Course
on student.id=Course.ID_FK_Student

خروجی Query دستور left outer join را با هم مشاهده می کنیم :

دستور left join | دستور right join | مثال برای دستور left join

ملاک اصلی ما جدول سمت چپ است (یعنی جدول Student ) پس تمام مقادیر جدول سمت چپ نمایش داده می شود و بعد از آن مقادیر مناسب از جدول سمت راست نمایش می دهد مثلا امید فلاح با این که نمره ای برای آن ثبت نشده است چون  در جدول سمت چپ  آمده است نمایش می دهد و به جای نمره ای که وجود ندارد عبارت null  را قرار می دهد .

دستور right join

دستور left join | دستور right join | تصویر right join

join بر اساس جدول راست نیز مشابه join بر اساس جدول چپ  می باشد و از دستور right outer join برای این عملیات استفاده می کنیم .

میخواهیم جدول Student و Course را بر اساس جدول راست  پیوند دهیم.

select *
from Student right outer join Course
on student.id=Course.ID_FK_Student

خروجی Query دستور right outer join را با هم مشاهده می کنیم :

دستور left join | دستور right join | مثال برای دستور right join

در اینجا ملاک اصلی ما جدول سمت راست  است (یعنی جدول Course) پس تمام مقادیر جدول سمت راست را نمایش می دهد و بعد از آن مقادیر مناسب از جدول سمت چپ را  نمایش می دهد مثلا امید فلاح که در جدول قبلی مشاهده کردیم چون نمره ای برای آن در جدول Course ثبت نشده است ، پس در اینجا در نظر گرفته نمی شود .

دستور full join

دستور left join | دستور right join | تصویر full join

این بار می خواهیم جدول Student و Course را بر اساس  کل جداول پیوند دهیم .

select *
from Student full outer join Course
on student.id=Course.ID_FK_Student

خروجی Query دستور full outer join را با هم مشاهده می کنیم:

دستور left join | دستور right join | مثال برای دستور full join

در اینجا ملاک کل جداول بوده است که مقادیر کامل دو جدول را نمایش می دهد .با دستور join  و انواع آن آشنا شدیم .مثالی می زنیم تا با کاربردهای این دستورات بهتر آشنا شوید .

 

چند مثال برای آشنایی با کاربرد دستور join

مثال 1)  join بنویسید که معدل هر دانش آموز را جلوی اسمش نمایش دهد ؟

select NameStudent ,lastname ,avg (Numbeer)
from Student inner join Course
on student.id=Course.ID_FK_Student
group by NameStudent , lastname

خروجی Query را با هم مشاهده می کنیم :

دستور left join | دستور right join | دستور full join - مثال

باید در نظر داشته باشیم چون از تابع  avg  استفاده کرده ایم حتما از دستور group by استفاده کنیم .

مثال 2) همین join  را بر اساس معدل دانش آموز مرتب کنید ؟

select NameStudent ,lastname ,avg (Numbeer)
from Student inner join Course
on student.id=Course.ID_FK_Student
group by NameStudent , lastname
order by 3

عدد جلوی دستور order by  نشان دهنده شماره ستونی  از جدول می باشد  که می خواهیم بر اساس آن ستون  مرتب سازی انجام شود . ستون avg  ستون سومی است  .

دستور left join | دستور right join | دستور full join - مثال

مثال 3) اگر بخواهیم بر عکس هم (یعنی از معدل بیشتر به کمتری ) مرتب سازی انجام شود از desc استفاده می کنیم:

select NameStudent ,lastname ,avg (Numbeer)
from Student inner join Course
on student.id=Course.ID_FK_Student
group by NameStudent , lastname
order by 3 desc

 خروجی Query را با هم مشاهده می کنیم :

دستور left join | دستور right join | دستور full join - مثال

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

مثال 4) برای ستون معدل هم یک نام در نظر می گیریم تا این ستون هم یک نام داشته باشد و بر اساس نام ستون آن  مرتب سازی صورت گیرد .

select NameStudent ,lastname ,avg (Numbeer) as AVG
from Student inner join Course
on student.id=Course.ID_FK_Student
group by NameStudent , lastname
order by AVG desc

خروجی Query را با هم مشاهده می کنیم:

دستور left join | دستور right join | دستور full join - مثال

مشاهده می کنیم که استفاده از نام ستون خوانایی برنامه را بالاتر برده است

در دستور join امکان گذاشتن شرط نیز وجود دارد.

مثال 5) مثلا اگر خواسته باشیم اسامی افرادی که حرف اول نامشان ف است را نمایش دهد؟

select NameStudent ,lastname ,avg (Numbeer) as AVG
from Student inner join Course
on student.id=Course.ID_FK_Student
where NameStudent  like ‘ف’+’%’
group by NameStudent , lastname
order by AVG desc

خروجی Query را با هم مشاهده می کنیم :

دستور left join | دستور right join | دستور full join -مثال

نکته دستور شرطی را قبل از دستور group by استفاده می کنیم

مثال 6)یا بر عکس اگر خواسته باشیم به غیر از کسانی که حرف اول نامشان ف است را نمایش دهد؟

select NameStudent ,lastname ,avg (Numbeer) as AVG
from Student inner join Course
on student.id=Course.ID_FK_Student
where NameStudent not like ‘ف’+’%’
group by NameStudent , lastname
order by AVG desc

خروجی Query را با هم مشاهده می کنیم :

دستور left join | دستور right join | دستور full join

مشاهده می کنیم که اسامی تمام دانش آموزان را نمایش می دهد به غیر از فرزانه آقایی که حرف اول اسمش ف است .

نکته آخر اگر بخواهیم که بیش از 2 جدول را با هم جوین کنیم کافی است که بعد از فیلد  رابط  ، کلمه ی  inner join  را دوباره بنویسیم و نام جدولی که می خواهیم جوین کنیم و بعد  فیلدهای رابط بین این جداول را  بنویسیم .

select نام فیلد های مورد نظر
from نام جدول اولی   inner join نام جدول دومی 
on
 فیلدهای رابط  inner join نام جدول سومی  
on
فیلدهای رابط

 

در این جلسه با دستور left join  ،right join  و  full join همراه  با چندین مثال از دستور join آشنا شدیم. در جلسه بعد قصد داریم تا شما را با جداول میانی آشنا کنیم .

با  آموزش مبانی SQL Server در خدمت شما هستیم. لطفا سوالات ، نظرات و پیشنهادات خود را در قسمت دیدگاه ها با ما در میان بگذارید.

به این مقاله چند تا ستاره میدی؟
[تعداد رای: 0 امتیاز: 0]