• 14 组合查询


    1.组合查询

    SQL允许执行多个查询(多个SELECT语句),并将结果作为一个查询结果集。这些组合查询通常称为并(union)或者复合查询(compound query)。

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

    (1)对一个查询中从不同的表返回数据结构

    (2)对一个表执行多个查询,按一个查询返回数据。

    2.创建组合查询

    可以使用UNION操作符来组合数条SQL查询,并将它们的结果组合成一个结果集。

    (1)在各条SELECT语句之间放上关键字UNION

    假设需要IllinoisIndianaMichigan等美国几个州的所有顾客的报表,还包括不管位于哪个州的所有的Fun4All

    首先来看单条语句。

    1)SELECTIllinoisIndianaMichigan等州的缩写传递给IN子句,检索出这些州的所有行,输入:

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_state IN ('IL', 'IN', 'MI');

    输出:

    2)SELECT利用简单的相等测试找出所有Fun4All,输入:

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_name = 'Fun4All';

    输出:

    3)组合这两条语句,输入:

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_state IN ('IL', 'IN', 'MI')

    UNION

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_name = 'Fun4All';

    输出:

    4)为了便于参考,使用多条WHERE子句,输入:

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_state IN ('IL', 'IN', 'MI')

    OR cust_name = 'Fun4All';

    输出:

    可以看出,该查询使用UNIONWHERE子句更复杂,但对于较复杂的过滤条件,或从多个表中检索数据,使用UNION可能会更简单。

    (2)UNION规则

    UNION必须由两条或以上的SELECT语句,之间用关键字UNION分隔;

    UNION中每个查询必须包含相同的列、表达式或者聚集函数;

    列数据类型必须兼容。

    (3)包含或取消重复的行。

    UNION默认从查询结果集中自动去除了重复的行,如果想返回所有的匹配行,可以使用UNION ALL,输入:

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_state IN ('IL', 'IN', 'MI')

    UNION ALL

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_name = 'Fun4All';

    输出:

    有一行出现两次。

    (4)对组合查询结果排序

    在使用UNION组合查询时,只允许使用一条ORDER BY子句,必须位于最后一条SELECT语句。

    输入:SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_state IN ('IL', 'IN', 'MI')

    UNION

    SELECT cust_name, cust_contact, cust_email

    FROM Customers

    WHERE cust_name = 'Fun4All'

    ORDER BY cust_name, cust_contact;

    输出:

    虽然ORDER BY似乎只是最后一条SELECT语句的组成部分,但实际上,DBMS将用它来排序所有SELECT语句返回的所有结果。

  • 相关阅读:
    函数式编程初探
    基于node的tcp客户端和服务端的简单通信
    eltree 和 elswitch 组合使用
    .net core 部署为Window服务
    网页根据宽度 自动缩放
    GroundPrimitive 批量加载 geometryInstances 不同颜色会出现重叠现象
    vite 创建vue3 项目
    SQl Server 备份还原步骤
    LeetCode 102. 二叉树的层序遍历
    LeetCode 1. 两数之和
  • 原文地址:https://www.cnblogs.com/Sumomo0516/p/6131551.html
Copyright © 2020-2023  润新知