SQL

SQL UNION ALL

در نظر بگیرید که دو جدول به نام Products و OnlineOrders در پایگاه داده خود دارید. جدول Products شامل ستون‌های ProductID، ProductName و UnitPrice. جدول OnlineOrders شامل ستون‌های OrderID، ProductID و Quantity است.

هدف شما نمایش لیستی از تمام محصولات به همراه قیمت واحد آن‌ها است، حتی اگر محصول در هیچ سفارش online فروخته نشده باشد.

در اینجا یک پرس و جوی SQL با استفاده از UNION ALL برای دستیابی به این هدف ارائه می‌شود:

SQL

SELECT
  ProductID,
  ProductName,
  UnitPrice,
  'NULL' AS OrderID,
  'NULL' AS Quantity
FROM Products
WHERE ProductID NOT IN (SELECT ProductID FROM OnlineOrders)

UNION ALL

SELECT
  p.ProductID,
  p.ProductName,
  p.UnitPrice,
  o.OrderID,
  o.Quantity
FROM Products p
INNER JOIN OnlineOrders o
  ON p.ProductID = o.ProductID;

توضیح:

  • این پرس و جو از دو بخش تشکیل شده است که با UNION ALL به هم متصل شده‌اند.
  • بخش اول:
    • اطلاعات مربوط به محصولاتی را انتخاب می‌کند که در هیچ سفارش online فروخته نشده‌اند.
    • از WHERE clause برای فیلتر کردن محصولاتی که ProductID آن‌ها در جدول OnlineOrders وجود ندارد استفاده می‌کند.
    • مقادیر “NULL” را به ستون‌های OrderID و Quantity اختصاص می‌دهد.
  • بخش دوم:
    • اطلاعات مربوط به محصولاتی را انتخاب می‌کند که در حداقل یک سفارش online فروخته شده‌اند.
    • از INNER JOIN برای پیوستن به جداول Products و OnlineOrders بر اساس ستون ProductID استفاده می‌کند.
    • تمام ستون‌های مورد نیاز را از هر دو جدول انتخاب می‌کند.

نکات:

  • این پرس و جو به طور واضح و خوانا با استفاده از نام‌های کامل توابع و کلمات کلیدی نوشته شده است.
  • از UNION ALL استفاده شده است تا اطمینان حاصل شود که هر محصول در خروجی ظاهر شود، حتی اگر در هیچ سفارش online فروخته نشده باشد.
  • پرس و جو به طور کامل با توضیحات و تفاسیر ارائه شده است.

نتیجه:

این پرس و جو خروجی زیر را برمی‌گرداند:

ProductID ProductName UnitPrice OrderID Quantity
۱ Laptop ۱۰۰۰.۰۰ NULL NULL
۲ Monitor ۵۰۰.۰۰ NULL NULL
۳ Keyboard ۵۰.۰۰ ۱ ۲
۴ Mouse ۲۰.۰۰ ۱ ۱
۵ Desk ۲۰۰.۰۰ ۲ ۱

همانطور که مشاهده می‌کنید، UNION ALL به شما امکان می‌دهد دو یا چند پرس و جو را به هم متصل کنید و تمام ردیف‌ها را از پرس و جوهای جداگانه، حتی ردیف‌های تکراری، در خروجی نهایی نمایش دهد. این برای نمایش مجموعه کامل داده‌ها از چندین منبع مفید است.

مثال‌های دیگر:

  • می‌توانید از UNION به جای UNION ALL استفاده کنید تا ردیف‌های تکراری حذف شوند.
  • می‌توانید از ORDER BY clause برای مرتب‌سازی نتایج استفاده کنید.
  • می‌توانید از LIMIT clause برای محدود کردن تعداد ردیف‌های برگشتی استفاده کنید.

منابع:

 

۰/۵ ( ۰ امتیاز )
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا