【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

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

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

相关文章

手势追踪技术在HTC VIVE中的应用与实现

在虚拟现实(VR)的世界中,手势追踪技术正变得日益重要。它不仅能提升用户的交互体验,使其更加直观和自然,还能在各种应用场景中开辟新的可能性,从游戏和娱乐到专业的培训和设计。作为VR领域的先行者,HTC VIVE提供了一套…

Android弹出通知

发现把Android通知渠道的重要性设置为最高时,当发送通知时,通知能直接弹出来显示,以前一直搞不明白为什么别的app的通知可以弹出来,我的不行,搞了半天原来是这个属性在作怪,示例如下: class Ma…

Java毕业设计 基于springboot vue招聘网站 招聘系统

Java毕业设计 基于springboot vue招聘网站 招聘系统 springboot vue招聘网站 招聘系统 功能介绍 用户:登录 个人信息 简历信息 查看招聘信息 企业:登录 企业信息管理 发布招聘信息 职位招聘信息管理 简历信息管理 管理员:注册 登录 管理员…

后端工程师快速使用axios

文章目录 01.AJAX 概念和 axios 使用模板目标讲解代码解析案例前端后端结果截图 02.URL 查询参数模板目标讲解案例前端后端结果截图 03.常用请求方法和数据提交模板目标讲解案例前端后端结果截图 04.axios 错误处理模板目标讲解案例前端后端结果截图 01.AJAX 概念和 axios 使用…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItem)

用来展示列表具体item,必须配合List来使用。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List或者ListItemGroup。 子组件 可以包含单个子组件。 接口 从API…

ASP.NET Core 8.0 WebApi 从零开始学习JWT登录认证

文章目录 前言相关链接Nuget选择知识补充JWT不是加密算法可逆加密和不可逆加密 普通Jwt(不推荐)项目环境Nuget 最小JWT测试在WebApi中简单使用简单使用运行结果 WebApi 授权,博客太老了,尝试失败 WebApi .net core 8.0 最新版Jwt …

XML和JSON的区别

1、JSON是一种轻量级的数据交换格式 XML是可扩展标记语言。 2、JSON是基于JavaScript语言 XML源自SGML。 3、JSON是一种表示对象的方式 XML是一种标记语言 使用标记结构来表示数据项。 4、JSON不提供对命名空间的任何支持 XML支持名称空间。 5、JSON支持数组 XML不支…

flinksql在实时数仓hologres的计算问题排查

要排查 Flink 实时计算从 Hologres 源表到目标表的错误,可以采取以下步骤: 检查 Flink 程序逻辑: 确保 Flink 程序中源表到目标表的数据转换逻辑正确。检查是否正确地连接了源表和目标表,并且字段映射正确。检查 Hologres 连接: 确保 Flink 程序正确地连接到 Hologres 数据…

笔记本插入耳机没有声音

笔记本插入耳机没有声音,有可能是因为音频设置问题 打开声音小喇叭,选择耳机频道就好了

【Qt图形界面引擎(一)】:第一个Qt程序

跨平台图形界面引擎,接口简单,易上手,一定程度简化内存。 Qt发展史 1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具2012…

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

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

vue3 使用video-player 监听事件获取当前播放时间(全网首发)

1.main.ts 安装 npm i vue3-video-play --save import VueVideoPlayer from videojs-player/vue import video.js/dist/video-js.cssapp.use(VueVideoPlayer) 2.复制代码直接使用 <script setup lang"ts"> import {ref} from "vue"; import {con…

【软件工程】一份完整的软件工程实践论文格式

一份完整的软件工程实践论文格式 记录一下&#xff0c;以备不时之需&#xff01; 目 录 第1章 绪 论 1.1 课题背景 1.2 课题意义 1.3 国内外现状 2 第2章 系统关键技术 4 2.1 开发技术 4 2.2 MVVM模式 4 2.3 MySQL数据库 4 2.4 B/S结构 5 2.5 框架介绍 5 2.6 Vue.js主要功能 6…

sentinel熔断降级

熔断降级 Slot 责任链上的最后一环&#xff1a;熔断降级 DegradeSlot,熔断降级作为保护系统的一种强大手段,可以根据慢调用、异常比例和异常数进行熔断,并自定义持续时间以实现系统保护 规则配置 规则类中属性解析 与控制面板对应 // 其中资源名称在 AbstractRule 里。 pu…

LiveGBS流媒体平台GB/T28181功能-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播

LiveGBS支持-大屏播放上大屏支持轮巡播放分屏轮巡值守播放监控视频轮播大屏轮询播放轮播 1、轮播功能2、分屏展示3、选择轮播通道4、配置轮播间隔(秒)5、点击开始轮播6、轮播停止及全屏7、搭建GB28181视频直播平台 1、轮播功能 视频监控项目使用过程中&#xff0c;有时需要大屏…

聊聊Go程序是如何运行的

写在文章开头 Go语言是一门编译语言&#xff0c;其工作过程即直接通过编译生成各大操作系统的机器码即可直接执行&#xff0c;所以这篇文章笔者就从底层汇编码的角度聊一聊Go语言是如何运行的。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java c…

IntelliJ IDEA 设置运行时环境变量

背景 博主要测试langchain4j&#xff0c;运行时需要OPENAI_BASE_URL和OPENAI_API_KEY这两个环境变量的值。 临时设置 Run -> Edit Configurations -> Edit Environmental Variables 永久设置 在系统环境变量中设置&#xff0c;教程无数。 注意&#xff1a;windows在…

考研机试题

目录 头文件与STL动态规划最大数组子串和最长公共子序列最长连续公共子串最长递增子序列最大上升子序列和0-1背包多重背包多重背包问题 I整数拆分最小邮票最大子矩阵 数学问题朴素法筛素数线性筛素数快速幂 石子合并锯木棍并查集Dijkstra单源最短路Python进制转换(整数无限大)全…

MATLAB教程

目录 前言一、MATLAB基本操作1.1 界面简介1.2 搜索路径1.3 交互式命令操作1.4 帮助系统 二、MATLAB语言基础2.1 数据类型2.2 MATLAB运算2.2.1 算数运算2.2.2 关系运算2.2.3 逻辑运算 2.3 常用内部函数2.4 结构数据与单元数据 三、MATLAB程序设计3.1 M文件3.2 函数文件3.3 程序控…

c#接口 axios的get请求url过长时该怎么做

今天又碰到了&#xff0c;大托参数拼在url里用get传 1、改服务器最大字数限制&#xff08;还是会错&#xff09; 2、改post&#xff08;有些还要跟着把[FromUri]改成[FromBody]&#xff09;