今天在写程序的时候,做分页查找时无意中,将计算数据库查询数量的语句,放到了limit之中,导致出现了bug。

所以发现以下问题:

select count(1) from table limit 0,20; 可以返回正确的结果

select count(1) from table limit 20,40;返回数量为0

当时还半天没想懂为什么,网友一语点醒:count返回的结果只有一个,你的limit 20,40当然没有结果!

突然警醒,是sql语句的执行顺序问题导致的我的理解错误。所以记录一下sql语句的执行顺序问题。

过滤条件由大到小,以下为自己理解。如有错误,请指正:

1.from sql执行的顺序永远第一个时from,只有拿出数据,才能够进行筛选

2.join,链接查询,将多表中的数据进行联接,才能够形成符合条件的数据

3.on,将符合条件的查询,进行第一次筛选,和join合成,以哪个字段为依据,

4.where,最大的条件筛选,

5.group,分组查询,

6.rollup,所得结果集,进行列聚合

7.HAVING,将第五步所得分组,进一步根据having条件进行过滤,例如数量超过50的分组,故必须在group之后

8.select,是在之前的所得结果集选择相应的列,所以要建立在已经筛选过的数据集合

9.distinct,去重,由于由unikey的原因,如果table存在三个字段作为unikey,select其中的两个字段,这时在select之前distinct去重,那么select所得的字段还会有重复数据,所以只有在select之后,才能真正的去重。

10.orderby,排序

11.limit,所有sql,都是最后才执行limit,他对数据集不进行过滤,只是进行截取。

同时查看了以下count函数,count(*),count(1),count(coloumn)三种的区别:

count(1)效率最快,1不代表任何字段,只是代表一个值,返回计数结果,count(2),count(3)的结果也一样,不代表实际意义;

count(*)效率第二快,只不过执行时,会把*翻译成具体字段,进行查询,多了一个翻译的步骤;

count(coloumn)效率最差,他不只是查询数量,而且计数不准确,他会遍历表中每一个该字段,并过滤掉该字段的无效值,返回计数。

最新文章

  1. PHP读写文件
  2. 第十二届浙江省大学生程序设计大赛-Lunch Time 分类: 比赛 2015-06-26 14:30 5人阅读 评论(0) 收藏
  3. YII2配置多语言
  4. select into 、 insert into select 、create table as select复制表
  5. C# 有关文件路径的操作
  6. [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
  7. 关于MATLAB中any和all的个人理解
  8. mybatis-redis项目分析
  9. 多数据库下activiti的流程定义缓存问题
  10. Linux下MySQL安装和配置
  11. 使用webpack-dev-middleware 和 webpack-hot-middleware 配置一个dev-server
  12. spring boot 2.0 ribbon 负载均衡配置
  13. 初探设计模式5:Spring涉及到的9种设计模式
  14. 从零开始学安全(十)●TCP/IP协议栈
  15. 【转】Closeable, Readable, Flushable, Appendable
  16. pytorch实现style transfer
  17. JAVA死锁的写法
  18. WCF配置后支持通过URL进行http方式调用
  19. 第n+1次考试
  20. jquery.validata1.11怎么支持metadata

热门文章

  1. sencha touch 入门系列 (二)sencha touch 开发准备
  2. Android自学笔记:环境配置
  3. NUGET命令
  4. 通知 Notification
  5. 26、首先通过javascript包的异步加载来学习echarts包的结构
  6. Error : Must specify a primary resource (JAR or python or R file)
  7. 详解log4j2(下) - Async/MongoDB/Flume Appender 按日志级别区分文件输出
  8. android框架整理
  9. 邮件江湖群狼环伺 U-Mail邮件系统防狼有术
  10. swift 代码添加按钮