MySQL小结

select语句中的列(非聚合函数列),必须出现在group by子句中。

group by子句中的列,不一定要出现在select语句中。

聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。

where语句中的条件只能是数据库中已经存在的字段。

 SQL语句的执行顺序:

示例SQL:

SELECT * FROM user LEFT JOIN order ON user.id = order.uid

WHERE order.price > 5000

GROUP BY user.name

HAVING count(1) > 8

ORDER BY user.name

LIMIT 0,10

 

 执行顺序:

  1. FROM(将最近的两张表,进行笛卡尔积)---VT1(VT--->virtual table   虚表)
  2. ON(将VT1按照它的条件进行过滤)---VT2
  3. LEFT JOIN(保留左表的记录)---VT3
  4. WHERE(过滤VT3中的记录)--VT4…VTn   (根据where的条件个数来看 一个条件产生一个虚表)
  5. GROUP BY(对VT4的记录进行分组)---VT5
  6. HAVING(对VT5中的记录进行过滤)---VT6
  7. SELECT(对VT6中的记录,选取指定的列)--VT7
  8. ORDER BY(对VT7的记录进行排序)--游标
  9. LIMIT(对排序之后的值进行分页) 

 

WHERE条件执行顺序(影响性能)

不同数据库where条件的执行顺序不同:

1.MySQL:从左到右的执行WHERE条件

2.Oracle:从右到左的执行 WHERE条件

3.postgreSQL:从左到右的执行WHERE条件

因此:

   写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章