دستور 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:
select *
from Course
خروجی جدول Course:
دستور join ای داریم بنام join بر اساس جدول چپ یا left join و join بر اساس جدول راست یا right join که می خواهیم جدول Student و Course را بر اساس جدول چپ پیوند دهیم (left join).
دستور left join
از دستور left outer join برای این عملیات استفاده می کنیم .
select *
from Student left outer join Course
on student.id=Course.ID_FK_Student
خروجی Query دستور left outer join را با هم مشاهده می کنیم :
ملاک اصلی ما جدول سمت چپ است (یعنی جدول Student ) پس تمام مقادیر جدول سمت چپ نمایش داده می شود و بعد از آن مقادیر مناسب از جدول سمت راست نمایش می دهد مثلا امید فلاح با این که نمره ای برای آن ثبت نشده است چون در جدول سمت چپ آمده است نمایش می دهد و به جای نمره ای که وجود ندارد عبارت null را قرار می دهد .
دستور 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 را با هم مشاهده می کنیم :
در اینجا ملاک اصلی ما جدول سمت راست است (یعنی جدول Course) پس تمام مقادیر جدول سمت راست را نمایش می دهد و بعد از آن مقادیر مناسب از جدول سمت چپ را نمایش می دهد مثلا امید فلاح که در جدول قبلی مشاهده کردیم چون نمره ای برای آن در جدول Course ثبت نشده است ، پس در اینجا در نظر گرفته نمی شود .
دستور full join
این بار می خواهیم جدول Student و Course را بر اساس کل جداول پیوند دهیم .
select *
from Student full outer join Course
on student.id=Course.ID_FK_Student
خروجی Query دستور full outer 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 را با هم مشاهده می کنیم :
باید در نظر داشته باشیم چون از تابع 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 ستون سومی است .
مثال 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 را با هم مشاهده می کنیم :
نکته :ولی بهتر است که به جای شماره ستون نام ستون را قرار دهیم .
مثال 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 را با هم مشاهده می کنیم:
مشاهده می کنیم که استفاده از نام ستون خوانایی برنامه را بالاتر برده است
در دستور 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 را با هم مشاهده می کنیم :
نکته دستور شرطی را قبل از دستور 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 را با هم مشاهده می کنیم :
مشاهده می کنیم که اسامی تمام دانش آموزان را نمایش می دهد به غیر از فرزانه آقایی که حرف اول اسمش ف است .
نکته آخر اگر بخواهیم که بیش از 2 جدول را با هم جوین کنیم کافی است که بعد از فیلد رابط ، کلمه ی inner join را دوباره بنویسیم و نام جدولی که می خواهیم جوین کنیم و بعد فیلدهای رابط بین این جداول را بنویسیم .
select نام فیلد های مورد نظر
from نام جدول اولی inner join نام جدول دومی
on
فیلدهای رابط inner join نام جدول سومی
on
فیلدهای رابط
در این جلسه با دستور left join ،right join و full join همراه با چندین مثال از دستور join آشنا شدیم. در جلسه بعد قصد داریم تا شما را با جداول میانی آشنا کنیم .
با آموزش مبانی SQL Server در خدمت شما هستیم. لطفا سوالات ، نظرات و پیشنهادات خود را در قسمت دیدگاه ها با ما در میان بگذارید.
به این مقاله چند تا ستاره میدی؟[تعداد رای: 8 امتیاز: 4]
سلام و خسته نباشید
گمونم خسته شدینا. . . سرعتتون کم شده!!!
در کل مرسی دوره خوبی هستش.
سلاو عرض ادب
از ارسال نظر شما ممنون هستیم ، آموزش ها به زودی ارائه می گردد.
با تشکر از همراهی شما
با سلام ممنون از مطالب ارزنده شما موفق و موئید باشید
خیلی خوب بود همشو خوندم به دوستان هم معرفی کردم