首页 > 数据库 >sql语句中exists用法详解

sql语句中exists用法详解

时间:2023-08-22 20:34:00浏览次数:54  
标签:insert exists 查询 详解 sql id select

文章目录
一、语法说明
exists:
not exists:
二、常用示例说明
1.查询a表在b表中存在数据
2.查询a表在b表中不存在数据
3.查询时间最新记录
4.exists替代distinct剔除重复数据
总结
一、语法说明
exists:
括号内子查询sql语句返回结果不为空(即:sql返回的结果为真),子查询的结果不为空这条件成立,执行主sql,否则不执行。

not exists:
与exists相反,括号内子查询sql语句返回结果为空(即:sql不返回的结果为真),子查询的结果为空则条件成立,执行主slq,否则不执行。
总结:exists 和not exists语句强调是否返回结果集,不要求知道返回什么,与in的区别就是,in只能返回一个字段值,exists允许返回多个字段。

二、常用示例说明
创建示例数据,如下代码a表和b表为一对多关系。以下sql使用改示例数据。

create table a(
id int,
name varchar(10)
);
insert into a values(1,'data1');
insert into a values(2,'data2');
insert into a values(3,'data3');

create table b(
id int,
a_id int,
name varchar(10)
);
insert into b values(1,1,'info1');
insert into b values(2,2,'info2');
insert into b values(3,2,'info3');

create table c(
id int,
name varchar(10),
c_date TIMESTAMP
);
insert into c values(1,'c1','2023-02-21 17:01:00');
insert into c values(2,'c2','2023-02-21 17:02:00');
insert into c values(2,'c3','2023-02-21 17:03:00');

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
1.查询a表在b表中存在数据
相当于sql中in操作。

select * from a where exists (select 1 from b where a_id=a.id )
1
以上sql等价于下面的sql

select * from a where id in (select a_id from b)
1
2.查询a表在b表中不存在数据
相当于sql中not in操作。

select * from a where not exists (select 1 from b where a_id=a.id )
1
以上sql等价于下面的sql

select * from a where id not in (select a_id from b)
1
3.查询时间最新记录
以下sql查询同一id内的c_date最近的记录。

SELECT * FROM c t1
WHERE NOT EXISTS(select * from c where id = t1.id and c_date>t1.c_date)
1
2
分析:子查询中,先看id = 1 的情形,只有当t1.c_date 取最大值时,没有返回结果,因为是NOT EXISTS关键字,所以Where条件成立,返回符合条件的查询结果

4.exists替代distinct剔除重复数据
例如下面sql

SELECT distinct a.id,a.name from a, b WHERE a.id=b.a_id;
1
使用exists提出重复,等价于上面的sql

select id,name from a where exists (select 1 from b where a_id=a.id );
1
分析:RDBMS 核心模块将在子查询的条件一旦满足后,立即返回结果,所以自带去重
————————————————
版权声明:本文为CSDN博主「小马穿云」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ma286388309/article/details/129279863

标签:insert,exists,查询,详解,sql,id,select
From: https://www.cnblogs.com/kissy/p/17649623.html

相关文章

  • Apipost数据模型功能详解
    在API设计和开发过程中,存在许多瓶颈,其中一个主要问题是在遇到相似数据结构的API时会产生重复性较多的工作:在每个API中都编写相同的数据,这不仅浪费时间和精力,还容易出错并降低API的可维护性。为了解决这个问题,Apipost推出了数据模型板块。用户可以预先创建多个数据模型,并在API设计过......
  • mysql-给用户添加表权限
    指定用户的表权限grantselect,insert,update,delete,indexonmqdt_sjzl_dev.t_bz_jdsf_question_reformtoshujugu@'%';给mysql用户分配制度库的查询权限GRANTselectONmqdt_sjzl_longtu_dev.*TOshujugu@'%';grantselect,insert,update,delete,indexonmqdt_sjzl_d......
  • mysql单库并发优化
    是否在使用Mysql时有以下疑问:1、限制连接数时CPU占用量不大吞吐量也不高!2、增大连接数后吞吐量提升不大却容易导致Mysql服务器卡死!3、横向增加Mysql服务器时感觉并发能力提升也有限!4、...以下仅以mysql的innodb引擎说明,独享数据库服务器为例。吞吐量瓶颈mysql的吞吐量主要受:磁盘读......
  • SAP Fiori Tools Page Map 的实现详解和故障排除试读版
    本教程前面的文章,笔者介绍了使用SAPFioriTools这个工具里包含的ApplicationModeler提供的PageMap功能,来给FioriElementsListReport应用添加自定义列的详细步骤。10.如何通过扩展(Extension)的方式给SAPFioriElementsListReport的表格新增列我们在Visua......
  • 在Docker上安装部署SQL Server2019 Express
    在Docker上安装部署SQLServer2019Express_docker安装sqlserver2019_梦想天空分外蓝的博客-CSDN博客  梦想天空分外蓝_-CSDN博客......
  • SQL注入基础学习4
    14、第14关测试注入点,查找闭合方式,闭合方式为"查找数据库admin"and1=updatexml(1,concat(0x7e,(selectdatabase())),3)#/*结果如下*/XPATHsyntaxerror:'~security'查找数据库中的表admin"and1=updatexml(1,concat(0x7e,(selectgroup_concat(table_name)f......
  • python · SQL | MySQL 配置与 python 连接数据库
    来存档一下搞sql的过程,方便以后查阅。安装与配置mysqlserver:https://blog.csdn.net/zhende_lan/article/details/129318514在同一个网页下载mysqlworkbench(数据库可视化);打开workbench,新建一些表,用来测试:https://zhuanlan.zhihu.com/p/260139380python连接sql的代......
  • SQL Server 还原文件文件组
    SQLServer还原文件文件组实现数据间的快速同步如果prod的数据库较新,TE的较旧,现在需要快速同步整个数据库......
  • Java Web中出现的一些乱码问题总结(详解)
    三、JavaWeb中出现的一些乱码问题总结(详解) 一、response.getWriter().write()和response.getWriter().print()的区别response.getWriter()返回的是PrintWriter,这是一个打印输出流response.getWriter().write()和response.getWriter().print()是响应给客户端的东西,如果不用......
  • 读取转换规则中的单据类型映射(处理SQLSERVER的XML字段)
    DataSetdsBillTypeMap=null;stringsql=string.Format(@"/*dialect*/SELECTFKERNELXML.query('//BillTypeMaps')BillTypeMaps,FID......