zoukankan      html  css  js  c++  java
  • mysql组合查询

    使用UNION

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

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

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

    组合查询和多个WHERE条件:多数情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的工作相同。

    可用UNION操作符来组合数条SQL查询,所需要做的就是给出每条SELECT语句,在各条语句之间放上关键字UNION

    例如:

    ​ 假设需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品,当然可以利用WHERE子句来完成,不过这里我们使用UNION

    • 这里是两条语句的组合

      SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5;

      SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001, 1002);

    • 可以使用下面的语句

      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);

    • 同样,可以使用WHERE子句

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

    UNION规则

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

    包含或取消重复的行

    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);

    对组合查询结果排序

    SELECT语句的输出用ORDER BY子句排序,在用UNION组合查询时,只能使用一条ORDER BY子句。它必须出现在最后一条SELECT语句之后。不允许使用多条ORDER BY子句。

    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;

  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/ZSMblog/p/12067779.html
Copyright © 2011-2022 走看看