زیرپرس‌وجوهای SQL؛ تک‌مقداری، چندمقداری و همبسته

زیرپرس‌وجوها در SQL

توسط admin | گروه SQL Server | 1405/05/16

نظرات 0

زیرپرس‌وجوها در SQL

نشان فصل ۷پرس‌وجو درون پرس‌وجو۷

این فصل سه نوع زیرپرس‌وجو را بررسی می‌کند: تک‌مقداری، چندمقداری و همبسته.

زیرپرس‌وجوهای تک‌مقداری

زیرپرس‌وجوی تک‌مقداری (Single-Valued Subquery) پرس‌وجویی است که ۱) نتیجه‌ای با یک ستون و یک ردیف تولید می‌کند و ۲) در بند WHERE پرس‌وجوی دیگری «تو در تو» می‌شود. زیرپرس‌وجو باید داخل پرانتز قرار گیرد.

SQL
SELECT AVG( POP )
FROM COUNTRIES
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
AVG(POP)
30150531
SQL
SELECT COUNTRY, POP
FROM COUNTRIES
WHERE POP > 30150531
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYPOP
Germany81337541
USA263814032
England58295119
Argentina34292742
Colombia36200251
Mexico93985848
SQL
SELECT COUNTRY, POP
FROM COUNTRIES
WHERE POP > ( SELECT AVG( POP )
              FROM COUNTRIES )
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRYPOP
Germany81337541
USA263814032
England58295119
Argentina34292742
Colombia36200251
Mexico93985848
  • پرس‌وجوهای تک‌مقداری را می‌توان در مقایسه‌ها استفاده کرد.
  • زیرپرس‌وجوها داخل پرانتز قرار می‌گیرند.
خلاصهٔ نحو با زیرپرس‌وجوی تک‌مقداری
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col [ AS alias ] listNAME, PERSONS.JOB, TITLE
SELECTexpr [ AS alias ] listPOP / AREA AS DENSITY
SELECTfunc [ AS alias ] listMIN(POP) AS LOWEST
FROMtable [ AS alias ] listPERSONS, JOBS
WHEREcomparisonsPERSONS.JOB = JOBS.JOB
WHEREcolumn oper ( subquery )POP > ( SELECT AVG( POP ) ... )
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
UNIONquerySELECT ...
ORDER BYsort listLANGUAGE DESC, COUNTRY

تمرین‌ها

  1. بیشترین جمعیت همهٔ کشورها را پیدا کنید. اکنون همان پرس‌وجو را به‌عنوان زیرپرس‌وجو به کار ببرید تا همهٔ ستون‌های کشوری را که بیشترین جمعیت را دارد نمایش دهید.
  2. همهٔ ستون‌های ارتش‌هایی را نمایش دهید که بودجه‌شان از میانگین بودجهٔ همهٔ ارتش‌ها بیشتر است. نتیجه ۵ ردیف دارد.

امتیاز اضافه

  1. زبان مادری، نام، عنوان شغلی و تاریخ تولد همهٔ افرادی را نمایش دهید که همان شغل Luther را دارند. بر اساس نام درون زبان مرتب کنید. نتیجه ۱۳ ردیف دارد.

زیرپرس‌وجوهای چندمقداری

زیرپرس‌وجوی چندمقداری (Multi-Valued Subquery) پرس‌وجویی است که ۱) نتیجه‌ای تک‌ستونی با صفر، یک یا چند ردیف برمی‌گرداند و ۲) در بند WHERE پرس‌وجوی دیگری تو در تو می‌شود. زیرپرس‌وجوهای چندمقداری همیشه پس از عملگر IN قرار می‌گیرند.

SQL
SELECT DISTINCT JOB
FROM PERSONS
WHERE GENDER = 'FEMALE'
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOB
W
R
E
S
M
SQL
SELECT JOB, TITLE
FROM JOBS
WHERE NOT JOB IN ('W','R','E','S','M')
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBTITLE
IInstructor
TTheologian
BBusiness...
LLawyer
KKey Grip
SQL
SELECT JOB, TITLE
FROM JOBS
WHERE NOT JOB IN
( SELECT DISTINCT JOB
  FROM PERSONS
  WHERE GENDER = 'FEMALE' )
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBTITLE
IInstructor
TTheologian
BBusiness...
LLawyer
KKey Grip
  • زیرپرس‌وجوهای چندمقداری پس از عملگر IN قرار می‌گیرند.
خلاصهٔ نحو با زیرپرس‌وجوی چندمقداری
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col [ AS alias ] listNAME, PERSONS.JOB, TITLE
SELECTexpr [ AS alias ] listPOP / AREA AS DENSITY
SELECTfunc [ AS alias ] listMIN(POP) AS LOWEST
FROMtable [ AS alias ] listPERSONS, JOBS
WHEREcomparisonsPERSONS.JOB = JOBS.JOB
WHEREcolumn oper ( subquery )POP > ( SELECT AVG( POP ) ... )
WHEREcolumn IN ( subquery )JOB IN ( SELECT DISTINCT JOB ... )
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
UNIONquerySELECT ...
ORDER BYsort listLANGUAGE DESC, COUNTRY

تمرین‌ها

  1. فهرستی از کشورهایی بسازید که نرخ باسوادی آن‌ها کمتر از ۵۰٪ است. سپس از آن پرس‌وجو برای نمایش همهٔ ستون‌های نویسندگان هر یک از آن کشورها استفاده کنید. ۲ ردیف وجود دارد.
  2. همهٔ ستون‌های افرادی را نمایش دهید که در کشورهایی با بیش از ۹۵٪ Catholic متولد شده‌اند. ۱۳ نفر وجود دارد.

امتیاز اضافه

  1. همهٔ ستون‌های رهبران نظامی را در کشورهای انگلیسی‌زبان نمایش دهید که تعداد نیروهایشان کمتر از میانگین تعداد نیروهای ارتش‌ها است. ۲ ردیف وجود دارد.

زیرپرس‌وجوهای همبسته

زیرپرس‌وجوی همبسته (Correlated Subquery) یک زیرپرس‌وجوی تک‌مقداری یا چندمقداری است که از طریق Alias جدولی تعریف‌شده در بند FROM پرس‌وجوی بیرونی به آن پرس‌وجو ارجاع می‌دهد. زیرپرس‌وجو برای هر ردیف پرس‌وجوی بیرونی یک‌بار اجرا می‌شود.

SQL
SELECT JOB, NAME
FROM PERSONS
WHERE JOB = 'S'
AND BDATE =
( SELECT MIN( BDATE )
  FROM PERSONS
  WHERE JOB = 'S' )
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBNAME
SMagnus
SQL
SELECT JOB, NAME
FROM PERSONS AS P
WHERE BDATE =
( SELECT MIN( BDATE )
  FROM PERSONS
  WHERE JOB = P.JOB )
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
JOBNAME
EHepburn
WShikabu
MMontal...
BDupont
SMagnus
TPaul
RJean
  • زیرپرس‌وجوهای همبسته چندین بار اجرا می‌شوند.
  • زیرپرس‌وجوهای همبسته به Alias جدول نیاز دارند.
خلاصهٔ نحو با زیرپرس‌وجوی همبسته
CLAUSEPARAMETERSEXAMPLE
SELECT**
SELECT[ DISTINCT ] col [ AS alias ] listNAME, PERSONS.JOB, TITLE
SELECTexpr [ AS alias ] listPOP / AREA AS DENSITY
SELECTfunc [ AS alias ] listMIN(POP) AS LOWEST
FROMtable [ AS alias ] listPERSONS, JOBS
WHEREcomparisonsPERSONS.JOB = JOBS.JOB
WHEREcolumn oper ( subquery )BDATE = ( SEL ... WHERE JOB = P.JOB )
WHEREcolumn IN ( subquery )BDATE IN ( SEL ... WHERE JOB = P.JOB )
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
UNIONquerySELECT ...
ORDER BYsort listLANGUAGE DESC, COUNTRY

تمرین‌ها

  1. شغل و نام جوان‌ترین فرد هر حرفه را نمایش دهید. نتیجه ۷ ردیف دارد و افرادی مانند Grisham، Mountbatten و Forbes را شامل می‌شود.
  2. با یک پرس‌وجو و یک زیرپرس‌وجوی همبسته، همهٔ ستون‌های جوان‌ترین مرد و جوان‌ترین زن را نمایش دهید. چه وجه مشترک دیگری دارند؟

امتیاز اضافه

  1. دین غالب را در هر کشور آلمانی‌زبان پیدا کنید. جدول نتیجه ۴ ردیف دارد.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500