×

SubQuery در SQL Server

فصل چهاردهم :

SubQuery

کوئری است که در داخل یک کوئری دیگر قرار دارد و بایستی در )( پرانتز محصور شود . تا اس کیو ال سرور بداند که یک subquery کجا شروع شده و کجا پایان یافته است
Subquery بعنوان فیلد
select title,price,(select avg(price) from titles) as average from titles
لیست کتابها و قیمت انها و متوسط قیمت کتابها را نمایش دهید. برای اینکه بفهمیمی کدام کتابها گرانتر از متوصط قیمت کتابها هستند .
select * from
(select city,[state],[country] from publishers) as t

که بایستی حتما دارای alias باشد. اگر subquery بعد از عبارت from بیاید به آن derived table گویند
Subquery در عبارت where
شهر هایی که هم نویسندگان و هم ناشران در آنها قرار دارند را لیست کنید
select distinct city from authors where city in
(select distinct city from publishers)

اپراتور IN

اپراتور منطقی IN
هنگامی که می خواهیم مقدار فیلدی را با لیستی از مقادیر چک کنیم اگر مقدار فیلد مورد نظر حتی بایکی از مقادیر موجود در لیست برابر بود نتیجه عبارت صحیح true است . نام ستون IN (لیست مقادیر هر مقدار را با کاما جدا میکنیم)
select * from [dbo].[Student] where age in (11,12,13)
که البته در این مثال می توانیم از اپراتور منطقی OR نیز استفاده کنیم
select * from [dbo].[Student] where age=1 or age=12 or age=13
ولیکن در کوئری هایی که می خواهیم مقادیر فیلدی را با نتایج ناشی از یک subquery مقایسه کنیم اپراتور منطقی IN کاربرد زیادی دارد .
--نام ناشرانی را که دو عنوان پرفروش ترين کتابها را چاپ کرده اند ليست شود.
select [pub_name] from publishers
inner join titles
on publishers.pub_id=titles.pub_id
where title_id IN
(select top 2 titles.title_id
from titles
inner join sales
on titles.title_id=sales.title_id
group by titles.title_id
order by sum(qty*price) desc)

اپراتور Exists

اپراتور منطقی Exists
الگوی آن بصورت EXISTS (subquery) می باشد .
و نتیجه این عبارت هنگامی صحصیح true خواهد بود که حد اقل یک رکورد توسط subquery باز گردانده شود.
شهر هایی که هم نویسندگان و هم ناشران در آنها قرار دارند را لیست کنید
select distinct city from authors
where exists ( select * from publishers where authors.city=publishers.city )



مفاهیم و موضوعات این فصل عبارتند از :

  • SubQuery

  • اپراتور IN

  • اپراتور Exists

vatantop
نظرات و سوالات درج سوال/ نظر