ORDER BY、GROUP BY 可引用欄位名、別名或位置(從 1 起算)。
-- 1. 直接引用欄位名
SELECT name, species FROM pet ORDER BY name, species;
-- 2. 使用位置編號
SELECT name, species FROM pet ORDER BY 1, 2;
-- 3. 使用別名
SELECT name AS n, species AS s FROM pet ORDER BY n, s;
結果順序相同,但別名輸出欄位標題為 n、s,利於 CREATE TABLE ... SELECT 重命名欄位:
mysql> CREATE TABLE pet1 SELECT name AS animal, owner AS child FROM pet;
mysql> SELECT * FROM pet1;
+----------+--------+
| animal | child |
+----------+--------+
| Fluffy | Harold |
| Claws | Gwen |
...
GROUP BY、ORDER BY、HAVING:SELECT species, COUNT(*) AS total FROM pet GROUP BY species HAVING total > 1;WHERE total > 1 會報錯 Unknown column 'total'。因 WHERE 執行時別名尚未產生。表別名語法類似欄位別名,自我連接時必須使用別名區分同一表的不同實例。
SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
FROM pet AS p1, pet AS p2
WHERE p1.species = p2.species
AND p1.sex = 'f' AND p2.sex = 'm';
+--------+------+--------+------+---------+
| name | sex | name | sex | species |
+--------+------+--------+------+---------+
| Fluffy | f | Claws | m | cat |
| Buffy | f | Fang | m | dog |
| Buffy | f | Bowser | m | dog |
+--------+------+--------+------+---------+
別名 p1/p2 讓欄位引用清晰對應各自表實例,避免歧義。