SQL之数据分析必问查询顺序

作者: 数据蛙datafrog | 来源:发表于2018-12-15 09:53 被阅读7次

    已经开始数据分析工作的同学,大都知道从数据库中取数、查数是常见的工作内容,而理解查询的顺序之后,能够帮助我们更好排查出现的错误,还能优化SQL的执行速度。对于要面试数据分析的同学,能够回答出查询顺序的问题,是能够大大加分的,且有时还是必问的。

    先看个小问题

    大家先在自己的电脑上运行下类似这句代码

    select
     country
    , sum(area)
    from
     country_data
    where
     sum(area) > 1000
    group by
     country
    

    运行成功了吗?先想下30秒,然后接着看哟(提示:SQL执行顺序)

    SQL执行顺序

    我们通过看一个完整的查询来看下执行顺序。

    --Complete SELECT query
    SELECT DISTINCT column, AGG_FUNC(column_or_expression), …
    FROM mytable
        JOIN another_table
          ON mytable.column = another_table.column
        WHERE constraint_expression
        GROUP BY column
        HAVING constraint_expression
        ORDER BY column ASC/DESC
        LIMIT count OFFSET COUNT;
    

    1.From and JOIN

    首先我们进行查询的时候,肯定是先获得一份数据集的,From语句和JOIN被先执行的,就是为了获得数据集的。

    2.WHERE

    一旦数据集给拿到了,WHERE限制条件会被用到某些行上,并把不满足的行给抛弃掉。并且,这能够用到各种数据类型中,包括numbers、strings,or dates

    where nmbr > 5;
    where strng = 'Skywalker';
    where dte = '2017-01-01';
    

    3.GROUP BY

    WHERE条件限定之后,接下来就是GROUP BY语句了,这一语句会根据某一字段进行分组,并对各个组进行求聚合。现在我们再来想想刚刚提到的代码错在哪里了呢

    select
         country
        , sum(area)
        from
         country_data
        where
         sum(area) > 1000
        group by
         country
    

    想想看,我们先进行的是FROM,紧接着是WHERE,然后才是GROUP BY。所以上面的语句就是错在了WHERE 语句在执行的时候,GROUP BY语句还没有开始,那时聚合值sum(area)还是未知的。那正确的写法呢?还请接着往下看。

    4.HAVING

    having语句在SQL中的主要作用与Where语句作用是相同的,但是having是过滤聚合值,其实上面的正确写法是这样的

    select
      country
      , sum(area)
    from
      country_data
    group by
      country
    having
      sum(area) > 100000
    

    5.SELECT

    在经过上面的执行之后,终于到了select语句,但是别慌,下面还有呢。

    6.DISTINCT

    对于剩下的行,Distinct用来去除重复行,只保留唯一的。

    7.ORDER BY

    此语句用来对select后的结果,进行排序,升序或者是降序。

    8.LIMIT/OFFSET

    用来限定返回的行数

    总结
    执行顺序 语句 功能
    1 from 获取基础数据
    2 where 过滤基础数据
    3 group by 聚合基础数据
    4 having 过滤聚合后的数据
    5 select 返回最终的数据
    6 distinct 去重最终的数据
    7 order by 排序最终的数据
    8 limit/offset 限定最终数据的返回行
    参考链接

    1.SQL Query Order of Execution
    2.SQL Lesson 12: Order of execution of a Query

    相关文章

      网友评论

      本文标题:SQL之数据分析必问查询顺序

      本文链接:https://www.haomeiwen.com/subject/dvpihqtx.html