استخراج اطلاعات از دو جدول
با نام و یاد خداوند. سلام خدمت کاربران گرامی
با دوره آموزش مبانی SQL Server در خدمت شما عزیزان هستیم. در جلسات قبل همه ی دستورات و select هایی که انجام می دادیم روی یک جدول بود ، یعنی فقط داده های ما از جدول Student استخراج می شد. در این جلسه قصد داریم که به آموزش استخراج اطلاعات از دو جدول را بپردازیم. ابتدا با استفاده از دستور select اطلاعات جداول خود را مشاهده می کنیم.
select *
from Student
خروجی جدول student:
خروجی جدول Course:
نکته: در جدول Course از کلید خارجی (FOREIGN KEY) استفاده شده است. کلید خارجی (FOREIGN KEY ) برای ارتباط و لینک شدن دو جدول می باشد .
با استفاده از دستوری که در زیر می نویسم می خواهیم اطلاعات را از 2 تا جدول استخراج کنیم:
select *
from student ,Course
خروجی جدول student و Course:
به عددی که در کادر قرمز رنگ نوشته شده است توجه کنید ، در جدول Course چند ردیف داده دارم (9 ردیف ) ، و در جدول Student چند ردیف (6 ردیف ) ، اما این جدول دارای 54 ردیف می باشد در واقع با نوشتن این دستور( from student,Course ) باعث می شود که تعداد ردیف های جدول student ضربدر تعداد ردیف ها ی جدول Course شود که اطلاعاتش هم غلط می باشد .
با هم این مشکل را دیدیم برای رفع این مشکل باید این Query را به شکل زیر تغییر دهیم.
select *
from student ,Course
where student.id=course.ID_FK_Student
با هم خروجی این دستور را مشاهده می کنیم:
بدین صورت که از دستور شرطی where استفاده می کنیم و می نویسیم از جدول student فیلد id آن مساوی باشد با فیلد ID_FK_Student(که این فیلد همان فیلد خارجی است برای ارتباط بین جدول student و Course )
نکته: در شکل فوق مشاهده می کنید، دو تا فیلد داریم با مقادیر مشابه ، چون از select * استفاده کرده ایم یعنی تمام فیلدها ی دو جدول را نمایش بده
برای جلوگیری از این کار ما می توانیم به جای * نام فیلدهایی که می خواهیم ببینیم را جلوی دستور select بنویسیم که برای این کار باید نام فیلدها را با علامت کاما ( ، ) از یکدیگر جدا کنیم .
select نام فیلد3 , نام فیلد 2, نام فیلد1
برای مثال :
select id,NameStudent,lastname,Lesson,Numbeer
from student ,Course
where student.id=course.ID_FK_Student
با هم خروجی این دستور را مشاهده می کنیم:
در تصویر فوق مشاهده می کنید که زیر فیلد id خط قرمز کشیده شده است و در کادر Messages پیغام خطا داده است ، این پیغام به ما می گوید که در هر دو جدول ستونی بنام id وجود دارد و ما باید مشخص کنیم که id کدام جدول مد نظرمان است .
برای این که مشخص کنیم که کدام فیلد از کدام جدول آمده است از فرمول زیر استفاده می کنیم
نام فیلد . اسم جدول
student.id
Course.id
دستور بالا را بدین شکل تغییر می دهیم:
select student.id,NameStudent,lastname,Lesson,Numbeer
from student ,Course
where student.id=course.ID_FK_Student
با هم خروجی این دستور را مشاهده می کنیم:
نکته: بهتر است برای خوانایی بیشتر سعی کنید که نام جدول را با نام فیلد بزنید . و به جای اینکه نام جدول به این بزرگی را بنویسیم می توانیم یک دگرگونی در نام جدول انجام دهیم .
نام جدول را به شکل زیر می نویسیم
اسم دلخواهی که می خواهیم به جای نام جدولمان باشد نام جدول
student St
Course Co
در این مثال دستورات بدون تغییر نام جداول نمایش داده می شود:
select student.id,student.NameStudent,student.lastname,Course.Lesson,Course.Numbeer
from student ,Course
where student.id=course.ID_FK_Student
با هم خروجی این دستور را مشاهده می کنیم:
در این مثال دستورات با انتخاب نام مخفف برای جداول نمایش داده شده است:
select st.id,st.NameStudet,st.lastname,Co.Lesson,Co.Numbeer
from student st ,Course Co
where st.id=Co.ID_FK_Student
با هم خروجی این دستور را مشاهده می کنیم:
مشاهده می کنیم که خروجی این 2 کوئری یکسان می باشد و ما برای خوانایی بیشتر می توانیم از دگرگونی نام جداول استفاده کنیم .در این جلسه با استخراج اطلاعات از دو جدول آشنا شدیم ، در جلسه بعد قصد داریم تا با مفهوم کوئری های تو در تو بیشتر آشنا شویم.
با آموزش مبانی SQL Server در خدمت شما هستیم. لطفا سوالات ، نظرات و پیشنهادات خود را در قسمت دیدگاه ها با ما در میان بگذارید.
به این مقاله چند تا ستاره میدی؟[تعداد رای: 20 امتیاز: 4.2]
سلام.میخوام اطلاعات دو جدول نماش داده شود اما در قسمت where علاوه بر ارتباط دو کلید خارجی یک شرط دیگر هم اضافه کنم.مثلا بگویم فقط اطلاعات شخصی با فلان آیدی را نماش بده. چه کدی باید بنویسم؟مرسی
سلام و عرض ادب
به آموزش جلسه یازدهم مراجعه فرمایید. اگر باز هم پاسخ خود را دریافت نکردید از طریق دیدگاه مطرح نمایید.
با تشکر از همراهی شما
عالی بود …..
نزدیگ یه ماه گیر بودم نمیدونستم با پروژم باید چکار کنم واقعا دمتون گرم مشکلم حل شد
سلام.چگونه دستوری بنویسم ک حاصل از ترکیب دو جدول باشد بدون اینکه فیلد اشتراکی داشته باشیم.
فک کنم union
فوق العاده و بسیار کمک کننده بود ممنون
سلام وقت بخیر من جدول ماشین دارم تو اکسس میخوام با کد sql بنویسم که مشخصات و اسامی ماشین ها به همراه تعدادشون نمایش داده بشه چجوری باید این کد رو بنویسم؟