第三篇涵蓋區間統計、條件群組、UPDATE 字串陷阱、CASE 表達式轉碼、BETWEEN 篩選、COUNT(DISTINCT) 去重計數、薪資調整 DML、極值查詢與多表聯結實戰。
SELECT COUNT(*) AS headcount
FROM employee
WHERE salary BETWEEN 4000 AND 6000;
SELECT dept, AVG(salary) AS avg_salary
FROM employee
WHERE addr LIKE '上海市%'
GROUP BY dept;
-- ❌ 錯誤寫法:SET 子句不能用 LIKE
UPDATE employee
SET addr LIKE '北京市'
WHERE addr LIKE '上海市%';
-- ✅ 正確寫法:直接指定新值
UPDATE employee
SET addr = '北京市'
WHERE addr LIKE '上海市%';
提醒:SET col = 值 後面接具體值,不可使用 LIKE、IN 等述詞。
SELECT emp_no, emp_name, dept
FROM employee
WHERE sex = 'F'
AND dept IN ('業務', '會計');
SELECT prod_id, SUM(qty * unit_price) AS total_sales
FROM sale_item
GROUP BY prod_id
ORDER BY total_sales DESC;
SELECT cust_id, cust_name, addr
FROM customer
WHERE cust_id BETWEEN 'C0001' AND 'C0004';
注意:字串 BETWEEN 依照編碼順序比較,確認編碼一致(如皆為大寫)才能正確運作。
SELECT COUNT(DISTINCT prod_id) AS distinct_product_count
FROM sale_item;
UPDATE employee
SET salary = salary * 1.03
WHERE dept = '業務';
SELECT *
FROM employee
WHERE salary = (SELECT MIN(salary) FROM employee);
SELECT
a.cust_id,
b.tot_amt,
b.order_date,
a.tel_no
FROM customer a
JOIN sales b ON a.cust_id = b.cust_id
WHERE a.cust_name = '客戶丙';
優化:若 cust_name 非唯一,建議改用 cust_id 精確聯結。
UPDATE ... SET col = 值 切記不可寫成 SET col LIKE 值。CASE 表達式在 SELECT 清單中可將代碼轉換為可讀文字(如性別 M/F → 男/女)。COUNT(DISTINCT col) 是去重計數的標準寫法。FETCH FIRST 1 ROW ONLY 配合 ORDER BY。