SQL中EXISTS怎么用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中EXISTS怎么用相关的知识,希望对你有一定的参考价值。

可否举个简单的例子说明一下

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 exits

exists(sql 返回结果集为真)

not exists(sql 不返回结果集为真)

如果not exists子查询只有自己本身的查询条件,这样只要子查询中有数据返回,就证明是false,结果在整体执行就无返回值;一旦跟外面的查询关联上,就能准确查出数据。

参考资料:百度百科-Exists

参考技术A

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 exits

exists(sql 返回结果集为真)

not exists(sql 不返回结果集为真)

如果not exists子查询只有自己本身的查询条件,这样只要子查询中有数据返回,就证明是false,结果在整体执行就无返回值;一旦跟外面的查询关联上,就能准确查出数据。

参考技术B

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

参考技术C

exists的用法如下:

1、判断数据库是否存在

if exists (select*fromsysdatabaseswherename= '数据库名')

dropdatabase[数据库名]

2、判断表是否存在

if not exists (select * from sysobjects where [name] = '表名' and xtype='U')

begin

--这里创建表

end

3、判断存储过程是否存在

if exists (select*fromsysobjectswhereid = object_id(N'[存储过程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)

dropprocedure[存储过程名]

4、判断视图是否存在

(1)SQL Server 2000

IF EXISTS (SELECT*FROMsysviewsWHEREobject_id = '[dbo].[视图名]'

(2)SQL Server 2005

IF 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 1<>1

法二:select top 0 * into b from a

2、拷贝表(拷贝数据,源表名: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语句大全

参考技术D EXISTS 是判断是否存在,和in类似,但效率要比in高

SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB')

SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB')

这两句效果一样本回答被提问者和网友采纳

sql中in和exists的使用情况

in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

    in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。

  not in 和not exists

    如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。


以上是关于SQL中EXISTS怎么用的主要内容,如果未能解决你的问题,请参考以下文章

用phpmyadmin中导入sql格式的数据库,但是却出现#1050 - Table 'ljcms_admin' already exists,怎么回事?

SQL语句中exists/not exists的用法分析

sql 中exists 在where中怎样用?

SQL中IN和EXISTS用法的区别

Sql中EXISTS与IN的使用及效率

MySQL EXISTS 怎么用呢?