https://blog.csdn.net/haibo0668/article/details/52584307

sssss

mysql中 where in 用法详解

我是高手高手高高手 2016-09-19 11:33:29  102915  收藏 14

分类专栏: php MY SQL



这里分两种情况来介绍

WHERE column IN (value1,value2,...)
WHERE column NOT IN (value1,value2,...)

1、in 后面是记录集,如:

select  *  from  table  where   uname  in(select  uname  from  user);

例子:

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 的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。

2、in 后面是字符串,如:

select  *  from  table  where   uname  in('aaa',bbb','ccc','ddd','eee',ffff'');

注意:这里一定要将字符串用单引号'' 标注起来;

3、in 后面是数组,用如下方法,请参考:

//$pieces是含数据的数组

for($i=0;$i<count($pieces);$i++){

$uname=$uname."'".$pieces[$i]."',";

}

$the_uname ="uname in(".$uname."'')";

select  *  from  table  where    ".$the_uname." ;

备注:这种方法的原理其实很简单,二就是把数组编程上面“第2种情况”的形式

mysql中使用FIND_IN_SET查询在逗号隔开的字符串中符合多个ID的数据

FIND_IN_SET(str,strlist)函数   它不同于 like 模糊查询,它是以“,”来分隔值

str 要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

查询字段(strlist)中包含(str)的结果,返回结果为null或记录

下面举例说明

test表中有如下字段及值

下面我想查询area中包含”1″这个参数的记录

SELECT * from test where FIND_IN_SET('1',area)

返回值

下面查询btype字段中包含”15″这个参数的值

SELECT * from test where FIND_IN_SET('15',btype)

返回值

MySQL BETWEEN 用法
MySQL BETWEEN 语法
BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。BETWEEN 同 AND 一起搭配使用,语法如下:

 
  1. WHERE column BETWEEN value1 AND value2

  2. WHERE column NOT BETWEEN value1 AND value2

通常 value1 应该小于 value2。当 BETWEEN 前面加上 NOT 运算符时,表示与 BETWEEN 相反的意思,即选取这个范围之外的值。
BETWEEN 实例
选取 uid 在 2 到 5 之间的用户数据:

SELECT * FROM user WHERE uid BETWEEN 2 AND 5

返回查询结果如下:

除了数值类型外,BETWEEN 也支持字符串范围,如下选择出所有 username 介于 a 至 j 之间的用户(并包括单字母k/K):
SELECT * FROM user WHERE username BETWEEN 'a' AND 'k'
字符范围也支持汉字,但通常来说没什么意义。
MySQL BETWEEN 边界
虽然几乎所有的数据库都支持 BETWEEN ... AND 运算符,但不同的数据库对 BETWEEN ... AND 处理方式是有差异的。在 MySQL 中,BETWEEN 包含了 value1 和 value2 边界值,如上面选取 uid 在 2 到 5 之间的用户数据例子。
而有的数据库则不包含 value1 和 value2 边界值(类似于 > and <),也有数据库包含 value1 而不包含 value2(类似于 >= and <)。所以在使用 BETWEEN ... AND 的时候,请检查你的数据库是如何处理 BETWEEN 边界值的。
MySQL BETWEEN 时间日期
BETWEEN AND 常用于检索时间或日期段内的内容,下面是一些常见的 BETWEEN 时间日期例子:

 
  1. // int 时间戳格式,查询 2008-08-08 20:00:00 到 2009-01-01 零点之前的数据

  2. SELECT * FROM table WHERE column_time BETWEEN 1218196800 AND 1230739199

  3. // DATE 格式,查询 2008-08-08 到 2009-01-01 零点之前的数据

  4. SELECT * FROM table WHERE column_time BETWEEN '2008-08-08' AND '2009-01-01'

  5. // DATETIME 格式,查询 2008-08-08 20:00:00 到 2009-01-01 零点之前的数据

  6. SELECT * FROM table WHERE column_time BETWEEN '2008-08-08 20:00:00' AND '2008-12-31 23:59:59'

  7. 但对于查询到当前时间的数据,建议使用 >= 运算符:

  8. // DATETIME 格式,查询 2008-08-08 20:00:00 到当前时刻的数据

  9. SELECT * FROM table WHERE column_time >= '2008-08-08 20:00:00'

可见,同样的需求,不同的字段类型,写法可能就不一样。从效率上来讲,int 时间戳格式效率最优。
以上 BETWEEN 的各个例子,虽然都是 SELECT 查询,但 BETWEEN 也可以用于 UPDATE、DELETE 等适用 WHERE 表达式的 SQL 中。
MySQL BETWEEN 数据比较
BETWEEN 还具有数据比较功能,语法如下:

expr BETWEEN min AND max

当 expr 表达式的值大于或等于 min 且小于或等于 max 时, BETWEEN 的返回值为 1 ,否则返回 0 。利用这个功能,可以判断一个表达式或值否则在某个区间:

 
  1. // 返回 0

  2. SELECT 1 BETWEEN 2 AND 3

  3. // 返回 1

  4. SELECT 'b' BETWEEN 'a' AND 'c'

  5. // 判断日期范围

  6. SELECT 20080808 BETWEEN 20080101 AND 20090101

BETWEEN 与 <、<=、>=、> 等运算符在某些情况下有着类似的功能,但 BETWEEN 运算级别更高且效率上更甚一筹。当然由于 BETWEEN 存在边界值的问题而不够灵活,因此不同的情况,采用何种运算符,需要具体对待。

MySQL IN 用法
MySQL IN 语法
IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下:

 
  1. WHERE column IN (value1,value2,...)

  2. WHERE column NOT IN (value1,value2,...)

当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。
IN 使用实例
选取 uid 为 2、3、5 的用户数据:

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

返回查询结果如下:

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 运算符补充说明
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','5idev')
使用 AND 或 OR 逻辑运算符后,IN 还可以和其他如 LIKE、>=、= 等运算符一起使用。
关于 IN 运算符的效率问题
如果 IN 的列表项是确定的,那么可以用多个 OR 来代替:

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

  2. // 等效为:

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

一般认为,如果是对索引字段进行操作,使用 OR 效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN 运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN 运算符的。

出处:http://blog.csdn.net/k8080880/article/details/8482659

http://www.jb51.net/article/76517.htm



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

  1. MySQL中Case When用法详解

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

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

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

  3. mysql中in的用法详解

    一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...

  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. c++ 查找文件夹下最新创建的文件_Linux文件查找进阶知识,find命令的用法及解读...
  2. MIT机器学习种菜项目永久关停
  3. IBM Installation Manager 工具概述(转)
  4. 快速排序 python菜鸟教程-快速排序
  5. JZOJ 5458. 【NOIP2017提高A组冲刺11.7】质数
  6. 通信系统设计与python的书_腾讯十年Python开发老司机推荐的入门书籍,你确定不看吗?...
  7. Linux 常用的帮助命令
  8. MS Code 使用 TFVC 插件时遇到的问题
  9. 天池 在线编程 回合制游戏(前缀和)
  10. 手把手教你写平衡二叉树
  11. 现实中简单配置路由器
  12. Unknown entity (Hibernate的findById方法参数必须加上包名)
  13. Activity 生命周期图解
  14. 奇门遁甲鸣法 第四章 正格
  15. 在云面前,为何Cisco,Dell和HP都是Loser
  16. 全国计算机技术与软件专业技术资格(水平)考试
  17. 激光雷达的应用及发展前景
  18. 哪些人适合做产品经理
  19. 分布式和非分布式_分布式防御虚假信息
  20. excel中如何拷贝已经筛选出来的数据到另外的一表格中

热门文章

  1. 2019年度边缘计算最全吃瓜指南
  2. 火影忍者插曲(不是主题曲或者片尾曲)
  3. Java-方法语句-员工迟到处理
  4. MySQL主从互换策略(主down机切换从为和恢复过程中的倒增量备份)
  5. 开发模型的理解:瀑布模型/增量式/迭代/敏捷开发——笔记
  6. Codeforces Roun d #621 (Div. 1 + Div. 2) D. Cow and Fields 最短路+贪心 图上特殊点加边使最短路最大
  7. 活动预告 | 博云容器云产品族发布会
  8. 【对讲机的那点事】搭建无线电天馈系统如何使用热塑管和制作跳线?
  9. 绝非配角:AI浪潮中的加拿大
  10. 数据为王的时代 大数据对消费金融的影响