一、基础用法

mysql中in常用于where表达式中,其作用是查询某个范围内的数据。

select * from where field in (value1,value2,value3,…)

当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择

select * from where field not in (value1,value2,value3,…)

二、IN 子查询

更多情况下,IN 列表项的值是不明确的,而可能是通过一个子查询得到的:

SELECT * FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)

在这个 SQL 例子里,我们实现了查出所有状态为 0 的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0 的用户:

SELECT uid FROM user WHERE status=0

然后将查询结果作为 IN 的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。

在in的子查询中常常会遇到查询效率太低问题,解决方法如下:
1、仍使用in子查询,多查询一次

SELECT * FROM basic_zdjbxx WHERE suiji IN ( SELECT zdcode FROM ( SELECT zdcode FROM basic_h WHERE zdcode != "" ) AS h )

2、使用LEFT JOIN

SELECT zd.* FROM ( SELECT DISTINCT zdcode FROM basic_h WHERE zdcode != "" ) AS h LEFT JOIN basic_zdjbxx zd ON zd.suiji = h.zdcode

三、IN 运算符补充说明

IN 列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column 的类型保持一致:

SELECT * FROM user WHERE uid IN(1,2,'3','c')

一个 IN 只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND 或 OR 逻辑运算符:

  SELECT * FROM user WHERE uid IN(1,2) OR username IN('admin','manong')

使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。

四、关于 IN 运算符的效率问题

如果 IN 的列表项是确定的,那么可以用多个 OR 来代替:

SELECT * FROM user WHERE uid IN (2,3,5)

// 等效为:

SELECT * FROM user WHERE (uid=2 OR aid=3 OR aid=5)

一般认为:
1、如果是对索引字段进行操作,使用 OR 效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。
2.in或or在字段没有添加索引的情况下,所连接的字段越多(1 or 2 or 3 or 4 or…),or比in的查询效率低很多。

参考来自:https://www.jb51.net/article/103208.htm
https://blog.csdn.net/ltaihyy/article/details/82148840

mysql中in的用法详解相关推荐

  1. mysql中 where in 用法详解

    https://blog.csdn.net/haibo0668/article/details/52584307 sssss mysql中 where in 用法详解 我是高手高手高高手 2016-0 ...

  2. MySQL中Case When用法详解

    最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家.首先练习一个例子如下: 一.学生课程成绩统计 ...

  3. MySQL中CONCAT()函数用法详解

    需求:需要将将俩字符串拼接在一起 1.MySQL中CONCAT()函数拼接字符串 CONCAT(str,str2,str3...) 可以将两个或者多个参数拼接在一起 注意事项: ①返回结果为连接参数产 ...

  4. mysql中declare语句用法详解

    mysql中的DECLARE语句是在复合语句中声明变量的指令.  (1)Example with two DECLARE statements  两个DECLARE语句的实例  CREATE PROC ...

  5. MySQL中的limit用法详解

    limit的详细用法 1.用于强制返回指定的记录行数 在查询中,经常要返回前几条或者中间某几行数据时,用到limit 语法如下: select * from table_name limit [off ...

  6. mysql in从数据库取数_MySQL数据库中 where in 用法详解

    本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...

  7. viewstate 解码 php,.NET_asp.net中ViewState的用法详解,在web窗体控件设置为runat = serv - phpStudy...

    asp.net中ViewState的用法详解 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了 ...

  8. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  9. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

最新文章

  1. php析构函数的用法
  2. java中记忆深刻的问题_工作中碰到比较印象深刻的问题(面试必问)
  3. 复盘 | 听全民K歌体验设计师聊聊歌房项目完整设计历程
  4. oracle行级的触发器,Oracle触发器Trigger2行级
  5. php显示评委打分情况代码,评委打分表自动汇总计算得分
  6. python两个数相加时_怎么用python让两个小数相加
  7. android 标准字体,文字规范标准(IOS/Android)
  8. php laravel 调试,php – Xdebug laravel artisan命令
  9. python的数据库中间件_数据库中间件设计方案
  10. k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“
  11. Python多进程读写文件操作
  12. redhat6 本地 yum源配置方法
  13. vxworks7.0SD卡驱动流程及文件系统格式化
  14. 概率论与数理统计浙大第五版 第三章 部分习题
  15. 人声歌姬语音合成器+全套拓展 – Yamaha Vocaloid 4.3.0 + ALL Libraries WiN
  16. PCB走线电感、导线电感、过孔电感 计算公式
  17. Linux性能优化之内存(一)
  18. 奶牛专题2:奶牛晒衣服
  19. 转载“我为什么要进国企”
  20. 在网页中 生成QQ在线临时对话框/聊天

热门文章

  1. 园区——论开发商与运营商的盈利模式
  2. 公司采购阿里云服务器配置怎么选?
  3. 彻底搞定欢乐锁与悲观锁
  4. KeePass使用心得
  5. boj-311-小马过河
  6. windows2008服务器IIS7下php程序伪静态处理 猫叔
  7. 佳明手表大数据应用_Garmin腕表——四种程序的使用方法. | 佳明开发者
  8. 【自然语言处理】【大模型】Chinchilla:训练计算利用率最优的大语言模型
  9. mysql中prepare_MySQL PREPARE语句
  10. python输出字母金字塔a bb ccc dddd_c#题库(程序设计基础)-New