通常说,GOURP BY 语句是按列来排序并分组数据。但是 GROUP BY 中的排序并不是 SQL 规范所要求的,也就是说我们看到的排序只是 SQL 顺手排好的序,有些时候并不会排好序。所以如果在 GROUP BY 中排序,请使用 ORDER BY 语句。

不要依赖 GROUP BY 排序数据。

SELECT 子句顺序

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY
  7. LIMIT

子查询

子查询总是从内向外处理。

  1. SELECT cust_name,
  2. cust_state,
  3. (SELECT COUNT(*)
  4. FROM orders
  5. WHERE orders.cust_id = customers.cust_id) AS orders
  6. FROM customers
  7. ORDER BY cust_name;

上面这条查询语句,该子查询对检索出的每一行都执行一次,总共检索出 5 行,故该子查询执行了 5 次

WHERE orders.cust_id = customers.cust_id

上面这句是使用了完全限定列名,这种涉及外部查询的子查询叫相关子查询(correlated subqurey)。

使用子查询并不是最优的方法

关系表

关系表的设计就是要保证把信息分解成多个表。一类数据一个表,各表通过某些常用的值互相关联。