zoukankan      html  css  js  c++  java
  • mysql-sql逻辑查询顺序

    1、sql逻辑执行顺序(物理执行顺序可能会因索引而不同)

         SELECT  7  DISTINCT 8

         FROM  1

        JOIN     2

          ON      3

        WHERE  4

       GROUP BY 5

       HAVING  6

       ORDER BY  9

       LIMIT  10

       表t1 join t2 产生虚拟表VT1

       VT1通过on过滤笛卡尔积产生VT2

       VT2通过where过滤产生VT3

       VT3通过group by 分组产生VT4

       VT4通过having过滤产生VT5

       VT5通过select选择指定列产生VT6

       VT6通过distinct过滤重复列产生VT7

       VT7通过order by 排序产生VT8

       VT8通过limit n,m 产生VT9

    2、由于逻辑处理顺序如上述1,则写sql时需要注意以前事项:

    (1)、对null值的情况

         on  null = null :视为false

        group by null :视为相同值

        order by null  :视为相同值,默认为最小值。

    (2) on、where、having区别

       on:

       当存在外连接时,on不能过滤掉保留表中的数据(指定条件过滤保留表中数据后,外连接会将保留表中数据重新添加)

       当不存在外连接时,on能过滤掉指定条件数据

       where:

        无论是否存在外连接,where都能过滤掉指定条件数据

        不能使用聚合函数,因为执行顺序在group by前

        不能使用列的别名,因为执行顺序在select前

       having: 

       不能使用count(1)或者count(*)进行统计,这样可能会将非保留表中的空值字段统计在内导致与预期统计结果不一致

    (3)使用了group by,再使用distinct则没意义

    (4)  limit n,m n:起始行,m:每页行数  

        

  • 相关阅读:
    td-agent 收集日志到kafka的配置
    ctrl+z 以后怎么恢复挂起的进程
    LCD显示GPS时钟[嵌入式系统]
    树莓派轮盘游戏机[嵌入式系统]
    集成测试工具
    未上线的界面
    前端网页内复杂编辑
    用jquery编写的分页插件
    用jquery编写的tab插件
    EAA脚本语言0.2
  • 原文地址:https://www.cnblogs.com/yuefeng123/p/11941004.html
Copyright © 2011-2022 走看看