SQL中EXISTS怎么用

[复制链接]
查看11 | 回复7 | 2018-12-23 23:14:13 | 显示全部楼层 |阅读模式
EXISTS在SQL中的作用是:检验查询是否返回数据。select a.* from tb a where exists(select 1 from tb where name =a.name)返回真假,当 where 后面的条件成立,则列出数据,否则为空。exists强调的是是否返回结果集,不要求知道返回什么。比如:select name from student where sex = 'm' and mark exists(select 1 from grade where ...)只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1如果改成“select 2 from grade where ...”,那么返回的字段就是2,这个数字没有意义。所以exists子句不在乎返回什么,而是在乎是不是有结果集返回。

扩展资料:Exists 方法描述如果在 Dictionary对象中指定的关键字存在,返回True,若不存在,返回False。语法object.Exists(key)Exists 方法语法有如下几部分:部分描述Object必需的。始终是一个 Dictionary对象的名字。Key必需的,在 Dictionary对象中搜索的Key值。exist相当于存在量词:表示集合存在,也就是集合不为空只作用一个集合.例如 exist P表示P不空时为真; not exist P表示p为空时为真in表示一个标量和一元关系的关系。例如:s in P表示当s与P中的某个值相等时为真; s not in P 表示s与P中的每一个值都不相等时为真。exits与not exitsexists(sql 返回结果集为真)not exists(sql 不返回结果集为真)如果not exists子查询只有自己本身的查询条件,这样只要子查询中有数据返回,就证明是false,结果在整体执行就无返回值;一旦跟外面的查询关联上,就能准确查出数据。参考资料:百度百科-Exists
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
exists的用法如下:1、判断数据库是否存在if exists (select*fromsysdatabaseswherename= '数据库名')dropdatabase[数据库名]2、判断表是否存在if not exists (select * from sysobjects where [name] = '表名' and xtype='U')begin--这里创建表end3、判断存储过程是否存在if exists (select*fromsysobjectswhereid = object_id(N'[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)dropprocedure[存储过程名]4、判断视图是否存在(1)SQL Server 2000IF EXISTS (SELECT*FROMsysviewsWHEREobject_id = '[dbo].[视图名]'(2)SQL Server 2005IF EXISTS (SELECT*FROMsys.viewsWHEREobject_id = '[dbo].[视图名]'5、判断函数是否存在if exists (select*fromdbo.sysobjectswhereid = object_id(N'[dbo].[函数名]') and xtype in (N'FN', N'IF', N'TF'))dropfunction[dbo].[函数名]

扩展资料SQL的提升1、复制表(只复制结构,源表名:a 新表名:b) (Access可用)法一:select * into b from a where 11法二:select top 0 * into b from a2、拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)insert into b(x, y, z) select d,e,f from a;3、跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)insert into b(x, y, z) select d,e,f from a in ‘具体数据库’ where 条件例子:。.from b in '"&Server.MapPath("."&"\data.mdb" &"' where..4、子查询(表名1:a 表名2:b)select a,b,c from a where a IN (select d from b 或者: select a,b,c from a where a IN (1,2,3)5、显示文章最后时间select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b参考资料:百度百科——SQL语句大全
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
EXISTS在SQL中的作用是:检验查询是否返回数据。Exists 方法 描述如果在 Dictionary 对象中指定的关键字存在,返回 True,若不存在,返回 False。语法object.Exists(key)Exists 方法语法有如下几部分:部分描述Object必需的。始终是一个 Dictionary 对象的名字。Key必需的。在 Dictionary 对象中搜索的 Key 值。例如:EXISTS 指定一个子查询,检测 行 的存在。语法: EXISTS subquery参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。

可参考以下用法:1、 在子查询中使用 NULL 仍然返回结果集select * from TableIn where exists(select null)等同于: select * from TableIn

2、 比较使用 EXISTS 和 IN 的查询。注意两个查询返回相同的结果。select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)select * from TableIn where ANAME in(select BNAME from TableEx)

3、比较使用 EXISTS 和 = ANY 的查询。注意两个查询返回相同的结果。select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)select * from TableIn where ANAME=ANY(select BNAME from TableEx)

扩展资料:EXISTS与IN的区别:对于IN和EXISTS的性能区别如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应用in,反之如果外界的主查询较少,子查询中的表大,又有索引时使用EXISTS。其实我们区分IN和EXISTS主要是造成了驱动顺序的改变(这是性能的关键),如果是EXISTS,那么以外的外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引到索引及结果集的关系了。另外IN是不对NULL进行处理。IN:确定给定的值是否与子查询或列表中的值相匹配。EXISTS:指定一个子查询,检测行的存在。参考资料:百度百科-Exists
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
EXISTS 运算符EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。具体语法参考:

-from 树懒学堂实例我们想要查找“总访问量”(count 字段)大于 200 的网站是否存在。我们使用下面的 SQL 语句:

EXISTS 可以与 NOT 一同使用,查找出不符合查询语句的记录:

回答不易,望楼主采纳~
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
我的B站:https://space.bilibili.com/410670572资料视频:https://baijiahao.baidu.com/u?app_id=1616309264508817QQ群:1097414647有任何问题,可以在B站或者百家号留言联系我。微信公众号:学习编程笔记
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
insert into b select * from axx where not exists(select * from b where index=xx.index);可以用于 两个结构完全相同的表a和b,主键为index,使用SQL语句,把a表中存在但在b表中不存在的数据插入的b表中
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
EXISTS 是判断是否存在,和in类似,但效率要比in高SELECT * FROMEMP (基础表)WHEREEMPNO > 0ANDEXISTS (SELECT ‘X'FROM DEPTWHEREDEPT.DEPTNO = EMP.DEPTNOANDLOC = ‘MELB')SELECT* FROMEMP (基础表)WHEREEMPNO > 0ANDDEPTNO IN(SELECT DEPTNOFROMDEPTWHERELOC = ‘MELB')这两句效果一样
回复

使用道具 举报

千问 | 2018-12-23 23:14:13 | 显示全部楼层
update price_list tset t.foreigner_price =(selecta.price_new from alter_operation_price a where t.item_name=a.item_name and t.units=a.units)where exists (select 1 from alter_operation_price a where t.item_name = a.item_name
and t.units = a.units)这的使用方法你可以咨询他的客服,或者是找一些用过的人教你怎么用?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行