SQL----EXISTS 关键字

匿名 (未验证) 提交于 2019-12-02 23:55:01

转自:http://blog.sina.com.cn/s/blog_65dbc6df0100mvfx.html

1.EXISTS基本意思

'З'。他不返回数据的,当后带带的查询为空值是,返回“FALSE”,非空则返回“TRUE”。



EXISTS属于相关子查询,也就是说子查询的条件依赖于外层父查询的查个属性值。比如:
select Sname
from Student
where exists (



所说的依赖也就是这一句

可与
select Sname
from Student
where not esists (




IN、比较运算符、ALL的子查询都能用带有


select Sno,Sname,Sdept
from Student S1
where exists (
select *
from Student S2
where S2.Sdept=S1.Sdept and S2.Sname='A');

在这里,EXISTS只要知道内查询是否为空值就可以了,所以效率要比用IN的查询要高效一些。




SELECT *







这个例子目的是查找数据库三个表中是否存在不对应的记录(各表应存在如下关系SC.Cno= Course.Cno ,sc.Sno= Student.Sno

)

它的功能和in有点类似,这条语句改成用in的方法就是这样,这样就比较容易理解了.

SELECT Sname FROM Student

WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course))

3. exist与in的区别

exists也是很好区别的.

.



这个运算中,前面是一个元素,后面是一个集合,集合中的元素类型是和前面的元素一样的.

exists是一个存在判断,如果后面的查询中有结果,则exists为真,否则为假.

,它后面带的,而不是select *.

"小明"的学生,你可以用:

"小明" in

(select sname from student)

这样(select sname from student)

返回的是一个全班姓名的集合,in用于判断"小明"是否为此集合中的一个数据;

ͬʱ,你也可以用exists语句:

exists

(select * from student where sname="小明")

这两个涵数是差不多的NOT

EXISTS要比NOT EXISTS可以使用结合算法而NOT IN 就不行了,而EXISTS则不如IN快,

因为这时候IN可能更多的使用结合算法.

B

B.id=表A.id)



A where id in (select id

B)

:对于表A的每一条数据,都执行(B where

B.id=表,如果表B中存在表A当前行相同的id,则exists为真,该行显示,否则不显示

exits适合内小外大的查询,in适合内大外小的查询

IN

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





USE

pubs
GO
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')
GO

=============================================================
-- Or, using the IN clause:
USE pubs
GO
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT

pub_id
FROM titles
WHERE type = 'business')
GO


pub_name
----------------------------------------
Algodata

Infosystems
New Moon Books

(2 row(s) affected)

,也就是集合不为空只作用一个集合exist P

表示P不空时为真; not exist P表示in表示一个标量和一元关系的关系。例如:s in P表示当s与P中的某个值相等时为真; s

s与P中的每一个值都不相等时 为真

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!