起名
男孩起名 女孩起名 公司起名 店铺起名 牛年起名 虎年起名 生辰八字起名 英文起名 诗词起名
励志
励志文章 励志故事 励志文案 励志电影 励志名言 励志句子 励志歌曲 励志签名 励志格言 高考励志 励志诗句 励志网名 励志书籍 励志演讲稿 励志小说 励志座右铭 励志人物 励志对联 励志说说 励志作文
句子
伤感的句子 唯美的句子 爱情的句子 优美句子 正能量句子 经典句子 表白的句子 哲理句子 友情的句子 好词好句好段 美好的句子 朋友圈说说的好句子 搞笑的句子 想你的句子
个性签名
微信个性签名 QQ个性签名 伤感个性签名 霸气的个性签名 情侣个性签名 男生个性签名 女生个性签名 英文个性签名 超拽个性签名 非主流个性签名 搞笑个性签名 火星文个性签名 唯美个性签名
十二星座
白羊座 金牛座 双子座 巨蟹座 狮子座 处女座 天秤座 天蝎座 射手座 摩羯座 水瓶座 双鱼座 星座知识
十二生肖
属鼠 属牛 属虎 属兔 属龙 属蛇 属马 属羊 属猴 属鸡 属狗 属猪 生肖基础知识
祝福语大全
生日祝福语 结婚祝福语 订婚祝福语 新年祝福语 情人节祝福语 母亲节祝福语 父亲节祝福语 建党节祝福语 七夕节祝福语 教师节祝福语 国庆节祝福语 中秋节祝福语 爱情祝福语 毕业祝福语 开业祝福语 升学祝福语 高考祝福语 中考祝福语 考试祝福语 搬新家祝福语
说说大全
个性说说 伤感说说 搞笑说说 心情说说 爱情说说 经典说说 qq说说 朋友圈说说 情感说说 晚安说说 下雨说说 霸气说说 七夕说说
范文大全
入党申请书 入团申请书 自我鉴定 工作总结 工作计划 个人简历 辞职报告 检讨书 演讲稿 心得体会 实习报告 转正申请书 导游词 述职报告 策划书 加油稿 慰问信 感谢信 介绍信 邀请函

数据库查询exists的用法优秀2篇

更新时间:2023-01-23 来源:互联网 点击:

数据库查询exists的用法的用法你知道吗?为您精心收集了2篇《数据库查询exists的用法》,希望能够满足亲的需求。

数据库查询exists的用法的用法如下: 篇一

有一个查询如下:

复制代码 代码如下:

SELECT c.CustomerId, CompanyName

FROM Customers c

WHERE EXISTS(

SELECT OrderID FROM Orders o

WHERE o.CustomerID = cu.CustomerID)

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

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

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

在子查询中使用 NULL 仍然返回结果集

这个例子在子查询中指定 NULL,并返回结果集,通过使用 EXISTS 仍取值为 TRUE。

复制代码 代码如下:

SELECT CategoryName

FROM Categories

WHERE EXISTS (SELECT NULL)

ORDER BY CategoryName ASC

比较使用 EXISTS 和 IN 的查询

这个例子比较了两个语义类似的查询。第一个查询使用 EXISTS 而第二个查询使用 IN。注意两个查询返回相同的信息。

复制代码 代码如下:

SELECT DISTINCT pub_name

FROM publishers

WHERE EXISTS

(SELECT *

FROM titles

WHERE pub_id = publishers.pub_id

AND type = 'business')

复制代码 代码如下:

SELECT distinct pub_name

FROM publishers

WHERE pub_id IN

(SELECT pub_id

FROM titles

WHERE type = 'business')

比较使用 EXISTS 和 = ANY 的查询

本示例显示查找与出版商住在同一城市中的作者的两种查询方法:第一种方法使用 = ANY,第二种方法使用 EXISTS。注意这两种方法返回相同的信息。

复制代码 代码如下:

SELECT au_lname, au_fname

FROM authors

WHERE exists

(SELECT *

FROM publishers

WHERE authors.city = publishers.city)

复制代码 代码如下:

SELECT au_lname, au_fname

FROM authors

WHERE city = ANY

(SELECT city

FROM publishers)

比较使用 EXISTS 和 IN 的查询

本示例所示查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:

复制代码 代码如下:

SELECT title

FROM titles

WHERE EXISTS

(SELECT *

FROM publishers

WHERE pub_id = titles.pub_id

AND city LIKE 'B%')

复制代码 代码如下:

SELECT title

FROM titles

WHERE pub_id IN

(SELECT pub_id

FROM publishers

WHERE city LIKE 'B%')

使用 NOT EXISTS

NOT EXISTS 的作用与 EXISTS 正相反。如果子查询没有返回行,则满足 NOT EXISTS 中的 WHERE 子句。本示例查找不出版商业书籍的出版商的名称:

复制代码 代码如下:

SELECT pub_name

FROM publishers

WHERE NOT EXISTS

(SELECT *

FROM titles

WHERE pub_id = publishers.pub_id

AND type = 'business')

ORDER BY pub_name

又比如以下 SQL 语句:

复制代码 代码如下:

select distinct 姓名 from xs

where not exists (

select * from kc

where not exists (

select * from xs_kc

where 学号=xs.学号 and 课程号=kc.课程号

)

把最外层的查询xs里的数据一行一行的做里层的子查询。

中间的 exists 语句只做出对上一层的返回 true 或 false,因为查询的条件都在 where 学号=xs.学号 and 课程号=kc.课程号这句话里。每一个 exists 都会有一行值。它只是告诉一层,最外层的查询条件在这里成立或都不成立,返回的时候值也一样回返回上去。直到最高层的时候如果是 true(真)就返回到结果集。为 false(假)丢弃。

复制代码 代码如下:

where not exists

select * from xs_kc

where 学号=xs.学号 and 课程号=kc.课程号

这个 exists 就是告诉上一层,这一行语句在我这里不成立。因为他不是最高层,所以还要继续向上返回。

select distinct 姓名 from xs where not exists (这里的 exists 语句收到上一个为 false 的值。他在判断一下,结果就是为 true(成立),由于是最高层所以就会把这行的结果(这里指的是查询条件)返回到结果集。

数据库中exists的用法的用法如下: 篇二

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 与 in 最大的区别在于 in引导的子句只能返回一个字段,比如:

select name from student where sex = 'm' and mark in (select 1,2,3 from grade where 。.。)

,in子句返回了三个字段,这是不正确的,exists子句是允许的,但in只允许有一个字段返回,在1,2,3中随便去了两个字段即可。

而not exists 和not in 分别是exists 和 in 的 对立面。

exists (sql 返回结果集为真)

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

下面详细描述not exists的过程:

如下:

表A

ID NAME

1 A1

2 A2

3 A3

表B

ID AID NAME

1 1 B1

2 2 B2

3 2 B3

表A和表B是1对多的关系 A.ID => B.AID

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE A.ID=B.AID)

执行结果为

1 A1

2 A2

原因可以按照如下分析

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=1)

--->SELECT * FROM B WHERE B.AID=1有值返回真所以有数据

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=2)

--->SELECT * FROM B WHERE B.AID=2有值返回真所以有数据

SELECT ID,NAME FROM A WHERE EXISTS (SELECT * FROM B WHERE B.AID=3)

--->SELECT * FROM B WHERE B.AID=3无值返回真所以没有数据

NOT EXISTS 就是反过来

SELECT ID,NAME FROM A WHERE NOT EXIST (SELECT * FROM B WHERE A.ID=B.AID)

执行结果为

3 A3

===========================================================================

EXISTS = IN,意思相同不过语法上有点点区别,好像使用IN效率要差点,应该是不会执行索引的原因

SELECT ID,NAME FROM A  WHERE ID IN (SELECT AID FROM B)

NOT EXISTS = NOT IN ,意思相同不过语法上有点点区别

SELECT ID,NAME FROM A WHERE ID NOT IN (SELECT AID FROM B)

有时候我们会遇到要选出某一列不重复,某一列作为选择条件,其他列正常输出的情况。

如下面的表table:

Id Name Class Count Date

1 苹果 水果 10 2011-7-1

1 桔子 水果 20 2011-7-2

1 香蕉 水果 15 2011-7-3

2 白菜 蔬菜 12 2011-7-1

2 青菜 蔬菜 19 2011-7-2

如果想要得到下面的结果:(Id唯一,Date选最近的一次)

1 香蕉 水果 15 2011-7-3

2 青菜 蔬菜 19 2011-7-2

正确的SQL语句是:

SELECT Id, Name, Class, Count, Date

FROM table t

WHERE (NOT EXISTS

(SELECT Id, Name, Class, Count, Date FROM table

WHERE Id = t.Id AND Date > t.Date))

如果用distinct,得不到这个结果, 因为distinct是作用与所有列的

SELECT DISTINCT Id, Name, Class, Count, Date FROM table

结果是表table的所有不同列都显示出来,如下所示:

1 苹果 水果 10 2011-7-1

1 桔子 水果 20 2011-7-2

1 香蕉 水果 15 2011-7-3

2 白菜 蔬菜 12 2011-7-1

2 青菜 蔬菜 19 2011-7-2

如果用Group by也得不到需要的结果,因为Group by 要和聚合函数共同使用,所以对于Name,Class和Count列要么使用Group by,要么使用聚合函数。 如果写成

SELECT Id, Name, Class, Count, MAX(Date)

FROM table

GROUP BY Id, Name, Class, Count

得到的结果是

1 苹果 水果 10 2011-7-1

1 桔子 水果 20 2011-7-2

1 香蕉 水果 15 2011-7-3

2 白菜 蔬菜 12 2011-7-1

2 青菜 蔬菜 19 2011-7-2

如果写成

SELECT Id, MAX(Name), MAX(Class), MAX(Count), MAX(Date)

FROM table

GROUP BY Id

得到的结果是:

1 香蕉 水果 20 2011-7-3

2 青菜 蔬菜 19 2011-7-2

如果用in有时候也得不到结果,(有的时候可以得到,如果Date都不相同(没有重复数据),或者是下面得到的Max(Date)只有一个值)

SELECT DISTINCT Id, Name, Class, Count, Date FROM table

WHERE (Date IN

(SELECT MAX(Date)

FROM table

GROUP BY Id))

得到的结果是:(因为MAX(Date)有两个值2011-7-2,2011-7-3)

1 桔子 水果 20 2011-7-2

1 香蕉 水果 15 2011-7-3

2 青菜 蔬菜 19 2011-7-2

注意in只允许有一个字段返回

有一种方法可以实现:

SELECT Id, Name, Class, COUNT, Date

FROM table1 t

WHERE (Date =

(SELECT MAX(Date)

FROM table1

WHERE Id = t 。Id))

读书破万卷下笔如有神,以上就是为大家整理的2篇《数据库查询exists的用法》,希望对您的写作有所帮助。

上一篇:中国奇谭动画在线观看去哪看3篇(中国奇谭动画在线观看去哪看3篇) 下一篇:返回列表
心得体会推荐
  • 营销策划方案最新12篇
  • 国庆促销活动方案1500字内容(9篇)
  • 俞敏洪励志演讲稿优秀6篇 俞敏洪的
  • 工厂员工规章制度管理制度范本最新
  • 中国最大的贪官落马排名情况(中国历史最大贪高官排行)
  • 2017年中国最大的黑帮排名(中国黑道排名前十名)
  • 社区矫正学习心得体会(社区矫正心得体会100篇)
  • 听课记录(听课记录15篇及评析)
  • 电影英文观后感(绿皮书电影英文观后感)
  • 保密知识测试题及答案(保密知识测试题及答案2021苏密宝)
  • 猜你喜欢的心得体会