MySQL exists 和in 详解及区别
发布时间 - 2026-01-10 22:32:27 点击率:次MySQL exists 和in 详解及区别

有一个查询如下:
SELECT c.CustomerId, CompanyName FROM Customers c WHERE EXISTS( SELECT OrderID FROM Orders o WHERE o.CustomerID = cu.CustomerID)
这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢?
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。
EXISTS 指定一个子查询,检测行的存在。语法:EXISTS subquery。参数 subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。结果类型为 Boolean,如果子查询包含行,则返回 TRUE。
在子查询中使用 NULL 仍然返回结果集
这个例子在子查询中指定 NULL,并返回结果集,通过使用 EXISTS 仍取值为 TRUE。
SELECT CategoryName FROM Categories WHERE EXISTS (SELECT NULL) ORDER BY CategoryName ASC
比较使用 EXISTS 和 IN 的查询
这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。
SELECT DISTINCT pub_name FROM publishers WHERE EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business')
比较使用 EXISTS 和 = ANY 的查询
本示例显示查找与出版商住在同一城市中的作者的两种查询方法:第一种方法使用 = ANY,第二种方法使用 EXISTS。注意这两种方法返回相同的信息。
SELECT au_lname, au_fname FROM authors WHERE exists (SELECT * FROM publishers WHERE authors.city = publishers.city)
比较使用 EXISTS 和 IN 的查询
本示例所示查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:
SELECT title FROM titles WHERE EXISTS (SELECT * FROM publishers WHERE pub_id = titles.pub_id AND city LIKE 'B%')
使用 NOT EXISTS
NOT EXISTS 的作用与 EXISTS 正相反。如果子查询没有返回行,则满足 NOT EXISTS 中的 WHERE 子句。本示例查找不出版商业书籍的出版商的名称:
SELECT pub_name FROM publishers WHERE NOT EXISTS (SELECT * FROM titles WHERE pub_id = publishers.pub_id AND type = 'business') ORDER BY pub_name
又比如以下 SQL 语句:
select distinct 姓名 from xs where not exists ( select * from kc where not exists ( select * from xs_kc where 学号=xs.学号 and 课程号=kc.课程号 )
把最外层的查询xs里的数据一行一行的做里层的子查询。
中间的 exists 语句只做出对上一层的返回 true 或 false,因为查询的条件都在 where 学号=xs.学号 and 课程号=kc.课程号这句话里。每一个 exists 都会有一行值。它只是告诉一层,最外层的查询条件在这里成立或都不成立,返回的时候值也一样回返回上去。直到最高层的时候如果是 true(真)就返回到结果集。为 false(假)丢弃。
where not exists select * from xs_kc where 学号=xs.学号 and 课程号=kc.课程号
这个 exists 就是告诉上一层,这一行语句在我这里不成立。因为他不是最高层,所以还要继续向上返回。
select distinct 姓名 from xs where not exists (这里的 exists 语句收到上一个为 false 的值。他在判断一下,结果就是为 true(成立),由于是最高层所以就会把这行的结果(这里指的是查询条件)返回到结果集。
几个重要的点:
- 最里层要用到的醒询条件的表比如:xs.学号、kc.课程号等都要在前面的时候说明一下select * from kc,select distinct 姓名 from xs
- 不要在太注意中间的exists语句.
- 把exists和not exists嵌套时的返回值弄明白
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# MySQL
# exists
# in
# 使用详解
# 区别
# MySQL关键字IN与EXISTS的使用与区别详解
# MySQL中in和exists区别详解
# mysql中EXISTS和IN的使用方法比较
# MySQL中exists、in及any的基本用法
# MySQL中in与exists的使用及区别介绍
# 对比分析MySQL语句中的IN 和Exists
# mySQL中in查询与exists查询的区别小结
# MySQL中EXISTS与IN用法使用与对比分析
# 的是
# 子句
# 种方法
# 上一层
# 返回值
# 是一个
# 这是
# 几个
# 在这里
# 在我
# 最外层
# 都不
# 里层
# 都在
# 第一个
# 都要
# 他在
# 两种
# 这句话
# 这两个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel如何使用Telescope进行调试?(安装和使用教程)
如何快速搭建高效可靠的建站解决方案?
如何快速启动建站代理加盟业务?
在Oracle关闭情况下如何修改spfile的参数
,怎么在广州志愿者网站注册?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何在腾讯云服务器上快速搭建个人网站?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
Laravel如何实现一对一模型关联?(Eloquent示例)
如何快速生成橙子建站落地页链接?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何用好域名打造高点击率的自主建站?
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
北京专业网站制作设计师招聘,北京白云观官方网站?
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
jQuery validate插件功能与用法详解
如何用PHP快速搭建高效网站?分步指南
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
详解vue.js组件化开发实践
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
Laravel如何清理系统缓存命令_Laravel清除路由配置及视图缓存的方法【总结】
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何快速建站并高效导出源代码?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
详解jQuery中的事件
如何在IIS中新建站点并解决端口绑定冲突?
Linux网络带宽限制_tc配置实践解析【教程】
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
jQuery 常见小例汇总
如何利用DOS批处理实现定时关机操作详解
如何正确下载安装西数主机建站助手?
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
制作公司内部网站有哪些,内网如何建网站?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
手机软键盘弹出时影响布局的解决方法
Laravel怎么实现模型属性的自动加密
python中快速进行多个字符替换的方法小结
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】

