首页 > 数据库 >sql系列5-组合查询

sql系列5-组合查询

时间:2023-09-18 16:12:24浏览次数:37  
标签:系列 cust UNION 查询 sql WHERE SELECT name

sql系列5-组合查询✅

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

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

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

 在一个查询中从不同的表返回结构数据;

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

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

表示: Illinois、Indiana 和 Michigan 等美国几个州的所有顾客的报表,还想包括不管位于哪个州的所有的 Fun4All。

这里也可以用Or

 UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字

UNION 分隔(因此,如果组合四条 SELECT 语句,将要使用三个 UNION

关键字)。

 UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过,

各个列不需要以相同的次序列出)。

 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可以隐含

转换的类型(例如,不同的数值类型或不同的日期类型)。

UNION 从查询结果集中自动去除了重复的行,如果想返回

所有的匹配行,可使用 UNION ALL 而不是 UNION

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

image-20230918142024470

UNIONWHERE

UNION 几乎总是完成与多个 WHERE 条件相同的工作。UNION ALL 为 UNION 的一种形式,它完成 WHERE 子句完成

不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),

就必须使用 UNION ALL,而不是 WHERE。

SELECT 语句的输出用 ORDER BY 子句排序。在用 UNION 组合查询时,只

能使用一条 ORDER BY 子句,它必须位于最后一条 SELECT 语句之后。对

于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一

部分的情况,因此不允许使用多条 ORDER BY 子句。

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;

这条UNION在最后一条SELECT语句后使用了ORDER BY子句。虽然ORDER

BY 子句似乎只是最后一条 SELECT 语句的组成部分,但实际上 DBMS 将

用它来排序所有 SELECT 语句返回的所有结果

标签:系列,cust,UNION,查询,sql,WHERE,SELECT,name
From: https://www.cnblogs.com/zheng-s/p/17712224.html

相关文章

  • SQL系列4-插入更新与删除
    SQL系列4-插入更新与删除✅下面是许多SQL程序员使用UPDATE或DELETE时所遵循的重要原则。除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。保证每个表都有主键(如果忘记这个内容,请参阅第12课),尽可能像WHERE子句那样使用它(......
  • 软件测试|MySQL CROSS JOIN:交叉连接的详细解析
    简介在MySQL数据库中,CROSSJOIN是一种用于生成两个或多个表的笛卡尔积的连接方法。CROSSJOIN不需要任何连接条件,它将左表的每一行与右表的每一行进行组合,从而生成一个包含所有可能组合的结果集。本文将详细介绍MySQL中的CROSSJOIN概念,并提供示例来加深理解。什么是CROSS......
  • 软件测试|MySQL INNER JOIN:内连接的详细解析
    简介在关系型数据库中,数据通常存储在多个表中,并且这些表之间可能存在关联关系。为了从多个表中检索相关数据,SQL提供了不同类型的连接操作,其中之一就是内连接(INNERJOIN)。本文将详细解析MySQL内连接的概念、语法和使用案例。什么是内连接(INNERJOIN)?内连接是一种用于从两个或多个表中......
  • SQL 将查询结果插入到另一张表中
    INSERTINTO如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法:INSERTINTO目标表SELECT*FROM来源表WHERE条件;例如,要将test表插入到newTest表中,则可以通过如下SQL语句实现:INSERTINTOnewTestSELECT*FROMtest;如果只希望导入指定......
  • Ubuntu20.04安装Mysql8主从
    Ubuntu20.04安装Mysql8主从一.主数据库安装1.下载安装包并初始化数据库#进入目录cd/opt#下载安装包wgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz#解压tar-xvfmysql-8.0.20-linux-glibc2.12-x86_64.tar.xz......
  • SQLServer递归触发器在KES中的一次改造分析
    文章概要:某项目将数据从SQLSERVER迁移到KES。其中SQLSERVER中触发器用到了TRIGGER_NESTLEVEL()函数,KES并不能直接支持该函数。起初在分析该问题时想复杂了本文做了一次记录。实际上在kes兼容sqlsevrer基础语法,直接简单使用SYS_TRIGGER_DEPTH()替换TRIGGER_NESTLEVEL()函......
  • MySQL篇:第七章_详解mysql存储过程&函数
    存储过程含义:一组经过预先编译的sql语句的集合好处:1、提高了sql语句的重用性,减少了开发程序员的压力2、提高了效率3、减少了传输次数分类:1、无返回无参2、仅仅带in类型,无返回有参3、仅仅带out类型,有返回无参4、既带in又带out,有返回有参5、带inout,有返回有参注意:in、o......
  • DVWA靶场通关- SQL Injection(SQL注入)
    BruteForce(暴力(破解))、CommandInjection(命令行注入)、CSRF(跨站请求伪造)、     FileInclusion(文件包含)、FileUpload(文件上传)、InsecureCAPTCHA(不安全的验证码)、    SQLInjection(SQL注入)、SQLInjection(Blind)(SQL盲注)、XSS(DOM)(基于DOM树)、    XSS(Reflec......
  • MySQL篇:第六章_详解mysql视图
    周末有朋友来上海没来得及更新,特此更两篇以正身视图含义:理解成一张虚拟的表视图和表的区别: 使用方式 占用物理空间 视图 完全相同 不占用,仅仅保存的是sql逻辑 表 完全相同 占用视图的好处:1、sql语句提高重用性,效率高2、和表实现了分离,提高了安全性视......
  • Navicat连接SQLServer提示:未发现数据源名并且未指定默认驱动程序
    问题:Navicat连接SQLServer提示:未发现数据源名并且未指定默认驱动程序解决方式一:可以直接安装Navicat根目录(安装目录)下的sqlncli.msi(32位)或sqlncli_x64.msi(64位) 双击开始安装,一直下一步,正常安装完成的话,重启下Navicat就没有问题了,可以正常连接了。解决方式一:在官......