پرسوجوهای چندجدولی SQL - JOIN، Alias و UNION
6 - پرسوجوهای چندجدولی
- Joinها
- نام مستعار جدولها
- Unionها
صفحه PDF 55 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
Joinها
نام کامل ستون (Full Column Name) از نام جدول، یک نقطه و نام ستون - بدون فاصله بین آنها - تشکیل میشود. در پرسوجوهای چندجدولی، وقتی یک نام ستون در بیش از یک جدول وجود دارد، استفاده از نام کامل ستون ضروری است.
tablename.columnname
PERSONS.JOB
COUNTRIES.POP
ARMIES.COUNTRY
JOBS.JOB
RELIGIONS.COUNTRY
قالب نام کامل ستون بهصورت tablename.columnname است.
صفحه PDF 56 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
Joinها - ادامه
ستونهای دو یا چند جدول را میتوان با روشی به نام Join در یک جدول نتیجه ترکیب کرد. اصول Join در سه گام توضیح داده میشود. فرض کنید دو جدول دستکم یک ستون مشترک دارند:
- همه سطرهای جدول دوم را به تکتک سطرهای جدول اول متصل میکنیم؛ در نتیجه همه ترکیبهای ممکن ساخته میشوند.
- فقط سطرهایی را نگه میداریم که مقدار ستونهای مشترک در آنها برابر است.
- ستون مشترک اضافی را حذف میکنیم. نتیجه، ترکیبی از اطلاعات دو جدول است.
نمونه سند اصلی با جدولهای PERSONS و JOBS نشان میدهد چگونه مقدار JOB برای تطبیق سطرها استفاده و در پایان عنوان شغل به اطلاعات شخص افزوده میشود.
صفحه PDF 57 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
Joinها - ادامه
برای Join کردن دو یا چند جدول در SQL: 1) همه جدولهای لازم را در Clause FROM فهرست کنید؛ 2) مقایسه یا مقایسههای مناسب Join را در Clause WHERE بنویسید؛ و 3) ستونهایی را که باید در نتیجه ظاهر شوند در Clause SELECT مشخص کنید.
SELECT PERSON, NAME, PERSONS.JOB, TITLE
FROM PERSONS, JOBS
WHERE PERSONS.JOB = JOBS.JOB;
- چند جدول در Clause
FROM مشخص میشوند. - مقایسههای Join در Clause
WHERE نوشته میشوند. - هرجا لازم باشد از نام کامل ستون استفاده میشود.
صفحه PDF 58 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
Joinها - ادامه
توجه کنید که اکنون Clause SELECT نام کامل ستون را میپذیرد، FROM از فهرست جدولها پشتیبانی میکند و WHERE میتواند مقایسه ستون با ستون داشته باشد.
SELECT [ DISTINCT ] col [ AS alias ] list
FROM table list
WHERE column = column
GROUP BY ...
HAVING ...
ORDER BY ...
-- Example
SELECT NAME, PERSONS.JOB, TITLE
FROM PERSONS, JOBS
WHERE PERSONS.JOB = JOBS.JOB;
تمرینها
- نام و زبان مادری هر دانشمندی را که در قرن بیستم متولد شده فهرست کنید. نتیجه 6 سطر دارد.
- کشور، GNP و بودجه نظامی را برای همه کشورهایی که بیش از 100 میلیون نفر جمعیت دارند فهرست کنید. نتیجه 8 سطر دارد.
- پرسوجوی قبلی را تغییر دهید تا درصد GNP صرفشده برای ارتش را نیز شامل شود.
امتیاز اضافه
- تقریباً چند نفر از اعضای ارتش آلمان پروتستان هستند؟
صفحه PDF 59 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
نام مستعار جدولها
کلیدواژه AS را میتوان در Clause FROM برای تعریف نام مستعار جدول (Table Alias)، یعنی نامی که کاربر به جدول اختصاص میدهد، استفاده کرد. برای هر جدول میتوان Alias تعیین کرد، اما کاربرد رایج آن در پرسوجوهای چندجدولی و کوتاهکردن نام کامل ستونهاست.
SELECT PERSON, NAME, PERSONS.JOB, TITLE
FROM PERSONS, JOBS
WHERE PERSONS.JOB = JOBS.JOB;
SELECT PERSON, NAME, P.JOB, TITLE
FROM PERSONS AS P, JOBS AS J
WHERE P.JOB = J.JOB;
- Alias جدول در Clause
FROM تعریف میشود. - Alias جدول را میتوان در هر Clause استفاده کرد.
- پس از تعریف Alias، نام اصلی جدول در همان پرسوجو دیگر قابل استفاده نیست.
- در بعضی گویشها
AS اختیاری است.
صفحه PDF 60 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
نام مستعار جدولها - ادامه
در نحو فعلی، Alias جدول به Clause FROM افزوده شده است.
SELECT [ DISTINCT ] col [ AS alias ] list,
expr [ AS alias ] list,
func [ AS alias ] list
FROM table [ AS alias ] list
WHERE comparison
GROUP BY ...
HAVING ...
ORDER BY ...
-- Example
FROM PERSONS, JOBS AS J
WHERE PERSONS.JOB = J.JOB
تمرینها
- با استفاده از Alias جدول، کشور، جمعیت و تعداد نیروها را برای هر کشوری که بیش از 100 میلیون نفر جمعیت دارد نمایش دهید. نتیجه 8 سطر دارد.
- همه زبانهایی را فهرست کنید که در کشورهایی با بیش از 90 درصد جمعیت مسلمان صحبت میشوند. از Alias جدول استفاده و تکراریها را حذف کنید. 4 زبان وجود دارد.
امتیاز اضافه
- نام، عنوان شغل و زبان مادری همه افرادی را که پیش از 1 ژانویه 1400 متولد شدهاند فهرست کنید. 10 نفر هستند.
صفحه PDF 61 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
Unionها
Union سطرهای دو پرسوجوی مشابه را در یک نتیجه بدون سطر تکراری ترکیب میکند. کلیدواژه UNION بین دو پرسوجو قرار میگیرد. اگر ORDER BY استفاده شود، باید فقط در پرسوجوی نهایی ظاهر شود و موقعیت ستونها را مشخص کند.
SELECT COUNTRY
FROM COUNTRIES
WHERE POP > 200000000
UNION
SELECT COUNTRY
FROM RELIGIONS
WHERE RELIGION = 'ATHEISM'
AND PERCENT > 30
ORDER BY 1;
- تعداد و نوع ستونهای دو پرسوجو باید با هم مطابقت داشته باشد.
UNION بین پرسوجوها قرار میگیرد.ORDER BY در صورت استفاده باید آخرین Clause باشد.ORDER BY باید موقعیت ستونها را مشخص کند.- سطرهای تکراری در نتیجه وارد نمیشوند.
صفحه PDF 62 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده
Unionها - ادامه
در نحو فعلی، Clause UNION به دستور SELECT افزوده شده است.
SELECT ...
FROM ...
WHERE ...
GROUP BY ...
HAVING ...
UNION
SELECT ...
ORDER BY ...
تمرینها
- هشت کشوری را که بیش از 40٪ پروتستان هستند فهرست کنید؛ سپس چهار کشوری را که آلمانی صحبت میکنند فهرست کنید. دو نتیجه را Union کنید. نتیجه نهایی چند سطر دارد؟
- همه کشورهایی را که دانشمند تولید کردهاند با همه کشورهایی که بودجه نظامی بیش از 10 میلیارد دارند Union کنید. نتیجه را بر اساس نام کشور مرتب کنید. 12 سطر وجود دارد.
امتیاز اضافه
- نام شخص، کشور و زبان را در مواردی فهرست کنید که حرف دوم نام
Z است.
صفحه PDF 63 - تصویر منبع اصلی برای کنترل بصری و حفظ عناصر اسکنشده