› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
leiliang
V2EX  ›  MySQL

SELECT 语句的执行顺序

  •  
  •   leiliang · Jan 11, 2015 · 6106 views
    This topic created in 4287 days ago, the information mentioned may be changed or developed.
    SELECT语句那么多子句,它们的执行顺序是怎么样的?网上看了些资料,说的都不一样,有没有权威点的资料呢?大神们来回答下这个问题吧!
    6 replies  •  2015-01-12 09:51:48 +08:00
    fasling
        1
    fasling  
       Jan 11, 2015   ❤️ 1
    看这个 10个简单步骤,完全理解SQL http://blog.jobbole.com/55086/
    sniper1211
        2
    sniper1211  
       Jan 11, 2015   ❤️ 1
    1. FROM clause
    2. WHERE clause
    3. GROUP BY clause
    4. HAVING clause
    5. SELECT clause
    6. ORDER BY clause
    leiliang
        3
    leiliang  
    OP
       Jan 11, 2015
    @fasling @sniper1211 确定这是权威的顺序吗?
    msg7086
        4
    msg7086  
       Jan 11, 2015   ❤️ 2
    @leiliang 每一步都会依赖上一步的结果。
    我不知道你指的权威是什么意思,但是我觉得这算是比较常识的东西。
    比如第一个FROM,是指定从哪个数据表取数据。
    FROM不在第一个执行,那你去哪取数据来处理?
    比如GROUP BY聚合,首先你要选出数据才能聚合吧,所以必然在WHERE之后。
    比如HAVING聚合筛选,首先你先要聚合吧。
    至于剩下的有一些,则是放在前后都可以的。
    比如ORDER BY语句就可能会在SELECT之前执行。

    SQL标准里可能会写必须按照哪个步骤来执行。
    但是实际上每个数据库在实现的时候都会或多或少夹带些私货的。
    如1楼链接里所提到的。
    「注意:并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。」
    omegaga
        5
    omegaga  
       Jan 12, 2015 via Android   ❤️ 1
    @sniper1211 逻辑上是这样的,不过事实上并不严格,比如where可能会跟from放到一起,像在SQL server里,SELECT * FROM A JOIN B ON A.id = B.id跟SELECT * FROM A, B WHERE A.id = B.id就是等价的
    sniper1211
        6
    sniper1211  
       Jan 12, 2015   ❤️ 1
    @leiliang 主要需要看逻辑上的顺序,还是加深理解。请参考 @fasling 的回答
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2715 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 14:24 · PVG 22:24 · LAX 07:24 · JFK 10:24
    ♥ Do have faith in what you're doing.