04 MySQL --DQL 专题--Union、exists

embedded/2024/10/17 21:18:31/

1. UNION、UNION ALL

UNION 关键字的作用?
合并两个或多个 SELECT 语句的结果。发挥的作用与 or 非常相似

UNION关键字生效的前提?

  • 每个 SELECT 语句必须拥有相同数量的列。
  • 每个 SELECT 语句中的列的顺序必须相同。
  • 列必须拥有相似的数据类型。
SELECT column_name(s) FROM table1
UNION (ALL)
SELECT column_name(s) FROM table2;

UNION、UNION ALL的区别?
union 会对合并之后的查询结果集进行去重操作。
union all 是直接将查询结果集合并,不进行去重操作。

因此,union all 和 union 都可以完成的话,优先选择 union all,因为其不需要去重,所以效率高一些。

UNION 后的结果集格式?
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

1.1 实例

数据库中有两张表,结构如图
在这里插入图片描述
需求:查询两个表中的 conutry,并去重

分析:将两表查出的 conutry 进行 union。

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country;

从两表中选取所有的 conutry 为中国(CN)的数据(不去重):

SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;

在这里插入图片描述

2. EXISTS

EXISTS 运算符用于判断查询子句是否有记录,如果查询子句存在记录则返回 True,否则返回 False。

更具体来说,采用的是一种轮询的做法

案例:订单信息保存在 t_order 表中,顾客信息保存在 t_customer 表中。现在我们要查询有过订单的顾客信息

#对于t_customer表中的每行记录,EXISTS子查询都会执行一次,去检查t_order表中是否存在至少一条记录,其customer_id与当前t_customer表中的customer_id相匹配。#当EXISTS子查询找到至少一条匹配的订单记录时,即o.customer_id = c.customer_id为真的情况下,子查询的结果是TRUE。#这个TRUE结果会被外层的WHERE子句接收,因此WHERE EXISTS (...)条件得到满足,这意味着当前正在检查的t_customer表中的这一行记录将被视为满足查询条件。#因此,t_customer表中所有拥有至少一个相关订单记录的客户行都会被包含在外层查询的最终结果集中。
select * 
from t_customer c 
where exists(select * from t_order o where o.customer_id=c.customer_id);

案例:查询没有下过订单的顾客信息

select * 
from t_customer c 
where not exists(select * from t_order o where o.customer_id=c.customer_id);

http://www.ppmy.cn/embedded/4060.html

相关文章

Java接口

1 接口的概念 笔记本上的USB口,电源插座等都是接口 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型 …

最小生成树算法的实现c++

最小生成树算法的实现c 题目链接:1584. 连接所有点的最小费用 - 力扣(LeetCode) 主要思路:使用krusal算法,将边的权值进行排序(从小到大排序),每次将权值最小且未加入到连通分量中…

【Python基础】线程

文章目录 [toc]线程与进程的区别与联系同步任务示例 并行任务示例线程调度的“随机性” 线程方法thread_object.start()thread_object.join()thread_object.setDaemon()没有设置守护线程的情况设置守护线程的情况 thread_object.current_thread() 目前爬虫的三种实现单线程爬虫…

如何通过drissionpage以及js逆向过字符/滑块/点选/九宫格验证码文章/视频学习案例

目录 零、各种关于drissionpage文章视频案例解决方案合集一、过字符类验证码反爬实战(自动化和逆向两种解法)二、过滑块类验证码反爬实战(自动化和逆向两种解法)三、过点选类验证码反爬实战(自动化和逆向两种解法)四、过九宫格验证码反爬实战(自动化和逆向两种解法)仅供…

SpringBoot 集成 EasyExcel 3.x 优雅实现 Excel 导入导出

介绍 EasyExcel 是一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。它能让你在不用考虑性能、内存的等因素的情况下,快速完成 Excel 的读、写等功能。 EasyExcel文档地址:https://easyexcel.opensource.alibaba.com/ 快速开始 …

PySpark预计算ClickHouse Bitmap实践

1. 背景 ClickHouse全称是Click Stream,Data WareHouse,是一款高性能的OLAP数据库,既使用了ROLAP模型,又拥有着比肩MOLAP的性能。我们可以用ClickHouse用来做分析平台快速出数。其中的bitmap结构方便我们对人群进行交并。Bitmap位…

Stable Diffusion 模型分享:MeinaMix(动漫)meinamix_meinaV11

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 MeinaMix 的目标是:能够在很少的提示下…

vue3使用阿里oss上传资源(上传图片、视频、文件、pdf等等),删除oss资源。获取STS token的接口

vue3使用阿里oss上传资源 全部oss.ts代码如下: import OSS from "ali-oss";// 获取STS token export const getSTSToken async () > {const STS_TOKEN_URL "....."; // 获取STS token的接口,后端提供// fetch方式可按需更换成…