本教程分享:《exists用法》,exists用法:Exists:如果在 Dictionary 对象中指定的记录存在,返回 True,若不存在,返回 False。语法object.Exists(key)Exists 有如下几部分:部分描述Object必需的,始终是一个 Dictionary 对象的名字,Key必需的,在 Dictionary 对象中搜索的 Key 值。
oracle中exists用法
比如 a,b 关联列为 a.id = b.id,现在要取 a 中的数据,其中id在b中也存在:
select * from a where exists(select 1 from b where a.id = b.id)
或者:
现在要取 a 中的数据,其中id在b中 不存在:
select * from a where not exists(select 1 from b where a.id = b.id)
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语句中exists和not 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))
sql中not exists用法
我想查出表a中的记录在表b中不存在的记录,关联字段是id,但是这个在两个表中的列名不一样,一个是id,一个是id_no,这样写对吗?select id from a where not exists(select id_no from b where b.id_no=a.id)
恩,对的,其实写法很多
1、
select id from a where id not in (select id_no from b)
2、
select id from a
except
select id_no from b
追问
如果关键字段有两个,然后列名都不一样,一个是id,phone,一个是id_no,phone_no,这样写对吗?select * from a where not exists(select id_no,phone_no from b where b.id_no=a.id and b.phone_no=a.phone)
追答
select * from a where not exists
(select 1 --这个位置不用非把字段都写上,随便写什么都可以,这个主要就是判断个真假
from b where b.id_no=a.id and b.phone_no=a.phone)
exist的用法 前面可以用there吗
可以用there。
exist的用法如下:
1、exist的基本意思是“存在,生存”。作“存在”解时主要指可以被感知的事物以某种状态存在,这种存在多为客观的,强调的是存在的真实性。
2、作“生存”解时主要指人或其他生物依赖某物在地球上存活,此时只表示“存活”,而不表示“过生活”。
3、exist多用作不及物动词。
4、exist常与介词by或on连用,表示“生存的手段或方法”。
5、exist相当于表示存在的动词be,应置于引导词之后,主语之前,即主谓倒装。
6、exist有时有“在逆境中生活,仅能活命”的意思。
7、exist与subsist区别:subsist指“继续存在”,而exist指“存在”。
扩展资料
exist的近义词:live
live
读音:英 [l?v , la?v] 美 [l?v , la?v]
释义:住,居住,生存,活着。
语法:live的基本意思是“居住,住”,引申可作“活,生存”“以某种方式生活”“继续存在,留存”“享受生活”等解。
例句:
She has lived here for 10 years.
她在这里住了10年了。
oracle中的exists用法
update sde.video a set a.sbbh=(selectt b.sbbh from b_sssb_sbxx b where a.name=b.name and rownum=1) where exists (select 1 from b_sssb_sbxx x where c.sbmc=a.name)
这个和
update sde.video a set a.sbbh=(selectt b.sbbh from b_sssb_sbxx b where a.name=b.name)有什么区别呢?
有两个区别
1 第一个里面rownum=1 是为了防止子查询返回超过一条数据,语句会报错。
2 有exists条件,可以保证子查询有结果,sbbh不会被赋予空值。
java中,exist方法的使用。
假如 Dictionary 对象中存在所指定的主键则返回 true,否则返回 false。
object.Exists(key)
参数
object
必选项。总是一个 Dictionary 对象的名称。
key
必选项。需要在 Dictionary 对象中搜索的 key 值。
下面这个例子说明了 Exists 方法的用法。function keyExists(k)
{varfso, s = ""; d = new ActiveXObject("Scripting.Dictionary"); d.Add("a", "Athens"); d.Add("b", "Belgrade"); d.Add("c", "Cairo"); if (d.Exists(k)) s += "Specified key exists."; else s += "Specified key doesn't exist."; return(s);}
数据库的exists用法啊,我真的难以拐过弯来啊,怎...
第一句:select * from areas where id in (select city_id from deals where deals.city_id = areas.id); 第二句:select * from areas where exists (select * from deals where deals.city_id = areas.id); 这两句的第一句很好理解,就是先在子查询中查找出满足条件的city_id,然后用在用areas的id字段去判断,即in操作;但是第二句的exists怎么理解,它的子查询中没返回任何结果给areas 表的查询啊,那怎么理解!
第一句子查询里的where条件是多余的,你可以试下
select * from areas where id in (select city_id from deals);
与上面两个语句查询结果是一样的。
exists字面上翻译就是存在,第二句解释就是查询areas表在deals表里存在满足deals.city_id = areas.id的记录。
sql语句中exists什么意思,怎么用
exists 存在判断谓词。
子查询和外部查询条件有连接条件,并非恒定返回true,你把连接条件省略掉了,如果去掉那个where条件就是你说的那个推导了。
老兄被那种简单的exists使用误导了,建议重新去看下exists谓词的定义和几种常见使用方法,有些exists查询可以用in谓词实现,而某些sql不支持的关系表达式必须用存在谓词作推导的,如果理解不清就头痛了.
case when 语句与exists 怎么一同使用?
以下语句 为什么用了exists会报语法错误?(之前用in 的,考虑到性能我改用exists就报错了)
SELECT (CASE WHEN ChannelID exists (SELECT ChannelID FROM dbo.BASChannel WHERE LEVEL=1) THEN ChannelID ELSE (SELECT ParantID FROM dbo.BASChannel WHERE ChannelID=A.ChannelID) END ) ChannelID FROM dbo.DATMdApplyList A
exists和in用法一般可以互换,但是是有不同的,in里面是一个集合,所以 channelid in (集合),是一个判断的表达式,而使用exists,返回的并不是集合,而是把in用法之前的变量,传入到子查询后边的where条件中去,和exists合在一起返回true或者false的结果,如果条件符合,返回true,否则返回false。所以你使用exists就错了,需要把channelid传入到条件里面去。
SELECT (CASE WHEN exists (SELECT 1 FROM dbo.BASChannel WHERE LEVEL=1 and dbo.baschannel.channelid = a.ChannelID) THEN ChannelID ELSE (SELECT ParantID FROM dbo.BASChannel WHERE ChannelID=A.ChannelID) END ) ChannelID FROM dbo.DATMdApplyList A
简单的用法比如:
selelct user_id, user_name
from tb_users
where user_id in (select user_id from tb_course)
这个查询是查询在tb_course表中存在的user记录。
使用exists,写成
select user_id, user_name
from tb_users
where exists (select 1 from tb_course where tb_course.user_id = tb_users.user_id)
exists用法是把主查询中的字段传入到子查询中去。如果有符合的条件,会停止全表检索,返回TRUE。所以效率才要高于IN,IN是要进行完全表检索得到集合才会结束执行。而EXISTS遇到符合的 条件,就会停止执行子查询。