【sql】深入理解 mysql的EXISTS 语法

相关文章:
【sql】深入理解 mysql的EXISTS 语法
【sql】初识 where EXISTS

1. 使用格式如下:

select * from a where exists ( 任何子查询 )

代码根据颜色分成两段,前面的是主查询,后面红色的是子查询,先主后子,主查询里面的属性可以放到子查询使用。

2. 使用含义:

该子查询如果“有数据结果”, 查询只要返回了结果行数,则该exists()的结果为“true”

该子查询如果“没有数据结果”,查询没有返回结果行数,则该exists()的结果为“false”

2.1 这里说一下什么叫有数据结果?

1.有数据结果

(1)查询全部的数据:SELECT * FROM studen
在这里插入图片描述
(2)查询全部的数据条数:SELECT COUNT(1) FROM student
在这里插入图片描述
(3)查询一个不存在的数据,显示数量:SELECT COUNT(1) FROM student WHERE id=888;
在这里插入图片描述

2.没有数据结果

查询不存在的数据记录:SELECT * FROM student WHERE id=888;
在这里插入图片描述

如上,只要返回的有数据结果,exists()的结果为“true”,否则就是false。

3.使用demo演示一下where exists的用法

(1)建表语句如下

SET FOREIGN_KEY_CHECKS=0;
 
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '名字',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
 
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', 'zhangsan', '18');
INSERT INTO `student` VALUES ('2', 'lisi', '19');
INSERT INTO `student` VALUES ('3', 'wangwu', '20');

(2) 建表结果如下

student表
在这里插入图片描述

前提:id=1存在记录,id=111不存在记录

(3)这三种都是返回全部记录,因为where exists子查询存在数据结果,所以返回true

SELECT * FROM student st WHERE EXISTS (SELECT * FROM student);
SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student);
SELECT * FROM student st WHERE EXISTS (SELECT COUNT(1) FROM student);

结果一二三相同:
在这里插入图片描述
(4)这两种,上面的那个不返回数据,下面的这个返回全部数据

SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where dd.id=111);
SELECT * FROM student st WHERE EXISTS (SELECT COUNT(1) FROM student dd where dd.id=111);

结果一不返回数据:
在这里插入图片描述
结果二返回数据:
在这里插入图片描述

(5)以下四种

SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where dd.id=1);
SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where dd.id=111);
SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where st.id=1);
SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where st.id=111);

结果一:
在这里插入图片描述
结果二:
在这里插入图片描述
结果三:
在这里插入图片描述
结果四:
在这里插入图片描述

总结:(1)整体查询分为主子,前面是主查询,where exists后面是子查询,先主后子

EXPLAIN SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where dd.id=1);
在这里插入图片描述
(2)子查询,有结果exists返回为true,无结果exists返回false。exists子查询返回true,主查询就正常返回全部内容,exists子查询返回false,主查询的内容就全部不返回。

(3)子查询count(1)一直有结果。即使count(1)返回0,也是有结果返回,所以where exists使用count(1)一直返回true.

(4)exists子查询使用select 1,有返回结果,子查询就返回true,没有返回结果,子查询就返回false。

(5)针对子查询使用select *,select 1,select count(1)都行,子查询返回的结果内容不重要,只要有结果就返回true,无结果返回false。

(6)子查询可以使用主查询的字段。如下:

第一个语句没有使用主查询的字段,只需要正常判断WHERE EXISTS是否有结果返回就好了。

SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where dd.id=1);

第二个语句st.id=1使用的是主查询的st表字段,将会限制主查询的内容。

SELECT * FROM student st WHERE EXISTS (SELECT 1 FROM student dd where st.id=1);

这个语句等同于

SELECT * FROM student st where st.id=1;

参考

https://blog.csdn.net/Mint6/article/details/105084644

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/468495.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux(Ubuntu)下安装paddleocr详细教程

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。 1、 Ubuntu安装教程: 首先安装paddlepaddle:pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 一般此项不会报错…

交叉注意力融合时空特征的TCN-Transformer并行预测模型

独家 | 高创新预测模型 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博…

IDEA上的Scala环境搭建

Scala环境搭建 一、搭建Scala开发环境 安装Scala编译器 安装scala-2.12.10.msi(详见【我的资源】) 检查scala安装情况 在dos窗口输入scala,检查是否能够进入编译器。进行简单的scala命令计算 在IDEA中进行scala编码 File - Settings - …

智能风暴:如何码垛协作机器人正在重塑日用品生产?

在日用品行业中,码垛工作一直是一项劳动强度大、重复性高的工作。如今,随着科技的发展,码垛协作机器人的出现,正在给这一行业带来革命性的改变。 以往,工人们在炎热或寒冷的环境下,搬运、堆叠着各种日用品&…

redis-黑马点评-商户查询缓存

缓存:cache public Result queryById(Long id) {//根据id在redis中查询数据String s redisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断是否存在if (!StrUtil.isBlank(s)) {//将字符串转为bean//存在,直接返回Shop shop JSONUtil.toBean(s, …

零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中,可以通过多种方法来查看版本号。以下是几种常用的方法: 使用cat命令查看/etc/centos-release文件: CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容,从而获得C…

传输大咖15|如何在 PC 客户端中集成镭速高速传输插件?

引言 在当前信息爆炸的时代,快速、安全、稳定地传输数据对于企业的日常运营至关重要。然而,传统的 FTP/HTTP 传输方式存在着传输速度慢、易受网络延时、丢包等问题。而镭速高速传输插件可以帮助企业轻松实现快速、安全的文件传输。本文将详细介绍如何在…

基于Spring Boot的云上水果超市的设计与实现

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行…

王老吉药业开拓数字经济“新蓝海”,成立数字经济研究所,科技赋能新品压片糖

3月12日,广州王老吉药业股份有限公司(以下简称“王老吉药业”)召开第十一届312感恩活动新闻发布会,宣告王老吉数字经济研究所成立,并发布王老吉压片糖新品。一系列重要重要举措,无一不标志着王老吉药业正以…

2.7 ROC曲线相比P-R曲线有什么特点?

2.7 ROC曲线相比P-R曲线有什么特点? 前情提要: P-R曲线详见:2.2 什么是精确率(Precision)与召回率(Recall)?二者如何权衡?) 2.4 ROC曲线是什么? 2…

目标检测——YOLOv5算法解读

作者:UltralyticsLLC公司 代码:https://github.com/ultralytics/yolov5 YOLO系列算法解读: YOLOv1通俗易懂版解读SSD算法解读YOLOv2算法解读YOLOv3算法解读YOLOv4算法解读YOLOv5算法解读 PP-YOLO系列算法解读: PP-YOLO算法解读…

用 二层口 实现三层口 IP 配置的一个实现方法

我们一般用 undo portswitch 来将二层口转为三层口,但如果设备不支持的话,那么。。。 一、拓朴图: 二、实现方法: 起一个 vlan x,配置 vlanif地址,然后二层口划分到 vlan x 下,对端做同样的配置…

解决jsp request.getParameter乱码问题(兼容Tomcat 6~8三个版本)

JSP页面写法&#xff1a; <% page contentType"text/html; charsetutf-8" language"java" %> <% page import"java.io.*" %> <%! int getServerVersion(HttpServletRequest request) {ServletContext application request.getS…

汽车制造业供应商管理会面临哪些问题?要如何解决?

汽车行业的供应链是及其复杂的&#xff0c;并且呈全球化分布&#xff0c;企业在知识产权方面的优势很可能是阶段性的。企业需要持续保持领先&#xff0c;将面临巨大的挑战&#xff0c;尽快地将产品推向市场是保持领先的唯一途径。然而&#xff0c;如果没有正确的方式去实现安全…

C++基础复习自用--vector

vector底层实现以及动态扩容 array是静态分配&#xff0c;后期无法改变。如果程序需要更大的array只能重新分配一个地址然后把旧空间里的复制过来。 vector是动态分配&#xff0c;他对大小可以合理控并且重新分配是数据移动效率高 关于查找删除插入 array和vector都是连续分…

20 OpenCV像素重映

文章目录 像素重映remap 重映算子代码示例 像素重映 简单点说就是把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去&#xff0c;形成一张新的图像。 g(x,y)是重映射之后的图像&#xff0c;h(x,y)是功能函数&#xff0c;f是源图像 remap 重映算子 Remap…

单例模式与原型模式的深度探索之旅

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 &#x1f680; 转载自&#xff1a;设计模式深度解析&#xff1a;单例模式与原型模式的深度探索之…

鸿蒙Harmony应用开发—ArkTS声明式开发(画布组件:Canvas)

提供画布组件&#xff0c;用于自定义绘制图形。 说明&#xff1a; 该组件从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 不支持。 接口 Canvas(context?: CanvasRenderingContext2D) 从API version 9开始&…

AI实景无人直播系统源代码开发部署流程

一、 开发流程分享 需求分析&#xff1a;与客户明确需求&#xff0c;确定无人直播系统的功能和特性。 设计系统架构&#xff1a;根据需求分析的结果&#xff0c;设计系统的架构&#xff0c;包括前后端的组成和各个模块的功能划分。 编写源代码&#xff1a;根据系统架构设计&a…