SQL语句操作优先级

时间:2017-01-31 08:11:08

标签: mysql sql

我对sql语句中的优先级操作有疑问。例如:

SELECT t1.c2, COUNT(DISTINCT t2.c1) as count_c1 FROM t1 JOIN t2
WHERE t2.c2 > 1 GROUP BY t1.c2 HAVING  count_c1 > 1;

首先应用此查询中的哪个过滤器,最后应用哪个过滤器。据我所知,HAVING中的条件将是最后一个,这意味着服务器生成完整的记录集,然后用count_c1<删除所有行。 1并将结果返回给客户端。 首先是WHERE下的条件,这意味着服务器甚至不会获得t2.c2< 1,但关于DISTINCT和GROUP BY的内容是什么?如果服务器将在GROUP BY之前从相反的情况(第一组GROUP BY和第二组DISTINCT)应用DISTINCT,则结果将不同。我在文档中找不到任何关于此的内容,可能是你帮助我。

3 个答案:

答案 0 :(得分:1)

SQL中的优先级操作如下:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. 选择
  6. ORDER BY
  7. 您已在MVA here

    中了解相关信息

    enter image description here

答案 1 :(得分:0)

Frist,就像Thorsten Kettner所说,你的SQL语法实际上是无效的。其次,

我能够找到(source)的操作顺序如下:

  
      
  • FROM子句(包括JOIN)
  •   
  • WHERE子句
  •   
  • GROUP BY子句
  •   
  • HAVING条款
  •   
  • SELECT条款
  •   
  • ORDER BY子句
  •   

答案 2 :(得分:0)

  1. DBMS可以先加入,然后应用WHERE子句或使用WHERE子句来限制要加入的行。
  2. 聚合。按c2分组,计算过程中的不同c1。你计算不同的c1 per c2。
  3. HAVING子句(因为它处理聚合行)。 MySQL在这里允许使用别名,它不符合标准SQL(因为尚未执行SELECT子句)。
  4. SELECT子句:显示结果。