MySQL组合查询

打印 上一主题 下一主题

主题 1054|帖子 1054|积分 3162

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目次

1、组合查询
2、创建组合查询
(1)使用UNION
(2)UNION的规则
(3)包含或取消重复行
(4)对组合查询结果举行排序
3、小结

博主用的是mysql8 DBMS,附上示例资料:
百度网盘链接: https://pan.baidu.com/s/1XaWi3Y7hpXbs_uHq2cPI6Q
提取码: fpnx
1、组合查询

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是,SQL 也允许执行多个查询(多条 SELECT 语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。
主要有两种环境必要使用组合查询:


  • 在一个查询中从差别的表返回结构数据;
  • 对一个表执行多个查询,按一个查询返回数据。
   提示:组合查询和多个 WHERE 条件
  多数环境下,组合雷同表的两个查询所完成的工作与具有多个 WHERE子句条件的一个查询所完成的工作雷同。换句话说,任何具有多个WHERE 子句的 SELECT 语句都可以作为一个组合查询,在下面可以看到这一点。
  2、创建组合查询

可用UNION 操纵符来组合数条 SQL 查询。利用 UNION,可给出多条SELECT 语句,将它们的结果组合成一个结果集。
(1)使用UNION

使用 UNION 很简单,所要做的只是给出每条 SELECT 语句,在各条语句之间放上关键字 UNION。


  • 假如必要 MI、IN、OH等美国几个州的全部顾客的报表,还想包括不管位于哪个州的全部的 顾客名为Wascals的报表。
  • 这里使用了 UNION、ORDER BY,背面会讲
  1. -- WHERE方式
  2. SELECT cust_name, cust_contact, cust_email
  3. FROM customers
  4. WHERE cust_state IN ('MI', 'IN', 'OH')
  5. OR cust_name = 'Wascals'
  6. ORDER BY cust_name;
  7. -- UNION方式,UNION默认自带DISTINCT,想要显示所有结果加上ALL
  8. -- 并集时默认去掉重复行
  9. SELECT cust_name, cust_contact, cust_email
  10. FROM customers
  11. WHERE cust_state IN ('MI', 'IN', 'OH')
  12. UNION -- ALL
  13. SELECT cust_name, cust_contact, cust_email
  14. FROM customers
  15. WHERE cust_name = 'Wascals';
  16. ORDER BY cust_name;
复制代码
 在这个简单的例子中,使用 UNION 大概比使用 WHERE 子句更为复杂。但对于较复杂的过滤条件,大概从多个表(而不是一个表)中检索数据的情形,使用 UNION 大概会使处理更简单。
(2)UNION的规则

可以看到,UNION 非常容易使用,但在举行组合时必要注意几条规则。


  • UNION 必须由两条或两条以上的 SELECT 语句构成,语句之间用关键字UNION分隔(因此,假如组合四条SELECT语句,将要使用三个UNION关键字)。
  • UNION 中的每个查询必须包含雷同的列、表达式或聚集函数(不过,各个列不必要以雷同的次序列出)。
  • 列数据范例必须兼容:范例不必完全雷同,但必须是 DBMS 可以隐含转换的范例(例如,差别的数值范例或差别的日期范例)。
假如服从了这些根本规则或限定,则可以将 UNION 用于任何数据检索操纵。
(3)包含或取消重复行

UNION 从查询结果集中自动去除了重复的行;换句话说,它的举动与一条 SELECT 语句中使用多个 WHERE 子句条件一样。
比如:由于 MI 州有一个 Wascals 单元,所以两条 SELECT 语句都返回该行。使用 UNION 时,重复的行会被自动取消。这是 UNION 的默认举动,假如愿意也可以改变它。事实上,假如想返回全部的匹配行,可使用 UNION ALL 而不是 UNION。
-- UNION方式,UNION默认自带DISTINCT,想要表现全部结果加上ALL,并集时默认去掉重复行 
(4)对组合查询结果举行排序

SELECT 语句的输出用 ORDER BY 子句排序。在用 UNION 组合查询时,只能使用一条 ORDER BY 子句,它必须位于末了一条 SELECT 语句之后。也就是只能对合并之后的结果举行排序,不能两个结果单独排序。
   分析:其他范例的 UNION  -- MYSQL不支持
  某些 DBMS 还支持另外两种 UNION:EXCEPT(有时称为 MINUS)可用来检索只在第一个表中存在而在第二个表中不存在的行;而INTERSECT 可用来检索两个表中都存在的行。现实上,这些 UNION 很少使用,由于雷同的结果可利用联结得到。
  3、小结



  • UNION着实就是对SELECT语句查询结果取并集,理论上另有交集INTERSECT, 差集EXCEPT。
  • 使用UNION必要每个查询必须包含雷同的列、表达式或聚集函数,列数据范例必须兼容
  • UNION默认会消除重复行,想要不消除加上ALL即可
  • 对组合查询的排序只能在末了加上ORDER BY,只能对最终的结果举行排序。ORDER BY总是在末了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表