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

news2024/9/20 18:42:58

相关文章:
【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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从政府工作报告探计算机行业发展

文章目录 每日一句正能量前言以“数”谋新、加“数”向实人工智能方面人工智能成核心驱动引擎 软件方面通信方面后记 每日一句正能量 该来的始终会来,千万别太着急,如果你失去了耐心,就会失去更多。该走过的路总是要走过的,从来不…

Android14之HIDL报错:Invalid sparse file format at header magic(一百九十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

【数据结构与算法】(17):计数排序和基数排序详解

🤡博客主页:Code_文晓 🥰本文专栏:数据结构与算法 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多数据结构与算法点击专栏链接查看&…

智慧城市与数字孪生:科技融合助力城市可持续发展

随着信息技术的迅猛发展,智慧城市和数字孪生作为现代城市发展的重要理念和技术手段,正日益受到广泛关注。智慧城市通过集成应用先进的信息通信技术,实现城市管理、服务、运行的智能化,而数字孪生则是利用数字化手段对物理城市进行…

面试笔记——Redis(使用场景、面临问题、缓存穿透)

Redis的使用场景 Redis(Remote Dictionary Server)是一个内存数据结构存储系统,它以快速、高效的特性闻名,并且它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。它主要用于以下场景: 缓…

libmodbus编译为64位动态库

通用方法,记录一下,以便后续参考。 Step 1. 下载libmodbus源码 GitHub - stephane/libmodbus: A Modbus library for Linux, Mac OS, FreeBSD and Windows Step 2. 生成配置文件 进入libmodbus-master\src\win32目录,在该目录下打开终端&am…

【火猫TV】DOTA2 BB队员称:队伍非常具有凝聚力

1、近日BB战队队员Nightfall接受采访时表示战队自从去年获得梦幻联赛S20亚军以来,就非常具有凝聚力。 “我认为战队自从去年获得梦幻联赛S20亚军以来,战队就非常具有凝聚力。从那一刻开始,我们这群人不再只是几个选手组建起来的松散组织&…

移动云COCA架构实现算力跃升,探索人工智能新未来

近期,随着OpenAI正式发布首款文生视频模型Sora,标志着人工智能大模型在视频生成领域有了重大飞跃。Sora模型不仅能够生成逼真的视频内容,还能够模拟物理世界中的物体运动与交互,其核心在于其能够处理和生成具有复杂动态与空间关系…

C++的语法

可能需要用到存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等) 下表显示了各种变量类型在内存中存储值时需要占用的内存,以及该类型的变量所能存储的最大值和最小值。 注意:不同系统会有所差异 #inc…

8.发布页面

发布页面 官网 https://vkuviewdoc.fsq.pub/components/form.html 复制官网中的内容 代码 write.vue <template><view class"u-wrap u-p-l-20 u-p-r-20"><u-form :model"addModel" ref"form1"><u-form-item label&quo…

出彩不停息!创维汽车SKYHOME又获国际大奖

祝贺&#xff01;创维汽车SKYHOME又获国际缪斯设计大奖&#xff01;进一步获得国际认可&#xff01; 卓越的意识、优秀的审美、无与伦比的专注&#xff0c;不仅是缪斯奖所看重的独特品质&#xff0c;也是SKYHOME设计团队在传递品牌故事中所秉持的优秀品格。作为缪斯奖青睐的设计…

干货分享 | 外贸搞钱必备!

一、谷歌搜索&#xff1a; 开发客户的神器&#xff0c;需结合搜索指令&#xff0c;常见的12大搜索指令如下&#xff1a; 1. 指令运用&#xff1a;email 说明&#xff1a;指定搜索内容&#xff0c;缩小范围&#xff0c;显示带有email的搜索结果 2.- 指令运用&#xff1a;-B2C 说…

【G. One-Dimensional Puzzle (组合数学+逆元)

解析&#xff1a; 本体是进行分类讨论这么才使全部的拼图用完&#xff0c;且可以合成多个种类。 列举其所有可以拼成的方法个数&#xff1a; 第一种&#xff1a;3 3 3 3 第二种&#xff1a; 4 4 4 4 第三种&#xff1a;1 2 1 2 第四种&#xff1a;1 3 3 2 第五种&…

新品上线 | NoV病毒抗原抗体系列,助力疫苗相关研究!

背景介绍 诺如病毒&#xff08;norovirus&#xff0c;NoV&#xff09;&#xff0c;又名诺瓦克病毒&#xff08;norwalk viruses&#xff0c;NV&#xff09;&#xff0c;是一种单链正义RNA病毒&#xff0c;引发急性胃肠炎&#xff08;AGE&#xff09;的主要原因之一。病症常伴随…

Java安全 反序列化(1) URLDNS链原理分析

Java安全 反序列化(1) URLDNS链原理分析 文章目录 Java安全 反序列化(1) URLDNS链原理分析前置知识应用分析payload1.新建HashMap类2.新建URL类3.获取URL 的 Class对象4.通过反射访问URL内部变量5.通过反射为URL中类赋值6.调用HashMap#put方法传入key和value7.再次通过反射为UR…

自己录的视频怎么配上字幕?推荐几种方法

自己录的视频怎么配上字幕&#xff1f;在数字化时代&#xff0c;视频已经成为人们获取信息、娱乐消遣的重要形式。而对于许多内容创作者来说&#xff0c;为自己的视频添加字幕不仅能提升观众的观看体验&#xff0c;还能增加视频的专业度和吸引力。那么&#xff0c;如何为自己的…

如何在Linux系统下创建共享文件?

首先共享文件一定不能在各用户的家目录下创建&#xff0c;因为各用户家目录通常都只对自己开放&#xff0c;其他用户没有权限进入目录&#xff0c;读写其中的文件。 因此&#xff0c;共享文件必须在非用户目录下创建&#xff0c;且需要将other的权限全部放开。例如&#xff0c;…

Springboot整合支付宝沙箱支付

2.配置说明 要记住这几个重要的配置 appId 这个是appIdprivateKey 商户私钥publicKey 支付宝公钥, 即对应APPID下的支付宝公钥notifyUrl 支付成功后异步回调地址(注意是必须是公网地址)returnUrl #支付后回调地址signType 签名类型 一般写 RSA2charset utf-8format json #网关…

PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包

近年来&#xff0c;电商行业的迅猛发展&#xff0c;越来越多的商户开始寻求搭建自己的在线商城。然而&#xff0c;传统的商城系统往往功能单一&#xff0c;无法满足商户个性化、多样化的需求。同时&#xff0c;搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…

数字人解决方案— SadTalker语音驱动图像生成视频原理与源码部署

简介 随着数字人物概念的兴起和生成技术的不断发展&#xff0c;将照片中的人物与音频输入进行同步变得越来越容易。然而&#xff0c;目前仍存在一些问题&#xff0c;比如头部运动不自然、面部表情扭曲以及图片和视频中人物面部的差异等。为了解决这些问题&#xff0c;来自西安…