mysql中in的用法详解
一、基础用法
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的用法详解相关推荐
- mysql中 where in 用法详解
https://blog.csdn.net/haibo0668/article/details/52584307 sssss mysql中 where in 用法详解 我是高手高手高高手 2016-0 ...
- MySQL中Case When用法详解
最近,在学习Hive基础知识时,遇到了遇到了Case When Else End语法,以前学习MySQL时忽略了这部分知识点,现总结一下相关的知识给大家.首先练习一个例子如下: 一.学生课程成绩统计 ...
- MySQL中CONCAT()函数用法详解
需求:需要将将俩字符串拼接在一起 1.MySQL中CONCAT()函数拼接字符串 CONCAT(str,str2,str3...) 可以将两个或者多个参数拼接在一起 注意事项: ①返回结果为连接参数产 ...
- mysql中declare语句用法详解
mysql中的DECLARE语句是在复合语句中声明变量的指令. (1)Example with two DECLARE statements 两个DECLARE语句的实例 CREATE PROC ...
- MySQL中的limit用法详解
limit的详细用法 1.用于强制返回指定的记录行数 在查询中,经常要返回前几条或者中间某几行数据时,用到limit 语法如下: select * from table_name limit [off ...
- mysql in从数据库取数_MySQL数据库中 where in 用法详解
本文主要向大家介绍了MySQL数据库中 where in 用法详解,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 这里分两种情况来介绍 WHERE column IN (valu ...
- viewstate 解码 php,.NET_asp.net中ViewState的用法详解,在web窗体控件设置为runat = serv - phpStudy...
asp.net中ViewState的用法详解 在web窗体控件设置为runat = "server",这个控件会被附加一个隐藏的属性_ViewState,_ViewState存放了 ...
- C++中substr()函数用法详解
C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
最新文章
- php析构函数的用法
- java中记忆深刻的问题_工作中碰到比较印象深刻的问题(面试必问)
- 复盘 | 听全民K歌体验设计师聊聊歌房项目完整设计历程
- oracle行级的触发器,Oracle触发器Trigger2行级
- php显示评委打分情况代码,评委打分表自动汇总计算得分
- python两个数相加时_怎么用python让两个小数相加
- android 标准字体,文字规范标准(IOS/Android)
- php laravel 调试,php – Xdebug laravel artisan命令
- python的数据库中间件_数据库中间件设计方案
- k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“
- Python多进程读写文件操作
- redhat6 本地 yum源配置方法
- vxworks7.0SD卡驱动流程及文件系统格式化
- 概率论与数理统计浙大第五版 第三章 部分习题
- 人声歌姬语音合成器+全套拓展 – Yamaha Vocaloid 4.3.0 + ALL Libraries WiN
- PCB走线电感、导线电感、过孔电感 计算公式
- Linux性能优化之内存(一)
- 奶牛专题2:奶牛晒衣服
- 转载“我为什么要进国企”
- 在网页中 生成QQ在线临时对话框/聊天
热门文章
- 园区——论开发商与运营商的盈利模式
- 公司采购阿里云服务器配置怎么选?
- 彻底搞定欢乐锁与悲观锁
- KeePass使用心得
- boj-311-小马过河
- windows2008服务器IIS7下php程序伪静态处理 猫叔
- 佳明手表大数据应用_Garmin腕表——四种程序的使用方法. | 佳明开发者
- 【自然语言处理】【大模型】Chinchilla:训练计算利用率最优的大语言模型
- mysql中prepare_MySQL PREPARE语句
- python输出字母金字塔a bb ccc dddd_c#题库(程序设计基础)-New