sql 语句中in ,not in

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 语句中in ,not in相关的知识,希望对你有一定的参考价值。

sql 语句中in ,not in 效率很差么?有什么好的方式转换成exists 和not exists.

如果系统不自动优化,并且IN的结果很多,那么有可能IN和NOT IN的效率低些。

所有的IN都可以转换为EXISTS,同样NOT IN可以转换为NOT EXISTS,下面说明IN转换为EXISTS的方法,NOT的类似:

IN的语句:
SELECT * FROM A WHERE F IN (SELECT F FROM B)

可以转换为如下的EXISTS语句:
SELECT * FROM A WHERE EXISTS
(SELECT * FROM B WHERE A.F=B.F)

上面转换的说明:两个WHETE都可能有更多都条件,那么直接AND在相应的地方即可。另外表A和B的关联字段可能名字表同,也司没关系的。
参考技术A in 和 not in 是说在或者不在某一个范围之内,效率上面会有些差,而exists 和not exists是说存不存在

sql语句学习(NOT EXISTS 和 NOT IN )

NOT EXISTS

SELECT
  a.*
FROM
  t_user a
WHERE
  a.id_card LIKE ‘%3203821995100%‘
AND NOT EXISTS (
SELECT
  id
FROM
  tr_user_product_doctor tupd
WHERE
  a.id = tupd.user_id
)

 

NOT IN

SELECT
  a.*
FROM
  t_user a
WHERE
  a.id_card LIKE ‘%3203821995100%‘
AND a.id NOT IN (

SELECT DISTINCT
  user_id
FROM
  tr_user_product_doctor
)

 

说明 : 根据id_card查询不在tr_user_product_doctor表中出现的user_id
























以上是关于sql 语句中in ,not in的主要内容,如果未能解决你的问题,请参考以下文章

随笔57 sql语句中in与exists,not in与not exists的区别

在 SQL 中使用多个 NOT IN 语句

在SQL中使用多个NOT IN语句

使用 NOT IN 从其他表中排序的 sql 语句

SQL语句中 NOT IN 子句的“正确打开方式”

有没有办法在 SQL 中将 EXCEPT 语句重写为 NOT IN 语句?