欢迎投稿

今日深度:

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

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


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 exists的用法
   exists/not exists是解决两张表的交集和差集

   select * from proj_basic_info p  where   not exists (select * from proj_basic_info q where   p.id=q.id and q.proj_type=1 and q.qy_source='SUAEE')

  <pre name="code" class="sql">   select * from proj_basic_info p  where  exists (select * from proj_basic_info q where   p.id=q.id and q.proj_type=1 and q.qy_source='SUAEE')

总结:如果是判断单个属性是是否匹配时,就选in/not in;如果是判断多个属性时,即可以看做集合时,就选用exitst /not exists;









sql语句not in 与not exist各自的用法与不同

in 和 exists也是很好区别的.

in 是一个集合运算符.

a in {a,c,d,s,d....}

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

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

in 运算用在语句中,它后面带的select 一定是选一个字段,而不是select *.

比如说你要判断某班是否存在一个名为"小明"的学生,你可以用in 运算:

"小明" in (select sname from student)

这样(select sname from student) 返回的是一个全班姓名的集合,in用于判断"小明"是否为此集合中的一个数据;

同时,你也可以用exists语句:

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

SQL中 exists与in的不同是什?

11.用EXISTS替代IN、用NOT EXISTS替代NOT IN
在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(OUTER JOINS)或NOT EXISTS.
例子:(高效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND EXISTS (SELECT ‘X' FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)
(低效)SELECT * FROM EMP (基础表) WHERE EMPNO > 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)
12.用EXISTS替换DISTINCT
当提交一个包含一对多表信息(比如部门表和雇员表)的查询时,避免在SELECT子句中使用DISTINCT. 一般可以考虑用EXIST替换, EXISTS 使查询更为迅速,因为RDBMS核心模块将在子查询的条件一旦满足后,立刻返回结果。
例:(低效): SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E WHERE D.DEPT_NO = E.DEPT_NO
(高效): SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X' FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4421.html NewsArticle sql中in/not in 和exists/not exists的用法区别,sqlexists 1;首先来说in/not in的用法 in/not in是确定单个属性的是否和给定的或子查询的相匹配; select * from Student s where s.id in(1,2,3);pre name=code cla...
评论暂时关闭