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

DB2 必會常用 SQL 語句精選(一)—— 基礎查詢、日期處理、群組統計與子查詢入門

     編輯:DB2 教學

前言

系列首篇從最基礎的欄位投影、空值處理、日期格式化、子查詢、群組彙總、多表聯結切入,建立扎實的 DB2 SQL 基礎。

1. 員工編號、姓名、部門、出生日期(空值顯示「日期不詳」,依部門排序)

SELECT 
  emp_no,
  emp_name,
  dept,
  COALESCE(VARCHAR_FORMAT(birthday, 'YYYY-MM-DD'), '日期不詳') AS birthday
FROM employee
ORDER BY dept;

修正:原文使用 SQL Server 的 ISNULL(CONVERT(...)),DB2 標準寫法為 COALESCE(VARCHAR_FORMAT(...)) 或 IFNULL。

2. 與「喻自強」同部門的其他員工資料

SELECT emp_no, emp_name, dept, title
FROM employee
WHERE emp_name <> '喻自強'
  AND dept IN (
    SELECT dept FROM employee WHERE emp_name = '喻自強'
  );

替代寫法:JOIN (SELECT dept FROM employee WHERE emp_name='喻自強') t USING (dept)。

3. 各部門總薪資彙總

SELECT dept, SUM(salary) AS total_salary
FROM employee
GROUP BY dept;

4. 查詢「14吋顯示器」的銷售明細(編號、數量、單價、金額)

SELECT 
  si.prod_id,
  si.qty,
  si.unit_price,
  si.qty * si.unit_price AS total_price
FROM sale_item si
JOIN product p ON si.prod_id = p.prod_id
WHERE p.prod_name = '14吋顯示器';

5. 銷售明細表按產品彙總:各產品總銷量與總金額

SELECT 
  prod_id,
  SUM(qty) AS total_qty,
  SUM(qty * unit_price) AS total_price
FROM sale_item
GROUP BY prod_id;

6. 統計各客戶 1996 年訂單總金額(日期擷取年份)

SELECT cust_id, SUM(tot_amt) AS total_amt
FROM sales
WHERE YEAR(order_date) = 1996  -- DB2 可用 YEAR()、EXTRACT(YEAR FROM ...)
GROUP BY cust_id;

修正:原文 CONVERT(char(4), order_date, 120) 為 SQL Server 語法,DB2 請用 YEAR() 或 EXTRACT。

7. 有銷售記錄的客戶:編號、名稱、訂單總額

SELECT 
  c.cust_id,
  c.cust_name,
  SUM(s.tot_amt) AS total_amt
FROM customer c
JOIN sales s ON c.cust_id = s.cust_id
GROUP BY c.cust_id, c.cust_name;

8. 有 1997 年銷售記錄的客戶:編號、名稱、訂單總額

SELECT 
  c.cust_id,
  c.cust_name,
  SUM(s.tot_amt) AS total_amt
FROM customer c
JOIN sales s ON c.cust_id = s.cust_id
WHERE YEAR(s.order_date) = 1997
GROUP BY c.cust_id, c.cust_name;

9. 單筆金額最大的銷售記錄

SELECT order_no, cust_id, sale_id, tot_amt
FROM sales
WHERE tot_amt = (SELECT MAX(tot_amt) FROM sales);

10. 至少有 3 筆銷售記錄的業務員姓名與銷售日期

SELECT e.emp_name, s.order_date
FROM employee e
JOIN sales s ON e.emp_no = s.sale_id
WHERE e.emp_no IN (
  SELECT sale_id
  FROM sales
  GROUP BY sale_id
  HAVING COUNT(*) >= 3
)
ORDER BY e.emp_name;

小結

  • 空值處理:COALESCE/IFNULL 取代 ISNULL。
  • 日期擷取:YEAR()/MONTH()/DAY() 或 EXTRACT,勿用 CONVERT。
  • 日期格式化:VARCHAR_FORMAT(date, 'YYYY-MM-DD')。
  • GROUP BY 欄位必須包含 SELECT 清單中所有非彙總欄位。
  • 子查詢配合 IN/=/> ALL 解決「極值、集合比較」類問題。

掌握這 10 題基礎語句,後續進階主題(視窗函數、CTE、遞迴查詢、效能調校)才能順利銜接。建議在測試環境逐一執行,觀察執行計畫與結果集差異。

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