SQL UNION運算符及其應(yīng)用場景深入探究
SQL UNION運算符
SQL UNION運算符用于組合兩個或多個SELECT語句的結(jié)果集。
- 每個
UNION中的SELECT語句必須具有相同數(shù)量的列。 - 列的數(shù)據(jù)類型也必須相似。
- 每個
SELECT語句中的列也必須按照相同的順序排列。
UNION語法
SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2;
UNION ALL語法UNION運算符默認僅選擇不同的值。為了允許重復(fù)的值,請使用UNION ALL:
SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2;
注意:結(jié)果集中的列名通常等于第一個*SELECT*語句中的列名。
演示數(shù)據(jù)庫
在本教程中,我們將使用著名的Northwind示例數(shù)據(jù)庫。
Customers表部分選擇:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
Suppliers表部分選擇:
| SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
SQL UNION示例
以下SQL語句從“Customers”和“Suppliers”表中返回城市(僅不同的值):
SELECT City FROM Customers UNION SELECT City FROM Suppliers ORDER BY City;
注意:如果一些客戶或供應(yīng)商具有相同的城市,每個城市將只列出一次,因為*UNION僅選擇不同的值。使用UNION ALL*也選擇重復(fù)的值!
SQL UNION ALL示例
以下SQL語句從“Customers”和“Suppliers”表中返回城市(還包括重復(fù)的值):
SELECT City FROM Customers UNION ALL SELECT City FROM Suppliers ORDER BY City;
帶有WHERE的SQL UNION
以下SQL語句從“Customers”和“Suppliers”表中返回德國的城市(僅不同的值):
SELECT City, Country FROM Customers WHERE Country='Germany' UNION SELECT City, Country FROM Suppliers WHERE Country='Germany' ORDER BY City;
帶有WHERE的SQL UNION ALL
以下SQL語句從“Customers”和“Suppliers”表中返回德國的城市(還包括重復(fù)的值):
SELECT City, Country FROM Customers WHERE Country='Germany' UNION ALL SELECT City, Country FROM Suppliers WHERE Country='Germany' ORDER BY City;
另一個UNION示例
以下SQL語句列出了所有客戶和供應(yīng)商:
SELECT 'Customer' AS Type, ContactName, City, Country FROM Customers UNION SELECT 'Supplier', ContactName, City, Country FROM Suppliers;
請注意上面的AS Type - 它是一個別名。SQL別名用于給表或列一個臨時的名稱。別名僅在查詢的持續(xù)時間內(nèi)存在。因此,這里我們創(chuàng)建了一個名為“Type”的臨時列,其中列出了聯(lián)系人是“Customer”還是“Supplier”。
SQL GROUP BY語句
GROUP BY語句將具有相同值的行分組為摘要行,通常與聚合函數(shù)一起使用,以根據(jù)一個或多個列對結(jié)果集進行分組。
GROUP BY語法
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) ORDER BY column_name(s);
演示數(shù)據(jù)庫
以下是Northwind示例數(shù)據(jù)庫中“Customers”表的一部分選擇:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
SQL GROUP BY示例
以下SQL語句列出了每個國家的客戶數(shù)量:
SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country;
以下SQL語句列出了每個國家的客戶數(shù)量,按高到低排序:
SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country ORDER BY COUNT(CustomerID) DESC;
演示數(shù)據(jù)庫
以下是Northwind示例數(shù)據(jù)庫中“Orders”表的一部分選擇:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10248 | 90 | 5 | 1996-07-04 | 3 |
| 10249 | 81 | 6 | 1996-07-05 | 1 |
| 10250 | 34 | 4 | 1996-07-08 | 2 |
以及“Shippers”表的一部分選擇:
| ShipperID | ShipperName |
|---|---|
| 1 | Speedy Express |
| 2 | United Package |
| 3 | Federal Shipping |
帶有JOIN的GROUP BY示例
以下SQL語句列出了每個承運人發(fā)送的訂單數(shù)量:
SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID GROUP BY ShipperName;
以上就是SQL UNION運算符及其應(yīng)用場景深入探究的詳細內(nèi)容,更多關(guān)于SQL UNION運算符的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL 發(fā)生同步延遲時Seconds_Behind_Master還為0的原因
騰訊云數(shù)據(jù)庫 MySQL 的只讀實例出現(xiàn)了同步延遲,但是監(jiān)控的延遲時間顯示為 0,而且延遲的 binlog 距離非 0,且數(shù)值越來越大。臨時解決之后,仔細想了一想,Seconds_Behind_Master 雖然計算方式有點坑,但是出現(xiàn)這么“巨大”的誤差還是挺奇怪的,本文就來分析下這個問題2021-06-06
MySQL插入數(shù)據(jù)與查詢數(shù)據(jù)
這篇文章主要介紹了 MySQL插入數(shù)據(jù)與查詢數(shù)據(jù),缺省插入、缺省插入、缺省插入等各種數(shù)據(jù)插入分享,需要的小伙伴可以參考一下,希望對你有所幫助2022-03-03
深入理解MySQL主從復(fù)制線程狀態(tài)轉(zhuǎn)變
這篇文章主要給大家介紹了關(guān)于MySQL主從復(fù)制線程狀態(tài)轉(zhuǎn)變的相關(guān)資料,文中介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
MySQL中datetime和timestamp的區(qū)別及使用詳解
這篇文章主要介紹了MySQL中datetime和timestamp的區(qū)別及使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

