MySQL基础教程之IN的用法详解

MySQL IN 语法

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

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

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

IN 使用实例

选取 uid 为 2、3、5 的用户数据:

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

返回查询结果如下:

uid username password email regdate
2 小明 a193686a53e4de85ee3f2ff0576adf01 xiao@163.com 1278063917
3 Jack 0193686a35e4de85ee3f2ff0567adf490 jack@gmail.com 1278061380
5 5idev a193686a53e4de85ee3f2ff0576adf01 5idev@5idev.com 1291107029

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','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)

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • linux下安装apache与php;Apache+PHP+MySQL配置攻略

    1.apache  在如下页面下载apache的for Linux 的源码包   http://www.apache.org/dist/httpd/;  存至/home/xx目录,xx是自建文件夹,我建了一个wj的文件夹. 命令列表:   cd /home/wj  tar -zxvf httpd-2.0.54.tar.gz mv httpd-2.0.54 apache  cd apache  ./configure --prefix=/usr/local/apache2 --enable-mod

  • MySQL——修改root密码的4种方法(以windows为例)

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:mysql> set password for root@localhost = password('123'); 方法2:用mysqladmin 格式:mysqladmin -u用户名 -p旧密码 password 新密码 例子:mysqladmin -uroot -p123456 password 12

  • windows下apache+php+mysql 环境配置方法

    一 准备 1 下载apache http://httpd.apache.org/download.cgi#apache24 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi openssl表示带有openssl模块,利用openssl可给Apache配置SSL安全链接 2 下载php http://windows.php.net/downloads/releases/archives/ php-5.3.5-Win32-VC6-x86.zip 下载vc6版本 VC

  • Linux下安装mysql-5.6.4 的图文教程

    在开始安装前,先说明一下mysql-5.6.4与较低的版本在安装上的区别,从mysql-5.5起,mysql源码安装开始使用cmake了,因此当我们配置安装目录./configure --perfix=/.....的时候和以前的会有些区别,这点我们稍后会提到. 一:解压缩mysql-5.6.4-m7-tar.zip 1>  unzip mysql-5.6.4-m7-tar.zip   会生成mysql-5.6.4-m7-tar.gz的压缩文件 2> tar -zxvf mysql-5.6.4-

  • windows下mysql忘记root密码的解决方法

    方法一: 1.在DOS窗口下输入net stop mysql5 或 net stop mysql 2.开一个DOS窗口,这个需要切换到mysql的bin目录. 一般在bin目录里面创建一个批处理1.bat,内容是cmd.exe运行一下即可就切换到当前目录,然后输入 mysqld-nt --skip-grant-tables; 或 mysqld --skip-grant-tables; 不要关闭窗口 3.再开一个DOS窗口,mysql -u root 4.输入: 复制代码 代码如下: use my

  • Mysql字符串截取函数SUBSTRING的用法说明

    感觉上MySQL的字符串函数截取字符,比用程序截取(如PHP或JAVA)来得强大,所以在这里做一个记录,希望对大家有用. 函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(content,200) as abstract from my_content_t 2.从右开始截取字符串 right(str, length) 说明:right(被截取字段,截取长度) 例:select right(content,200

  • MySQL提示:The server quit without updating PID file问题的解决办法

    用df命令查了下,果然磁盘满了,因为当时分区采用系统默认,不知道为什么不能自动扩容!以后在处理这个问题!如图所示: 复制代码 代码如下: [root@snsgou ~]# df文件系统                 1K-块      已用      可用 已用% 挂载点/dev/mapper/vg_snsgou-lv_root51606140  47734848   1249852  100%      /tmpfs                  1953396        88  

  • 超详细mysql left join,right join,inner join用法分析

    下面是例子分析表A记录如下: aID        aNum 1           a20050111 2           a20050112 3           a20050113 4           a20050114 5           a20050115 表B记录如下: bID        bName 1            2006032401 2           2006032402 3           2006032403 4           20

  • windows下MySQL5.6版本安装及配置过程附有截图和详细说明

                        编辑者:Vocabulary 下面详细介绍5.6版本MySQL的下载.安装及配置过程. 图1.1 MySQL5.6 目前针对不同用户,MySQL提供了2个不同的版本: Ø         MySQL Community Server:社区版,该版本完全免费,但是官方不提供技术支持. Ø         MySQL Enterprise Server:企业版,它能够高性价比的为企业提供数据仓库应用,支持ACID事物处理,提供完整的提交.回滚.崩溃恢复和行级锁

  • MySQL查询in操作 查询结果按in集合顺序显示

    MySQL 查询in操作,查询结果按in集合顺序显示 复制代码 代码如下: select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5'); select * from test where id in(3,1,5) order by substring_index('3,1,2',id,1); 偶尔看到的...或许有人会注意过,但我以前真不知道 SQL: select * from table where id IN

  • mysql中int、bigint、smallint 和 tinyint的区别详细介绍

    最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint.其中比较迷惑的是int和smallint的差别.今天就在网上仔细找了找,找到如下内容,留档做个总结: 使用整数数据的精确数字数据类型. bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字).存储大小为 8 个字节. P.S. bigint已经有长度了,在mysql建表中的len

随机推荐