写点什么

深入理解 SQL UNION 运算符及其应用场景

作者:小万哥
  • 2023-11-28
    广东
  • 本文字数:1475 字

    阅读完需:约 5 分钟

深入理解 SQL UNION 运算符及其应用场景

SQL UNION 运算符

SQL UNION运算符用于组合两个或多个SELECT语句的结果集。


  • 每个UNION中的SELECT语句必须具有相同数量的列。

  • 列的数据类型也必须相似。

  • 每个SELECT语句中的列也必须按照相同的顺序排列。


UNION 语法


SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2;
复制代码


UNION ALL 语法UNION运算符默认仅选择不同的值。为了允许重复的值,请使用UNION ALL


SELECT column_name(s) FROM table1UNION ALLSELECT column_name(s) FROM table2;
复制代码


注意:结果集中的列名通常等于第一个*SELECT*语句中的列名。

演示数据库

在本教程中,我们将使用著名的 Northwind 示例数据库。


Customers 表部分选择:



Suppliers 表部分选择:


SQL UNION 示例

以下 SQL 语句从“Customers”和“Suppliers”表中返回城市(仅不同的值):


SELECT City FROM CustomersUNIONSELECT City FROM SuppliersORDER BY City;
复制代码


注意:如果一些客户或供应商具有相同的城市,每个城市将只列出一次,因为*UNION仅选择不同的值。使用UNION ALL*也选择重复的值!

SQL UNION ALL 示例

以下 SQL 语句从“Customers”和“Suppliers”表中返回城市(还包括重复的值):


SELECT City FROM CustomersUNION ALLSELECT City FROM SuppliersORDER BY City;
复制代码

带有 WHERE 的 SQL UNION

以下 SQL 语句从“Customers”和“Suppliers”表中返回德国的城市(仅不同的值):


SELECT City, Country FROM CustomersWHERE Country='Germany'UNIONSELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;
复制代码

带有 WHERE 的 SQL UNION ALL

以下 SQL 语句从“Customers”和“Suppliers”表中返回德国的城市(还包括重复的值):


SELECT City, Country FROM CustomersWHERE Country='Germany'UNION ALLSELECT City, Country FROM SuppliersWHERE Country='Germany'ORDER BY City;
复制代码

另一个 UNION 示例

以下 SQL 语句列出了所有客户和供应商:


SELECT 'Customer' AS Type, ContactName, City, CountryFROM CustomersUNIONSELECT 'Supplier', ContactName, City, CountryFROM Suppliers;
复制代码


请注意上面的AS Type - 它是一个别名。SQL 别名用于给表或列一个临时的名称。别名仅在查询的持续时间内存在。因此,这里我们创建了一个名为“Type”的临时列,其中列出了联系人是“Customer”还是“Supplier”。

SQL GROUP BY 语句

GROUP BY语句将具有相同值的行分组为摘要行,通常与聚合函数一起使用,以根据一个或多个列对结果集进行分组。


GROUP BY 语法


SELECT column_name(s)FROM table_nameWHERE conditionGROUP BY column_name(s)ORDER BY column_name(s);
复制代码

演示数据库

以下是 Northwind 示例数据库中“Customers”表的一部分选择:


SQL GROUP BY 示例

以下 SQL 语句列出了每个国家的客户数量:


SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY Country;
复制代码


以下 SQL 语句列出了每个国家的客户数量,按高到低排序:


SELECT COUNT(CustomerID), CountryFROM CustomersGROUP BY CountryORDER BY COUNT(CustomerID) DESC;
复制代码

演示数据库

以下是 Northwind 示例数据库中“Orders”表的一部分选择:



以及“Shippers”表的一部分选择:


带有 JOIN 的 GROUP BY 示例

以下 SQL 语句列出了每个承运人发送的订单数量:


SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM OrdersLEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperIDGROUP BY ShipperName;
复制代码

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。


看完如果觉得有帮助,欢迎点赞、收藏关注



发布于: 刚刚阅读数: 5
用户头像

小万哥

关注

代码如人生 2023-02-09 加入

编程爱好者

评论

发布
暂无评论
深入理解 SQL UNION 运算符及其应用场景_MySQL_小万哥_InfoQ写作社区