sql-in/not in和exists/not exists的区别

In和Exists的区别

这两个函数是差不多的,但由于优化方案不同,通常NOT Exists要比NOT IN要快,因为NOT EXISTS可以使用结合算法二NOT IN就不行了,而EXISTS则不如IN快,因为这时候IN可能更多的使用结合算法。

Select * from tableA Where exists(Select * From tableB Where tableB.ID=tableA.ID)
这句相当于:
Select * from tableA Where id in (Select ID From tableB)

对于表tableA的每一条数据,都执行Select * From tableB Where tableB.ID=tableA.ID的存在性判断,如果表tableB中存在表tableA当前行相同的ID,则Exists为真,该行显示,否则不显示。

IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况
In确定给定的值是否与子查询或列表中的值相匹配
Exists指定一个子查询,检测行的存在

EXISTS 和NOT EXISTS-----一般用于IF语句的存在检测

----工资改革,检查雇员工资,达到以上的,每人提高,否则每人提高-----

select * from Employee

go

if exists (select * from Employee where empSalary>7000)

begin

    Print ‘有人工资达到,则每人提高,提高后工资为:‘

    update Employee set empSalary=empSalary+300

    select * from Employee

end

else

begin

    Print ‘无人工资达到,则每人提高,提高后工资为:‘

    update Employee set empSalary=empSalary+500

    select * from Employee

end

go
----IN和Exists---

Select distinct deptName from Department

where exists(select * from Employee where empGender=1)

go

Select distinct deptName from Department

where deptID in(select FDeptID from Employee where empGender=1)

go

----exists相当于存在量词:表示集合存在,也就是集合不为空只作用于一个集合。

----exists P表示P不为空时为真;not Exists P表示P为空时,为真。

----in表示一个标量和医院关系的关系。s In P表示当s与P中的某个值相等时为真;

----s not in P表示s与P中的每一个值都不相等时,为真。
时间: 2024-08-08 15:21:59

sql-in/not in和exists/not exists的区别的相关文章

SQL Server判断对象是否存在 (if exists (select * from sysobjects )(转)

1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = '数据库名')    drop database [数据库名]  if exists (select * from sys.databases where name = '数据库名')  drop database [数据库名]2 判断表是否存在Sql代码 if exists (select * from sysobjects where id = objec

sql中exists,not exists的用法

转 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 ...",那么返回

sql中 in 、not in 、exists、not exists 用法和差别

exists (sql 返回结果集为真) not exists (sql 不返回结果集为真) 如下: 表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 EXIST (SELECT * FROM B WHERE A.ID=B.AID) 执行结果为 1 A1 2 A2 原因可以按照如下分

(转)sql中 in 、not in 、exists、not exists 用法和差别

exists (sql 返回结果集为真)  not exists (sql 不返回结果集为真)  如下:  表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 EXIST (SELECT * FROM B WHERE A.ID=B.AID)  执行结果为  1 A1 

转【】浅谈sql中的in与not in,exists与not exists的区别_

浅谈sql中的in与not in,exists与not exists的区别 1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表大小相当,那么用in和exists差别不大:如果两个表中一个较小一个较大,则子查询表大的用exists,子查询表小的用in: 例如:表A(小表),表B(大表) select * from A where cc in(sele

SQL Server 中not in和not exists

NOT IN和NOT EIXTS在对允许为null的列查询时会有一定的风险. 特别是NOT IN,如果子查询包含了最少一个NULL,会出现非预期的结果. http://blog.csdn.net/dba_huangzj/article/details/31374037 SQL Server 中not in和not exists

sql中in/not in 和exists/not exists的用法区别

1:首先来说in/not in的用法 in/not in是确定单个属性的值是否和给定的值或子查询的值相匹配: select * from Student s where s.id in(1,2,3); <pre name="code" class="sql"> select * from Student s where s.name in( select distinct name from Project) 2:现在来说exists/not exist

SQL语句中exists和in的区别

转自https://www.cnblogs.com/liyasong/p/sql_in_exists.html 和 http://blog.csdn.net/lick4050312/article/details/4476333 表展示 查询中涉及到的两个表,一个user和一个order表,具体表的内容如下: user表: order表: in 一.确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选.所以相对内表

oralce中exists not exists in not in对于NULL的处理

1.   先讨论 in 与 not in中存在NULL的情况, sql语句如下: 1 select 1 result1 from dual where 1 not in (2, 3); 2 3 4 select 1 result2 from dual where 1 not in (2, 3, null); 5 6 7 select 1 result3 from dual where 1 in (2, 3, null, 1); 8 9 10 select 1 result4 from dual

oracle中exists 和 in 的区别

select * from Awhere id in(select id from B) 以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.它的查询过程类似于以下过程 List resultSet=[];Array A=(select * from A);Array B=(select id from B); for(int i=0;i<A.length;i+