不儲存於表中,查詢時即時計算。
CONCAT()SELECT CONCAT(RTRIM(vend_name), ' (', RTRIM(vend_country), ')') AS vend_title
FROM vendors ORDER BY vend_name;
/* 結果:
ACME (USA)
Anvils R Us (USA)
... */
AS賦予計算欄位有意義名稱,供應用層或後續 ORDER BY/GROUP BY 引用。
SELECT prod_id, quantity, item_price,
quantity * item_price AS expanded_price
FROM orderitems WHERE order_num = 20005;
| 函數 | 說明 |
|---|---|
LEFT/RTRIM/LTRIM | 截取/去左右空白 |
LOWER/UPPER | 大小寫轉換 |
SUBSTRING/LOCATE | 子串/定位 |
SOUNDEX | 發音匹配(英文名去重神器) |
-- 發音匹配範例:查找發音像 'Y Lie' 的聯繫人
SELECT cust_name, cust_contact
FROM customers
WHERE SOUNDEX(cust_contact) = SOUNDEX('Y Lie');
-- 命中 'Y Lee'
NOW() / CURDATE() / CURTIME():當前日期時間/日期/時間。DATE_ADD() / DATE_SUB():靈活加減天/月/年。DATEDIFF():兩日期天數差。DATE_FORMAT():格式化輸出,如 '%Y-%m-%d'。SELECT cust_id, order_num
FROM orders
WHERE DATE(order_date) = '2005-09-01';
ABS()、ROUND()、RAND()、SQRT()、MOD() 等標準數學函數。
| 函數 | 說明 |
|---|---|
AVG() | 平均值,忽略 NULL |
COUNT() | 行數,COUNT(*) 含 NULL |
MAX()/MIN() | 極值 |
SUM() | 求和 |
-- 去重平均價
SELECT AVG(DISTINCT prod_price) AS avg_price
FROM products WHERE vend_id = 1003;
GROUP BYSELECT vend_id, COUNT(*) AS num_prods
FROM products GROUP BY vend_id;
SELECT 非彙總欄位必須出現在 GROUP BY 中。NULL 視為獨立一組。WHERE → GROUP BY → HAVING → ORDER BY。HAVING vs WHERE-- 訂單數 >= 2 的客戶
SELECT cust_id, COUNT(*) AS orders
FROM orders GROUP BY cust_id
HAVING COUNT(*) >= 2;
WHERE 過濾行(分組前),HAVING 過濾組(分組後)。
SELECT vend_id, COUNT(*) AS num_prods
FROM products GROUP BY vend_id
ORDER BY num_prods DESC;
下一篇將講解 多表關聯(JOIN)與子查詢 進階技巧。