با سلام خدمت همراهان همیشگی روکسو، امروز در رابطه با دو اپراتور دیگر در زبان SQL به نام UNION و GROUP BY صحبت خواهیم کرد. با ما همراه باشید.
UNION در لغت به معنی اتحاد یا پیوند است. همانطور که از نام این اپراتور مشخص شد، کارش ایجاد پیوند و اتحاد است اما چگونه؟
در واقع UNION بین دو یا چند عدد از نتایج دستورات SELECT پیوند ایجاد می کند و آن ها را ادغام می کند.
البته قوانین و شرایط زیر را دارند:
ساختار کلی اپراتور UNION به شکل زیر است:
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
ساختار کلی اپراتور UNION ALL به شکل زیر است:
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
تفاوت UNION ALL و UNION در این است که UNION تنها مقادیر غیر تکراری را انتخاب می کند اما UNION ALL تمام مقادیر را انتخاب می کند.
نکته: نام ستون ها در نتایج بازگشتی از UNION معمولا همان نام ستون های اولین دستور SELECT است.
ابتدا نگاهی به قسمتی از جدول Customers بیندازیم:
Country | PostalCode | City | Address | ContactName | CustomerName | CustomerID |
Germany | 12209 | Berlin | Obere Str. 57 | Maria Anders | Alfreds Futterkiste | 1 |
Mexico | 05021 | México D.F. | Avda. de la Constitución 2222 | Ana Trujillo | Ana Trujillo Emparedados y helados | 2 |
Mexico | 05023 | México D.F. | Mataderos 2312 | Antonio Moreno | Antonio Moreno Taquería | 3 |
و قسمتی از جدول Suppliers:
Country | PostalCode | City | Address | ContactName | SupplierName | SupplierID |
UK | EC1 4SD | London | 49 Gilbert St. | Charlotte Cooper | Exotic Liquid | 1 |
USA | 70117 | New Orleans | P.O. Box 78934 | Shelley Burke | New Orleans Cajun Delights | 2 |
USA | 48104 | Ann Arbor | 707 Oxford Rd. | Regina Murphy | Grandma Kelly's Homestead | 3 |
قصد داریم کار خود را روی این دو جدول انجام دهیم بنابراین به محتوای آن ها دقت کنید.
مثال اول - دستور SQL زیر تمام شهر های غیر تکراری را از هر دو جدول Customers و Suppliers می گیرد و برمی گرداند:
SELECT City FROM Customers UNION SELECT City FROM Suppliers ORDER BY City;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
مثال دوم - دستور SQL زیر تمام شهر ها (چه تکراری و چه غیر تکراری) را از هر دو جدول Customers و Suppliers می گیرد و برمی گرداند:
SELECT City FROM Customers UNION ALL SELECT City FROM Suppliers ORDER BY City;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
مثال سوم - دستور SQL زیر تمام شهر های آلمانی را از هر دو جدول Customers و Suppliers برمی گرداند (البته شهر های غیر تکراری را):
SELECT City, Country FROM Customers WHERE Country='Germany' UNION SELECT City, Country FROM Suppliers WHERE Country='Germany' ORDER BY City;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
اگر بخواهیم شهر های تکراری نیز برایمان به نمایش در بیاید مانند مثال قبل عمل کرده و کد را به این شکل می نویسیم:
SELECT City, Country FROM Customers WHERE Country='Germany' UNION ALL SELECT City, Country FROM Suppliers WHERE Country='Germany' ORDER BY City;
مثال چهارم - دستور SQL زیر تمام تامین کننده ها (suppliers) و مشتریان (customers) را بر میگردند:
SELECT 'Customer' As Type, ContactName, City, Country FROM Customers UNION SELECT 'Supplier', ContactName, City, Country FROM Suppliers;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
اپراتور GROUP BY معمولا به همراه توابع تجمیع (COUNT, MAX, MIN, SUM, AVG) استفاده می شود تا نتایج یک دستور را بر اساس یک یا چند ستون مرتب کند.
ساختار کلی این دستور به شکل زیر است:
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s);
می خواهیم کد هایمان را روی جدول Customers پیاده سازی کنیم بنابراین ابتدا نگاهی به قسمت خاصی از آن می اندازیم:
Country | PostalCode | City | Address | ContactName | CustomerName | CustomerID |
---|---|---|---|---|---|---|
Germany | 12209 | Berlin | Obere Str. 57 | Maria Anders | Alfreds Futterkiste | 1 |
Mexico | 05021 | México D.F. | Avda. de la Constitución 2222 | Ana Trujillo | Ana Trujillo Emparedados y helados | 2 |
Mexico | 05023 | México D.F. | Mataderos 2312 | Antonio Moreno | Antonio Moreno Taquería | 3 |
UK | WA1 1DP | London | 120 Hanover Sq. | Thomas Hardy | Around the Horn | 4 |
Sweden | S-958 22 | Luleå | Berguvsvägen 8 | Christina Berglund | Berglunds snabbköp | 5 |
مثال اول - دستور SQL زیر تعداد مشتریانِ هر کشور را به صورت لیست به ما ارائه می دهد:
SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
مثال دوم - دستور SQL زیر تعداد مشتریانِ هر کشور را به صورت لیست به ما ارائه می دهد اما تفاوتش با مثال قبل این است که آن ها را از کشور هایی با بیشترین مشتری به کشور هایی با کمترین مشتری مرتب می کند:
SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country ORDER BY COUNT(CustomerID) DESC;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
حالا به سراغ قسمتی از جدول های Orders و Shippers می رویم و دستوراتمان را روی آن اجرا می کنیم. جدول Orders:
ShipperID | OrderDate | EmployeeID | CustomerID | OrderID |
---|---|---|---|---|
3 | 1996-07-04 | 5 | 90 | 10248 |
1 | 1996-07-05 | 6 | 81 | 10249 |
2 | 1996-07-08 | 4 | 34 | 10250 |
جدول Shippers:
ShipperName | ShipperID |
---|---|
Speedy Express | 1 |
United Package | 2 |
Federal Shipping | 3 |
مثال سوم - دستور SQL زیر تعداد سفارشاتی را که هر shipper (ارسال کننده ی سفارشات) ارسال کرده است را برمیگرداند:
SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID GROUP BY ShipperName;
برای اجرای این دستور در پایگاه داده ی Northwind به این لینک مراجعه کنید.
در این قسمت با دو اپراتور بسیار مهم در SQL آشنا شدیم؛ اپراتور UNION و GROUP BY. حتما استفاده های عملی از این دو اپراتور را به کرات دیده اید. به طور مثال اگر بخواهید تعداد سفارشات فلان مشتری را دریافت کنید، یا تعداد لایک های فلان پست را بگیرید و آن ها را مقایسه کنید و ... در تمام این موارد از این دو اپراتور استفاده می شود. امیدوارم این قسمت مورد قبول شما قرار گرفته باشد.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.