آموزش select تو در تو

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

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

select *
from Student

خروجی جدول student:

جدول student | آموزش select تو در تو

خروجی جدول Course:

select *
from Course

جدول course | select تو در تو

نکته:در جدول Course  از کلید خارجی (FOREIGN KEY ) استفاده شده است کلید خارجی (FOREIGN KEY ) برای ارتباط و لینک شدن دو جدول می باشد .

برای اینکه با مفهوم select تو در تو بیشتر آشنا شویم با یک مثال شروع می کنیم.

مثال) می خواهیم دانش آموزانی که نمره درسی آنها اعلام نشده است را به ما نمایش دهد ؟ یا به زبان ساده تر آن دانش آموزانی که id  ای داخل  ID_FK_ student  جدول Course ندارند را نمایش دهد ؟

select *
from Student
where student.id  in( select ID_FK_Student from Course)

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

در این کوئری ابتدا دستوراتی که داخل پرانتز هستند اجرا می شود یعنی:( select ID_FK_Student from Course)

خروجی این دستور را مشاهده می کنیم:

 select تو در تو | اجرای select داخلی

id کسانی را نمایش می دهد که نمره ی درسی آنها اعلام شده است.

این select تو در تو دقیقا مشخصات کسانی که نمره درسیشان اعلام شده بود را نمایش می دهد ولی ما می خواستیم که کسانی که نمره درسیشان اعلام نشده بود را نمایش دهد.پس select تو در تو بالا را بدین شکل تغییر می دهیم:

select *
from Student
where student.id not in( select ID_FK_Student from Course)

خروجی این دستور را مشاهده می کنیم:

select تو در تو | اجرا

ما در اینجا از دستور  not in استفاده کردیم . دستور in  یعنی تمام چیزهایی که داخل این مجموعه هست را نمایش بده . ولی دستور not in یعنی چیزهایی که داخل این مجموعه نیست را به من نمایش بده .

مثال ) می خواهیم نام دانش آموزانی را مشاهده کنیم که نمره درس C++  آن ها اعلام شده است ؟

select NameStudent
from Student
where student.id  in( select ID_FK_Student from Course where Lesson=’c++’) 

خروجی این دستور را مشاهده می کنیم:

نکته : رشته را شاید تا به این جلسه توضیح نداده باشیم برای معرفی رشته در sql  رشته را داخل تک کتیشن  ‘ ‘ قرار می دهیم.

پس تا به اینجا متوجه شدیم که ابتدا دستورات داخل پرانتز اجرا می شوند یعنی ابتدا سلکت داخلی اجرا می شود و بعد از اون سلکت خارجی از سلکت داخلی تغذیه می کند .در اصل هر چیزی را که خواسته باشیم از جدول دوم استخراج کنیم باید داخل پرانتز بنویسیم (یعنی سلکت داخلی ) ، مثلا دانش آموزانی که نمره  آنها زیر 18 است را نمایش دهد را داخل پرانتز (سلکت داخلی )می نویسیم که سلکت خارجی از سلکت داخلی تغذیه کند.

مثال)

select NameStudent,lastname
from Student
where student.id  in( select ID_FK_Student  from Course where Numbeer<18)

خروجی این دستور را مشاهده می کنیم:

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

مثال )دانش آموزانی که نمره  آنها بیشتر از 10 می باشد و همچنین جنسیت آنها مرد است را نمایش دهد ؟

select *
from Student
where student.id  in( select ID_FK_Student  from Course  where Numbeer>10 and Sex=1)

خروجی این دستور را مشاهده می کنیم:

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

مثال)دانش آموزانی که نمره درس c++  برای آنها ارائه شده  را نمایش دهد ؟

select *
from Student
where student.id and lesson=’c++’ in( select ID_FK_Student from Course)

خروجی این دستور را مشاهده می کنیم:

مشاهده می کنیم که با اجرا کردن این select پیغام خطایی به ما نمایش می دهد . پس نتیجه می گیریم که از فیلدهای سلکت خارجی ( student ) داخل سلکت داخلی  (Course) می توانیم استفاده کنیم ولی برعکس (یعنی از فیلدهای سلکت داخلی  (Course) در سلکت خارجی ( student ) نمی توانیم استفاده کنیم)

در این جلسه با مفهوم select تو در تو آشنا شدیم ، در جلسه بعد قصد داریم تا با دستور  Count در sql  آشنا شویم.

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

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