通常说,GOURP BY
语句是按列来排序并分组数据。但是 GROUP BY
中的排序并不是 SQL 规范所要求的,也就是说我们看到的排序只是 SQL 顺手排好的序,有些时候并不会排好序。所以如果在 GROUP BY
中排序,请使用 ORDER BY
语句。
不要依赖
GROUP BY
排序数据。
SELECT 子句顺序
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
子查询
子查询总是从内向外处理。
SELECT cust_name,
cust_state,
(SELECT COUNT(*)
FROM orders
WHERE orders.cust_id = customers.cust_id) AS orders
FROM customers
ORDER BY cust_name;
上面这条查询语句,该子查询对检索出的每一行都执行一次,总共检索出 5 行,故该子查询执行了 5 次。
WHERE orders.cust_id = customers.cust_id
上面这句是使用了完全限定列名,这种涉及外部查询的子查询叫相关子查询(correlated subqurey)。
使用子查询并不是最优的方法
关系表
关系表的设计就是要保证把信息分解成多个表。一类数据一个表,各表通过某些常用的值互相关联。