IT之道-艾锑知道

您当前位置: 主页 > 资讯动态 > 艾锑分享 >

艾锑知识 |SQL中Exists的用法


2020-03-04 17:45 作者:admin
烦恼即菩提,菩提即智慧
 
 
 
疫情放慢了管理者的脚步,却没有放慢管理者的心,对于企业来说,在富有的时候,可以说说情怀,说说理想,但在贫穷受困的时候,没有饭吃的时候,情怀和理想其实并不重要,重要的是下一顿吃什么?在哪吃呢?
 
前几天,有篇文章报道某云南大型企业的人事总监被总经理怒骂的邮件很火,为什么会发生这样的事,我觉得身为一个企业的员工,无论你处在什么岗位,什么职位,一定要审时度势,要知道企业要什么,俗话说,大河有水小河满,只有企业活下来了,活好了,组织里的员工才能真正拿到自己想要的,如果在危难时机,你还在坚持自己观点,抱持着自己的思维不改变,不能与企业思想同步,那最终也不会有什么好的结果.
 
在这里艾锑无限给已经上班或即将上班的各个企业伙伴一些忠告:
 
1,困难时期,在为自己着想的同时多想想能为企业做点什么,今天你的付出,明天不一定会有收获,但长久来看,能量守恒定律,你是不会吃亏的.
 
2,在经济还没复苏的时期,企业还不太忙的时候,除了做好自己部门手头上的工作以外,把自己的大脑开动起来,如果你是职员,就想想假如你是这个部门经理,你如何做可以让部门的损失降到最低,让收益提升到最大.如果你是经理就想想假如你是企业的CEO,你如何做可以让企业快速恢复状态,让业务快速发展起来,让现金流可以流动起来?
 
3,如果你处在花钱的部门,就想想如何做可以省钱,又可以为部门创收,如果你是创收的部门,就想想原来从来就没想过的问题,因为你不能破旧就不能立新,不能创造就是在消耗.
 
4,管理团队间,如果不是能力问题,不仅行动要勤快,大脑更要勤快一些,除了思考自己部门的工作,也要思考其他部门的工作,你的团队可以做些什么更利于其他部门的发展,你可以做些什么更助于其他管理者达成目标,整个企业就像一台齿轮吻合的机器,只有彼此主动吻合才能让这台机器更好的运转,这也像打群架,如果每一个人都能照顾好自己,还能为他人着想,就不会受伤,也能全身而退,有一个人需要他人照顾,就很可能有人受伤,并导致全队受损.
 
5,无论什么时期,不要害怕困难,不要拒绝烦恼, 烦恼即菩提,菩提即智慧,伟大的洞见和上师都是来自于苦难和无数次的折磨.相信宇宙的安排,无论是事,还是人,来到你的身边就是成就你的,所以把心安于当下,尽一切努力做到尽善尽美.
 
接下来分享一则技术信息,以许会对你的企业有所帮助:
 
 
 
艾锑知识 |SQL中Exists的用法
比如在Northwind数据库中有一个查询为
?
1
2
3
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 。
例表A:TableIn 例表B:TableEx
 
(一). 在子查询中使用 NULL 仍然返回结果集
?
1 select * from TableIn where exists(select null)
等同于: select * from TableIn
  
(二). 比较使用 EXISTS 和 IN 的查询。注意两个查询返回相同的结果。
?
1
2
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME in(select BNAME from TableEx)
 
(三). 比较使用 EXISTS 和 = ANY 的查询。注意两个查询返回相同的结果。
?
1
2
select * from TableIn where exists(select BID from TableEx where BNAME=TableIn.ANAME)
select * from TableIn where ANAME=ANY(select BNAME from TableEx)
 
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 条件句防止插入重复记录。
?
1
2
3
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的用法,希望对大家有所帮助
 

相关文章

IT外包服务
二维码 关闭