文档章节

MySQL必知必会-14MySQL组合查询

z
 zhiliubai
发布于 2017/03/18 12:36
字数 750
阅读 1
收藏 0
多数SQL查询都只包含一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询。

有两种情况,其中需要使用组合查询:
在单个查询中从不同的表返回类似结构的数据
对单个表执行多个查询,按单个查询返回数据。

组合查询和多个WHERE条件,多数情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的工作相同。换句话说,任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出,在以下段落中可以看到这一点。

   
   
  1. SELECT
  2. vend_id,
  3. prod_id,
  4. prod_price
  5. FROM
  6. products
  7. WHERE
  8. prod_price <= 5
  9. UNION
  10. SELECT
  11. vend_id,
  12. prod_id,
  13. prod_price
  14. FROM
  15. products
  16. WHERE
  17. vend_id IN (1001, 1002);
UNION指示MySQL执行两条SELECT语句,并把输出组合成单个查询结果集。

UNION规则
UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(如果组合4条SELECT语句,将要使用3个UNION关键字)
UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)#经过实验,MySQL5.7不需要相同的列,只需要 兼容的数据类型就好。
列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型

包含或取消重复的行
UNION默认的行为,重复的行被自动取消。
如果想返回所有匹配的行,使用UNION ALL而不是UNION
   
   
  1. SELECT
  2. vend_id,
  3. prod_id,
  4. prod_price
  5. FROM
  6. products
  7. WHERE
  8. prod_price <= 5
  9. UNION ALL
  10. SELECT
  11. vend_id,
  12. prod_id,
  13. prod_price
  14. FROM
  15. products
  16. WHERE
  17. vend_id IN (1001, 1002);
使用UNION ALL不取消重复的行。

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

对组合查询结果排序
SELECT语句输出用ORDER BY子句排序,在用UNION组合查询时,只能使用一条ORDER BY子句,必须出现在最后一条SELECT语句之后,因此不允许使用多条ORDER BY子句。
   
   
  1. SELECT
  2. vend_id,
  3. prod_id,
  4. prod_price
  5. FROM
  6. products
  7. WHERE
  8. prod_id <= 5
  9. UNION
  10. SELECT
  11. vend_id,
  12. prod_id,
  13. prod_price
  14. FROM
  15. products
  16. WHERE
  17. vend_id IN (1001, 1002)
  18. ORDER BY
  19. vend_id,
  20. prod_id;
ORDER BY子句似乎只是最后一条SELECT语句的组成部分,但实际上MySQL将用它来排序所有SELECT语句的所有结果。

组合不同的表,其中使用UNION的组合查询可以应用不同的表。
   
   
  1. SELECT
  2. vend_id,
  3. prod_id,
  4. prod_price
  5. FROM
  6. products
  7. WHERE
  8. prod_id <= 5
  9. UNION
  10. SELECT
  11. customers.cust_id,
  12. customers.cust_id,
  13. customers.cust_id
  14. FROM
  15. customers
  16. ORDER BY
  17. vend_id,
  18. prod_id;

本文转载自:http://blog.csdn.net/zoroday/article/details/61199224

z
粉丝 0
博文 26
码字总数 0
作品 0
广州
私信 提问
《MySQL必知必会》笔记1

2016/2/21 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 数据库管理系统(DBMS):用于访问数据库。 表:某种特定类型数据的结构化清单。相同的数据库中表的名字是唯一的 模...

fxdhdu
2016/03/01
19
0
前端必知必会HTTP请求系列(二)简单一点的HTTP协议

http协议用户客户端和服务器之间的通信 http协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信。 那么问题来个如果两台服务器之间一台服务器向另一台服务器进行接口请求...

前端技术小哥
01/03
0
0
MySQL必知必会:组合查询(Union)

本篇文章主要介绍使用操作符将多个查询组合成一个结果集。本文参考《必知必会》+工作实践融合 组合查询 定义 在大多数开发中,使用一条查询就会返回一个结果集。如果,我们想一次性查询多条S...

星空幻颖
2017/11/29
0
0
5本数据库经典之作,没看过的都白学了!

  【IT168 评论】1、 《数据库系统实现》   内容简介:书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分――存储管理器、查询处理器和事务管理器的实...

it168网站
2017/11/13
0
0
MySQL快速入门

继恶补了C++基础之后,又来恶补MySQL了,花了将近一天的时间啃完了<MySQL必知必会>这本书,整理了有点糙的读书笔记。 1.SHOW语句的使用: 2.SELECT查询语句: 3.LIMIT子句限定显示结果行数:...

waffle930
2016/10/04
95
0

没有更多内容

加载失败,请刷新页面

加载更多

jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
9分钟前
1
0
Django的ChoiceField和MultipleChoiceField错误提示,选择一个有效的选项

在表单验证时提示错误:选择一个有效的选项 例如有这样一个表单: class ProductForm(Form): category = fields.MultipleChoiceField( widget=widgets.SelectMultiple(), ...

编程老陆
27分钟前
1
0
Vue核心概念及特性 (一)

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 > 特点: 易用,灵活,高效,渐进式框架。 > 可以随意组合需要用到的模块 vue + components + vue-router + vuex + v...

前端优选
30分钟前
2
0
Kylin 精确去重在用户行为分析中的妙用

作者:史少锋,Apache Kylin committer & PMC,2019/10/11 在上次文章《如何在 1 秒内做到大数据精准去重》中,我们介绍了 Apache Kylin 为什么要支持大数据集上的精确去重,以及基于 Bitmap...

ApacheKylin
今天
6
0
学习记录(二) es6基本语法(rest参数,模板化,axios模块,拦截器)

日常学习记录 模块化:把一个大文件分成多个小文件,按照一定规范进行拼接 es5写法: 导出:module.exports = 数据 导入:require("路径") /路径未添加后缀名时 //默认添加.js //把路径作为文件名...

Pole丶逐
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部