mysql between 的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql between 的用法相关的知识,希望对你有一定的参考价值。

请哪位高手看看这句sql语句有错吗
SELECT * FROM `p_archives_3` WHERE `picsad` between 1113 and 1122
我保证 1113 和 1122 数据库都有值,但就是全部取出来了,我只想取出 picsad字段的值在1113和1122之间的

这要看picsad字段是什么类型,

如picsad字段是数字类型,该语句应该这么写:
SELECT * FROM p_archives_3 WHERE picsad between 1113 and 1122

如picsad字段是字符串类型,该语句应该这么写:
SELECT * FROM p_archives_3 WHERE picsad between '1113' and '1122'
参考技术A SELECT * FROM `p_archives_3` WHERE `picsad` between 1113 and 1122

等同于

SELECT * FROM `p_archives_3` WHERE `picsad` >= 1113 and `picsad`<=1122

你要保证picsad是数字类型的本回答被提问者和网友采纳
参考技术B 貌似没什么错误。和
SELECT * FROM `p_archives_3` WHERE `picsad` >=1113 and picsad<=1122是等价的
参考技术C SELECT * FROM p_archives_3 WHERE picsad > 1113 and picsad < 1122

SELECT * FROM p_archives_3 WHERE `picsad between 1113 and 1122 and picsad <> 1113 and picsad <>1122

MySQL一些中重要命令

前言:

  最近在面试的过程中,深感对MySQL一些重要命令的缺失。借着这个机会,补补这块的知识。不让自己只会增删查改,懂一些高级的东西

  • limit 用法
  • order by 用法
  • in 和 between的用法
  • join的用法

 

(一)limit用法

我们看下面的代码:

 1 select id, name from table limit 5, 10

一个简单的limit命令,limit m, n 代表从m+1个开始取n行数据,输出

上面也就是从第六行开始,输出10行。也就是输出6-15行

假设我们有如下表:

数据大概为100W条数据。

 

执行如下命令:

1 select * from BookIndex limit 10, 10;

 

用了0s,并且没有用索引。

在执行如下命令:

1 select * from BookIndex limit 1000000, 10;

同样十条数据,却用了0.31秒。同样是全盘扫描。

下面我用索引优化:

用了0.17秒。 0.31/0.17  大概快了两倍左右吧。

下面再次优化:

0.00s,可以说快的不知一点两点的。

记得用limit一定要用索引,并且如果m(偏移量)过大,先用where筛选一波数据出来在处理。

 

(二)order by用法

oder by 很是简单,而且是默认用了range索引。

默认升序,可以加上desc变为降序。

 

(三)in 和 between的用法

我们可以从explain看出,不管是in还是between都是用了索引。

而且between有一个强大的功能,和limit进行比较的时候。当偏移量较大,但取的数据量较小的时候,用between最为合适

看一下的实验

 

直接0.00s搞定,一点都不含糊。

 

(四)join的用法

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_OOrderNoId_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

 

inner join:

 

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

left join:

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

注意到没有最后一行OrderNo为空

right join:

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

 

后言:

写完后,发觉好累,真的好累。写了两个多小时了,求爸爸让我上热门。

不过对MySQL的一些理解也更加深刻了,尤其是limit的使用。

以上是关于mysql between 的用法的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的WHERE语句中BETWEEN与IN的用法和他们的区别

mysql between 的用法

MySQL BETWEEN 语法

12 BETWEEN的用法

months_between()用法

sql语句条件里between的用法