连笔字网 > 知识库

exist,SQL中EXISTS怎么用

来源:连笔字网 2023-12-06 02:21:20 作者:连笔君

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,结果在整体执行就无返回值;一旦跟外面的查询关联上,就能准确查出数据。

sql中in和exist语句的区别?

当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用。in 和 exists的区别如下:

1、运用情况不同

sql中in适用于子查询得出的结果集记录较少,主查询中的表较大且又有索引的表,。sql中exist适用于外层的主查询记录较少,子查询中的表大,又有索引的时候。

2、驱动顺序不同

IN是先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。exists是以外层表为驱动表,先被访问。

3、对NULL值处理不同。

IN不对NULL进行处理,exists会对NULL值进行处理。

4、底层原理不同

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

参考资料:

百度百科-SQL数据库

sql 中exists 在where中怎样用?

比如在Northwind数据库中有一个查询为

SELECT c.CustomerId,CompanyName FROM Customers c
WHERE EXISTS(
SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID)

这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢?

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。

EXISTS 指定一个子查询,检测行的存在。

语法: EXISTS subquery
参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。
结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。

NOT EXISTS 的作用与 EXISTS 正好相反。如果子查询没有返回行,则满足了 NOT EXISTS 中的 WHERE 子句。

结论:

EXISTS(包括 NOT EXISTS )子句的返回值是一个BOOL值。 EXISTS内部有一个子查询语句(SELECT ... FROM...), 我将其称为EXIST的内查询语句。其内查询语句返回一个结果集。 EXISTS子句根据其内查询语句的结果集空或者非空,返回一个布尔值。

一种通俗的可以理解为:将外查询表的每一行,代入内查询作为检验,如果内查询返回的结果取非空值,则EXISTS子句返回TRUE,这一行行可作为外查询的结果行,否则不能作为结果。

分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字找到表名并把表装入内存。接着是找WHERE关键字,如果找不到则返回到SELECT找字段解析,如果找到WHERE,则分析其中的条件,完成后再回到SELECT分析字段。最后形成一张我们要的虚表。

WHERE关键字后面的是条件表达式。条件表达式计算完成后,会有一个返回值,即非0或0,非0即为真(true),0即为假(false)。同理WHERE后面的条件也有一个返回值,真或假,来确定接下来执不执行SELECT。

分析器先找到关键字SELECT,然后跳到FROM关键字将STUDENT表导入内存,并通过指针找到第一条记录,接着找到WHERE关键字计算它的条件表达式,如果为真那么把这条记录装到一个虚表当中,指针再指向下一条记录。如果为假那么指针直接指向下一条记录,而不进行其它操作。一直检索完整个表,并把检索出来的虚拟表返回给用户。EXISTS是条件表达式的一部分,它也有一个返回值(true或false)。

在插入记录前,需要检查这条记录是否已经存在,只有当记录不存在时才执行插入操作,可以通过使用 EXISTS 条件句防止插入重复记录。

INSERT INTO TableIn (ANAME,ASEX)
SELECT top 1 '张三', '男' FROM TableIn
WHERE not exists (select * from TableIn where TableIn.AID = 7)

EXISTS与IN的使用效率的问题,通常情况下采用exists要比in效率高,因为IN不走索引,但要看实际情况具体使用:

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。

sql语句中exists的用法

SELECT b.*, a.time FROM a LEFT JOIN (SELECT * FROM b) ON a.id = b.from_id

sql语句中exists什么意思,怎么用

exists 存在判断谓词。
子查询和外部查询条件有连接条件,并非恒定返回true,你把连接条件省略掉了,如果去掉那个where条件就是你说的那个推导了。
老兄被那种简单的exists使用误导了,建议重新去看下exists谓词的定义和几种常见使用方法,有些exists查询可以用in谓词实现,而某些sql不支持的关系表达式必须用存在谓词作推导的,如果理解不清就头痛了.

SQL 中EXISTS怎么用

SELECT *
FROM A
WHERE 1 = 1
AND EXISTS (SELECT 1
FROM B
WHERE A.C = B.C)

关于sql语句中exists的作用

答案很简单,你这样想如果是
d|4|34

这条数据,你在查询select * from tab1 where id <3时会不会有结果,回答是肯定的。也就是说无论你想查什么,因为select * from tab1 where id <3是条独立的查询,所以无论那条记录都能满足他,就像你问了where 1=1一样,永远成立的。
应该这么写
select * from tab1 a where exists(select * from tab1 b where a.id=b.id and b.id <3);
这样,你的条件就和原来的表有关系了,就不是恒等式了

sql中exists是什么意思,怎么讲解?

Exists 方法 描述如果在 Dictionary 对象中指定的关键字存在,返回 True,若不存在,返回 False。
举个例子吧:
select * from a where exists(select * from b where a.id = b.id);
a表和b表使用id关联,这条语句的含义是,当b表能够查询出结果时,exists(select * from b where a.id = b.id)子句为真,只有满足exists结果为真时,才会查询出a表的记录。这样解释你明白了吗。

sql查询语句中EXISTS怎么使用

简单点说
if EXISTS(select* from tb where name='abc') 就是这样用
上面这句话的意思是 查询表tb 找name='abc'的列
如果有找到 exists返回真 否则 返回假
加上if语句 还可以取反操作 if not exists

sql exists怎么使用

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')

这两句效果一样

IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME='#temp')
begin

end

上一篇:excel保留一位小数,excel保留一位小数点的的方法

下一篇:没有了

相关阅读