پرس‌وجوهای چندجدولی SQL؛ Join، نام مستعار جدول و UNION

پرس‌وجوهای چندجدولی در SQL

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

نظرات 0

پرس‌وجوهای چندجدولی در SQL

نشان فصل ۶پرس‌وجوهای چندجدولی۶

این فصل سه موضوع اصلی را بررسی می‌کند: Joinها، نام مستعار جدول‌ها و Unionها.

Joinها

نام کامل ستون (Full Column Name) از نام جدول، یک نقطه و نام ستون ــ بدون فاصلهٔ بین آن‌ها ــ تشکیل می‌شود. در پرس‌وجوهای چندجدولی، هرگاه یک نام ستون در بیش از یک جدول ظاهر شود باید از نام کامل ستون استفاده شود.

نام‌های کامل ستون‌ها برای پایگاه دادهٔ تمرینی
TABLECOLUMNFULL COLUMN NAME
PERSONSPERSONPERSONS.PERSON
PERSONSNAMEPERSONS.NAME
PERSONSBDATEPERSONS.BDATE
PERSONSGENDERPERSONS.GENDER
PERSONSCOUNTRYPERSONS.COUNTRY
PERSONSJOBPERSONS.JOB
COUNTRIESCOUNTRYCOUNTRIES.COUNTRY
COUNTRIESPOPCOUNTRIES.POP
COUNTRIESAREACOUNTRIES.AREA
COUNTRIESGNPCOUNTRIES.GNP
COUNTRIESLANGUAGECOUNTRIES.LANGUAGE
COUNTRIESLITERACYCOUNTRIES.LITERACY
ARMIESCOUNTRYARMIES.COUNTRY
ARMIESBUDGETARMIES.BUDGET
ARMIESTROOPSARMIES.TROOPS
ARMIESTANKSARMIES.TANKS
ARMIESSHIPSARMIES.SHIPS
ARMIESPLANESARMIES.PLANES
JOBSJOBJOBS.JOB
JOBSTITLEJOBS.TITLE
RELIGIONSCOUNTRYRELIGIONS.COUNTRY
RELIGIONSRELIGIONRELIGIONS.RELIGION
RELIGIONSPERCENTRELIGIONS.PERCENT

قالب نام کامل ستون چنین است: tablename.columnname.

ستون‌های دو یا چند جدول را می‌توان با روشی به نام Joining در یک جدول نتیجه ترکیب کرد. اصول Join در سه مرحلهٔ زیر نشان داده می‌شود. از دو جدول شروع می‌کنیم که دست‌کم یک ستون مشترک دارند.

PERSONS
PERSONNAMEJOB
1EinsteinS
2DickinsonW
3DickinsonW
JOBS
JOBTITLE
SScientist
WWriter
EEntertainer

۱) همهٔ ردیف‌های جدول دوم را به هر ردیف جدول اول پیوست می‌کنیم

ترکیب اولیهٔ ردیف‌ها
PERSONNAMEJOBJOBTITLE
1EinsteinSSScientist
1EinsteinSWWriter
1EinsteinSEEntertainer
2DickinsonWSScientist
2DickinsonWWWriter
...............

۲) سپس فقط ردیف‌هایی را نگه می‌داریم که ستون‌های مشترک مقادیر برابر دارند

ردیف‌های منطبق
PERSONNAMEJOBJOBTITLE
1EinsteinSSScientist
2DickinsonWWWriter
3DickinsonWWWriter

۳) در پایان ستون زائد را حذف می‌کنیم؛ نتیجه چنین است

نتیجهٔ Join
PERSONNAMEJOBTITLE
1EinsteinSScientist
2DickinsonWWriter
3DickinsonWWriter

برای Join کردن دو یا چند جدول با SQL: ۱) همهٔ جدول‌های موردنیاز را در بند FROM فهرست کنید؛ ۲) مقایسه‌های مناسب را در بند WHERE وارد کنید؛ و ۳) ستون‌هایی را که باید در نتیجه دیده شوند در بند SELECT مشخص کنید. نمونه:

PERSONS
PERSONNAMEJOB
1EinsteinS
2DickinsonW
3DickinsonW
JOBS
JOBTITLE
SScientist
WWriter
EEntertainer
SQL
SELECT PERSON, NAME, PERSONS.JOB, TITLE
FROM PERSONS, JOBS
WHERE PERSONS.JOB = JOBS.JOB
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
PERSONNAMEJOBTITLE
1EinsteinSScientist
2DickinsonWWriter
3DickinsonWWriter
  • چند جدول در بند FROM مشخص می‌شوند.
  • مقایسه‌های Join در بند WHERE وارد می‌شوند.
  • در صورت نیاز از نام کامل ستون استفاده می‌شود.

اکنون بند SELECT اجازهٔ نام کامل ستون را می‌دهد، FROM از فهرست جدول پشتیبانی می‌کند و WHERE شامل مقایسهٔ ستون‌باستون است.

خلاصهٔ نحو Join
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 listPERSONS, JOBS
WHEREcomparisonsPERSONS.JOB = JOBS.JOB
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC
ORDER BYfunc [ DESC ] listCOUNT(*) DESC

تمرین‌ها

  1. نام و زبان مادری هر دانشمندی را که در قرن بیستم به دنیا آمده است فهرست کنید. نتیجه ۶ ردیف دارد.
  2. کشور، GNP و بودجهٔ نظامی همهٔ کشورهایی را که بیش از ۱۰۰ میلیون نفر جمعیت دارند فهرست کنید. نتیجه ۸ ردیف دارد.
  3. پرس‌وجوی قبلی را بازبینی کنید تا درصد GNP هزینه‌شده برای امور نظامی را نیز شامل شود.

امتیاز اضافه

  1. تقریباً چند عضو از ارتش آلمان Protestant هستند؟

نام مستعار جدول

کلیدواژهٔ AS را می‌توان در بند FROM برای تعریف نام مستعار جدول (Table Alias) ــ نامی که کاربر برای جدول تعیین می‌کند ــ استفاده کرد. Alias را می‌توان برای هر جدول تعریف کرد، اما بیشتر در پرس‌وجوهای چندجدولی برای کوتاه‌کردن نام‌های کامل ستون استفاده می‌شود.

SQL
SELECT PERSON, NAME, PERSONS.JOB, TITLE
FROM PERSONS, JOBS
WHERE PERSONS.JOB = JOBS.JOB
SQL
SELECT PERSON, NAME, P.JOB, TITLE
FROM PERSONS AS P, JOBS AS J
WHERE P.JOB = J.JOB
  • Alias جدول در بند FROM تعریف می‌شود.
  • Alias جدول را می‌توان در هر بندی استفاده کرد.
  • پس از تعریف Alias، دیگر نمی‌توان از نام اصلی همان جدول استفاده کرد.
  • در برخی گویش‌ها AS اختیاری است.
خلاصهٔ نحو با 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 AS P, JOBS AS J
WHEREcomparisonsP.JOB = J.JOB
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC
ORDER BYfunc [ DESC ] listCOUNT(*) DESC

تمرین‌ها

  1. با استفاده از Alias جدول، کشور، جمعیت و تعداد نیروهای هر کشور با بیش از ۱۰۰ میلیون نفر جمعیت را نمایش دهید. نتیجه ۸ ردیف دارد.
  2. همهٔ زبان‌های کشورهایی را فهرست کنید که بیش از ۹۰ درصد Muslim هستند. از Alias جدول استفاده کنید و ردیف‌های تکراری را حذف کنید. چهار زبان از این نوع وجود دارد.

امتیاز اضافه

  1. نام، عنوان شغلی و زبان مادری همهٔ افراد پایگاه داده را که قبل از ۱ ژانویهٔ ۱۴۰۰ متولد شده‌اند فهرست کنید. ۱۰ نفر وجود دارد.

Unionها

Union ردیف‌های دو پرس‌وجوی مشابه را در یک نتیجهٔ واحد و بدون ردیف تکراری ترکیب می‌کند. کلیدواژهٔ UNION بین پرس‌وجوها قرار می‌گیرد. اگر ORDER BY استفاده شود، باید فقط در پرس‌وجوی نهایی ظاهر شود و موقعیت ستون‌ها را مشخص کند.

SQL
SELECT COUNTRY
FROM COUNTRIES
WHERE POP > 200000000

UNION

SELECT COUNTRY
FROM RELIGIONS
WHERE RELIGION = 'ATHEISM'
AND PERCENT > 30

ORDER BY 1
جریان از دستور SQL به نتیجهپیکان ارتباط دستور با نتیجهٔ آن
COUNTRY
China
Czech Rep...
India
Indonesia
Russia
USA
  • تعداد و نوع ستون‌های دو پرس‌وجو باید با هم تطبیق داشته باشد.
  • کلیدواژهٔ UNION بین پرس‌وجوها قرار می‌گیرد.
  • ORDER BY در صورت استفاده باید آخرین بند باشد.
  • ORDER BY باید موقعیت ستون را مشخص کند.
  • ردیف‌های تکراری در نتیجه قرار نمی‌گیرند.
خلاصهٔ نحو با UNION
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
GROUP BYcol listJOB, COUNTRY
HAVINGcomparisons with funcsCOUNT(*) > 30
UNIONquerySELECT ...
ORDER BYcol [ DESC ] listLANGUAGE DESC, COUNTRY
ORDER BYpos [ DESC ] list1 DESC, 3
ORDER BYexpr [ DESC ] listPOP / AREA DESC
ORDER BYfunc [ DESC ] listCOUNT(*) DESC

تمرین‌ها

  1. هشت کشوری را که بیش از ۴۰٪ Protestant هستند فهرست کنید؛ سپس چهار کشوری را که German صحبت می‌کنند فهرست کنید. این دو را Union کنید. نتیجهٔ نهایی چند ردیف دارد؟
  2. همهٔ کشورهایی را که یک دانشمند تولید کرده‌اند با همهٔ کشورهایی که بودجهٔ نظامی بیش از ۱۰ میلیارد دارند Union کنید. نتیجه را بر اساس نام کشور مرتب کنید. ۱۲ ردیف وجود دارد.

امتیاز اضافه

  1. نام شخص، نام کشور و نام زبان را در مواردی فهرست کنید که حرف دوم آن‌ها z است.

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

☆☆☆☆☆

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

 

0 نظر

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

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

0 / 500