第十七章 组合查询

学习目标:

如何利用UNION操作符将多条SELECT语句组合成一个结果集。

组合查询:

多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语 句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个 查询结果集返回。这些组合查询通常称为并(union)或复合查询 (compound query)。

有两种基本情况,需要使用组合查询:

  • 在单个查询中从不同的表返回类似结构的数据;
  • 对单个表执行多个查询,按单个查询返回数据。

组合查询和多个WHERE条件:

多数情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的 工作相同。换句话说,任何具有多个WHERE子句的SELECT语句 都可以作为一个组合查询给出,在以下段落中可以看到这一点。 这两种技术在不同的查询中性能也不同。因此,应该试一下这两种技术,以确定对特定的查询哪一种性能更好。

创建组合查询:

可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。

使用UNION:

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

Q:需要价格小于等于5的所有物品的一个列表,而且还想包括供应商10001和10002生产的所有物品(不考虑价格)

SELECT vend_id,prod_id,prod_name

FROM products

WHERE prod_price <= 5

UNION

SELECT vend_id,prod_id, prod_price

FROM products

WHERE vend_id IN (1001,1002);

###用多条WHERE子句解决方法:(0.5s)

SELECT vend_id,prod_id,prod_name

FROM products

WHERE prod_price <= 5 OR vend_id IN (1001,1002);

UNION规则:

正如所见,并是非常容易使用的,但是在进行并时有几条规则需要注意。

  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔。
  • UNION中的每个查询必须包含相同的列,表达式或聚集函数(不过每个列不需要以相同的次序列出)
  • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型。

包含或取消重复的行:

UNION从查询结果集中自动去除了重复的行(换句话说,它的行为与单条SELECT语句中使用多个WHERE子句条件一样)。

如果想返回所有匹配的行,应该使用UNION ALL。

SELECT vend_id,prod_id,prod_name

FROM products

WHERE prod_price <= 5

UNION ALL

SELECT vend_id,prod_id, prod_price

FROM products

WHERE vend_id IN (1001,1002);

UNION与WHERE:

本章开始时说过,UNION几乎总是完成与多个 WHERE条件相同的工作。UNION ALL为UNION的一种形式,它完成 WHERE子句完成不了的工作。如果确实需要每个条件的匹配行全 部出现(包括重复行),则必须使用UNION ALL而不是WHERE。

对组合查询结果排序:

在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。

对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY 语句。

SELECT vend_id,prod_id,prod_name

FROM products

WHERE prod_price <= 5

UNION

SELECT vend_id,prod_id, prod_price

FROM products

WHERE vend_id IN (1001,1002)

ORDER BY vend_id,prod_price;

组合不同的表:

使用UNION的组合查询可以应用不同的表。

原文地址:https://www.cnblogs.com/mumulin99/p/9838438.html

时间: 2024-11-05 23:29:20

第十七章 组合查询的相关文章

MySQL必知应会-第17章-组合查询

第17章-组合查询 本章讲述如何利用UNION操作符将多条SELECT语句组合成一个结果集. 17.1 组合查询 多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句. MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并( union) 或复合查询(compound query).有两种基本情况,其中需要使用组合查询:? 在单个查询中从不同的表返回类似结构的数据:? 对单个表执行多个查询,按单个查询返回数据. 组合查询和多

SQL必知必会 笔记 第十四章 组合查询

14.1组合查询 多数SQL查询都只包含从一个或多个表中返回单条SELECT语句.但是,SQL与允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回.这些组合查询通常称为并(union)或符合查询(compound query). 有两种基本情况,其中需要使用组合查询. (1)在单个查询中从不同的表类似返回结构数据. (2)对单个表执行多个查询,按单个查询返回数据. 14.2创建组合查询 可用UNION操作符来组合数条SQL查询.利用UNION,可给出多条SELECT语句,将

数据库9:联结表 高级联结 组合查询 全文本搜索

第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分.   外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系. 好处:供应商信息不重复,不浪费空间和时间,方便日后修改,一个表信息改动不影响另一个表的信息 联结是一种机制,使用特殊的语法,可以联结多个表返回一组输出,联结在运行时关联表中正确的行.   创建联结          

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性:

Gradle 1.12 翻译——第十七章. 从 Gradle 中调用 Ant

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41204073 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin

现代软件工程讨论第九章-十七章

第九章 9.5.1  PM们的故事 9.5.2  我是做PM 的料么? 在校学生如何为成为PM做准备 你是否觉得你的长处不在于写代码和debug,而是协调.沟通,让一个团队或组织有效运转起来?你是否喜欢表达,善于和各种专业背景的人沟通?你是否经常思考如何改进生活中点点滴滴的小问题?你会思考这样的问题么:新浪微博.豆瓣.qq.微信都可以社交,它们的定位.产品特性.用户群.解决的需求,有什么不同?你是否对以下领域感兴趣,甚至自己找过相关的书来看:心理学.社会学.组织行为学.统计学.商业模式? 如果你

第十七章——配置SQLServer(4)——优化SQLServer实例的配置

原文:第十七章--配置SQLServer(4)--优化SQLServer实例的配置 前言: Sp_configure 可以用于管理和优化SQLServer资源,而且绝大部分配置都可以使用SQLServer ManagementStudio的图形化界面实现. 准备工作: 为了查看SQLServer当前实例的配置,也可以使用下列查询来实现: SELECT * FROM sys.configurations ORDER BY name 下面是本机的结果: 步骤: 1. 执行下面语句,以便看到实例级别的

第十七章——配置SQLServer(3)——配置“对即时负载的优化”

原文:第十七章--配置SQLServer(3)--配置"对即时负载的优化" 前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中.在很多时候,我们会执行一些简单的程序,仅仅执行一次,而为这些查询创建存储过程是非常浪费内存资源的.由于内存不足,可能会导致你的缓存溢出,从而影响性能.在2005之前,这是一个大问题,为了纠正这个问题.微软在SQLServer 2008中引入了对即时查询负载的优化功能.这个功能在2012也依旧可用.是基于实例级别的.

第十七章——配置SQLServer(1)——为SQLServer配置更多的处理器

原文:第十七章--配置SQLServer(1)--为SQLServer配置更多的处理器 前言: SQLServer提供了一个系统存储过程,SP_Configure,可以帮助你管理实例级别的配置.微软建议使用默认配置,但是基于不同的服务器.不同负载的系统和你的用法,更改配置可能会给你的性能带来好处.在32位和64位系统中,sp_configure会有一些差异. 我们经常见到SQLServer所在的服务器上还包含了如IIS.文件服务器或者域控制器这些服务或者功能.这些会影响你的性能甚至对正常运作有阻