首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL SELECT 進階查詢技巧(一):欄位別名、表別名與自我連接

     編輯:MySQL 綜合教學

欄位別名

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(ANSI SQL 標準):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 讓欄位引用清晰對應各自表實例,避免歧義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved