【MySQL必知必会】第17章:组合查询

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

以下两种情况时需要使用到组合查询:

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

17.1 创建组合查询

使用UNION函数来组合数条单个SELECT语句的SQL查询:

SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
UNION 
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id IN (1001, 1002);
  • 使用UNION来分隔两条SELECT语句,将其各自检索的结果合并后返回称单个查询的结果集

  • 也可以使用WHERE子句,但是对于更复杂的过滤条件或从多表检索数据的情况,使用UNION会更简单而且便于理解

17.2 UNION规则

  • UNION用于分隔两条或两条以上的SELECT语句
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数

17.3 包含或取消重复行

UNION默认会从查询结果中自动去除重复的行,如果需要更改,返回所有匹配行,那么久需要使用UNION ALL函数

SELECT vend_id, prod_id, prod_price
FROM products
WHERE prod_price <= 5
UNION ALL
SELECT vend_id, prod_id, prod_price
FROM products
WHERE vend_id IN (1001, 1002);

17.4 对组合查询结果的排序

在使用UNION时,只能使用一条ORDER BY子句,且必须出现在最后一条SELECT语句之后

SELECT vend_id, prod_id, prod_price
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;
  • 似乎ORDER BY子句只对最后一条SELECT语句的组成部分,但实际上MySQL将其用来排序所有SELECT语句返回的结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 数据库入门 数据库: 保存有组织的数据的容器(通常是一个文件或一组文件).数据库软件应该称为 DBMS(DataB...
    Mjericho阅读 509评论 0 0
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,778评论 0 44
  • 1. SQL 简介 SQL 的目标 理想情况下,数据库语言应允许用户: 建立数据库和关系结构 完成基本数据管理任务...
    板蓝根plank阅读 2,370评论 0 11
  • 【雎才雎宝】-雷达核心部件项目 以睿智洞察项目,用智慧创造价值 在电子信息技术飞速发展,国际形势风云突变的今天,中...
    雎才雎宝朱晖阅读 278评论 0 0
  • (一个all患者的自白) 运交华盖欲何求 血气方刚患血瘤 钱财用尽均无用 一人辛酸千人愁 医术治病不救命 心态平静...
    喷泉阅读 283评论 6 14