问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

mysql 中 in的用法有哪些?

发布网友 发布时间:2022-05-01 11:39

我来回答

2个回答

懂视网 时间:2022-05-01 16:00

创建测试数据库

[root@HE1 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 5
Server version: 5.7.15-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;‘ or ‘h‘ for help. Type ‘c‘ to clear the current input statement.

mysql> select version();
+------------+
| version()  |
+------------+
| 5.7.15-log |
+------------+
1 row in set (0.00 sec)


[root@HE3 ~]# /usr/local/mariadb/bin/mysql -uroot -S /tmp/mariadb.sock 
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 10.1.16-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘h‘ for help. Type ‘c‘ to clear the current input statement.


MariaDB [helei]> select version();
+-----------------+
| version()       |
+-----------------+
| 10.1.16-MariaDB |
+-----------------+
1 row in set (0.00 sec)



如何构建MySQL5.7测试环境和MariaDB10.1测试环境本文不做赘述,如有需要可移步:

一分钟完成MySQL5.7安装

http://suifu.blog.51cto.com/9167728/1855415

MariaDB10.1自动化部署

http://suifu.blog.51cto.com/9167728/1830575



Part2:构建测试表

CREATE TABLE helei (
id INT (10) UNSIGNED NOT NULL AUTO_INCREMENT,
c1 INT (10) NOT NULL DEFAULT ‘0‘,
c2 INT (10) UNSIGNED DEFAULT NULL,
c5 INT (10) UNSIGNED NOT NULL DEFAULT ‘0‘,
c3 TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
c4 VARCHAR (200) NOT NULL DEFAULT ‘‘,
PRIMARY KEY (id),
KEY idx_c1 (c1),
KEY idx_c2 (c2)
) ENGINE = INNODB;




对比测试结果

Part1:MyriaDB10.1.16

MariaDB [helei]> explain select * from helei where (id,c1) in ((100,2684),(101,3566));
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
|    1 | SIMPLE      | helei | ALL  | NULL          | NULL | NULL    | NULL | 5198 | Using where |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)


可以看到,MariaDB对这条SQL总共扫描了5198行,且没有用到任何的索引。



Part2:MySQL5.7.15

mysql> explain select * from helei where (id,c1) in ((100,2684),(101,3566));
+----+-------------+-------+------------+-------+----------------+---------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type  | possible_keys  | key     | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+-------+----------------+---------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | helei | NULL       | range | PRIMARY,idx_c1 | PRIMARY | 4       | NULL |    2 |    20.00 | Using where |
+----+-------------+-------+------------+-------+----------------+---------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.29 sec)


可以看到,MySQL5.7版本已经用到了索引,一共扫描条数为2行。这是因为该语句已经被MySQL5.7的内部优化器改写为如下图所示:

技术分享




——总结——

可以看出,MariaDB版本内部优化器无法改写,因此对于这类查询只能全表扫描。经测试,MySQL5.6和MariaDB10.0/10.1都无法改写。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。


本文出自 “贺磊” 博客,请务必保留此出处http://suifu.blog.51cto.com/9167728/1860216

5分钟了解MySQL5.7对in用法有什么黑科技

标签:mysql   in   优化   

热心网友 时间:2022-05-01 13:08

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

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

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 中 in的用法有哪些?

1.in 后面是记录集,如:select * from table where uname in(select uname from user);2.in 后面是字符串,如:select * from table where uname in('aaa',bbb','ccc','ddd','eee',ffff'');注意:这里一定要将字符串用单引号'' 标注起来;3.in 后面是数组,...

in的用法和用法例子?

IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下:WHERE column IN (value1,value2,...)WHERE column NOT IN (value1,value2,...)当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择。IN 使用实例 选取 uid 为 2、3、5 的用户数据:SELECT...

mysql查询 怎么使用 in

in作为查询条件,一般典型有两种用法:一是IN常量,例如下面语句查询一、三年级的学生:SELECT * FROM student WHERE grade IN ('一','三');二是使用子查询,也就是IN(SQL语句),例如下面的语句查询不及格的班级的所有学生:SELECT * FROM student WHERE classno IN (select classno from scores ...

mysql 存储过程总结(二)if语句、参数

(1)in :该类参数作为输入,也就是需要调用时传入值 默认 (2)out:该类参数作为输出,也就是该参数可以作为返回值 (3)inout:既可以作为输入参数,也可以作为输出参数 用法:案例一:案列二:

在Mysql5.0 中In 用法的疑惑

SELECT * FROM A where A.bigclass in(1,2,35,5)如果 select arrchild from B 的查询结果是一条记录内容是一字符串(1,2,35,5)又要实现 SELECT * FROM A where A.bigclass in(1,2,35,5) 的效果。一个变通的办法是:SELECT * FROM A where INSTR ( CONCAT ( ',' , (...

Mysql in(1,2,3) 1 数据的条数能限制吗?

in()中的个数是没有限制的,in(1,2,3)只是它的简单用法,如果你在学习in(),知道这样实现还不够,sql语句一般都是联合用的,比如 ...in(select uid from ...where ...)如果你在学习php 应该知道 implode(),比如 $uid_arr=array(...);uid_str=implode(',',$uid_arr);sql="...

mysql主表查询的where 条件怎么写查询另一个表的数据?

第一种 exists与not exists select * from table1 t1 where exists(select columnName from table2 t2 where t1.columnName2 = t2.columnName2)第二种,in,not in的用法 select * from table1 where columnName in(select columnName from table2 where columnNane = 'condition')第三种,any...

mysql存储过程的基本用法有哪些

创建 MySQL 存储过程的简单语法为:复制代码 代码如下:create procedure 存储过程名字()([in|out|inout] 参数 datatype )begin MySQL 语句;end;MySQL 存储过程参数如果不显式指定"in"、"out"、"inout",则默认为"in"。习惯上,对于是"in" 的参数,我们都不会显式指定。1. MySQL 存储过程名字后面...

搜集SQL常用的操作语句

(1)插入新的一行数 [sql] view plain copy;INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing');(2)在指定的列中插入数据 [sql] view plain copy;INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');2、SQL SELECT INTO 语句可用于...

mysql有几种数据类型呢?分别是哪几种呢?

九、数据类型在存储函数中的用法 函数里除了显式声明的变量外,默认 session 变量的数据类型很弱,随着给定值的不同随意转换。 示例10 定义一个函数,返回两个给定参数的乘积。定义里有两个变量,一个是 v_tmp 显式定义为 int64,另外一个 @vresult 随着给定值的类型随意变换类型。 简单调用下。 mysql-(ytt/3305...

mysql中in的用法 mysql中like的用法 mysql中的in怎么用 数据库中in的用法 数据库中distinct用法 mysql中in mysql的in支持多少条 mysql where in mysql in 列表值不多
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
哪个手机卡流量多又便宜 四级成绩单选了电子版怎么办啊? 直播平台排名是什么样的? 春季养生男人喝什么茶可保肝护肾? 养肾护肾的最好方法食补 养肾护肾吃什么最好食疗 养肾护肾的最好方法食补 养肾护肾的最好方法食补 怀孕初期不能吃的食物列表 鹿鞭怎么泡酒 快来学学吧 验孕棒说明书 ?验孕棒多少天才可以验出来 验孕棒怎么用 请问一下秦朝和亚历山大帝国交流过吗? 你好,入驻亚马逊要多少钱? 亚马逊开店一年成本大概需要多少钱? 罗马帝国打的过秦国吗 做亚马逊资金跟不上怎么办? 秦始皇和亚历山大大帝打谁能赢 如果亚历山大继续东征,嬴政能打得过吗? 亚马逊开店大概需要多少钱? 亚历山大继续东征能打赢秦国吗 假如亚历山大没有迷路,秦始皇能打得过吗? 新手做亚马逊全球开店会有哪些费用? 现在做亚马逊前期要投多少钱? 如果亚历山大东征,以当时秦军的实力能抵挡得住吗? 红长嘴巴颈脖子是白色的身子是蓝色的这是什么鸟 红嘴白毛这是什么鸟?急! 红嘴巴白头黑身红爪子是什么鸟? 拣了只小鸟,红嘴,白头,黑身,爱吃梨,不吃肉,请问是什么鸟?在北京! 智利海岸红嘴白眉毛的是什么鸟? 谁知道红嘴头只有头顶黑,全身白色,还有长尾羽,也是白的,这是什么鸟? 有谁知道黑头,红嘴,白脖子,灰羽毛是什么鸟?谢谢! 如果,东征的亚历山大大帝翻过喜马拉雅,和当时秦朝打,谁会胜利? 开淘宝店需要多少费用? 合肥48中肥东校区什么时候开学 合肥美好上院还有48中吗 肥东四十八中什么时候招生,有什么要求,没房产证可以吗 合肥市四十八中学新校区在哪? 荣盛书香府邸配套怎么样?好不好? 目前全国共有多少家上市公司?A股有多少家?第一大股东持股份额占公司总股本超过50%的有多少家? 中国的上市公司有多少家? 香港上市公司的一财年是怎么计算的?每家上市公司都披露季报吗? 想理解一下香港的上市公司的情况,香港的行业大致分类如何,每个行业的领导者是那一家啊? 试卷的反馈要怎么写 试卷的反馈怎么写 六年级上学期期末成绩260分,家长反馈怎么写? 关于期中考试成绩,看后家长反馈表怎么写 如何写期末家长会的反馈表? 期末没考好怎么写学生自评和家长反馈? 期末反思怎么写 六年级期末家长反馈意见怎么写 马甲线是啥样