跳到主要內容

🔍 數據庫查詢

數據庫查詢是從數據庫中提取特定信息的強大工具。它們允許用戶根據各種條件過濾、排序和分析數據,將原始數據轉化為有意義的信息。

🧩 理解數據庫查詢

📊 什麼是查詢?

  • 從數據庫請求數據或信息
  • 提取符合特定條件的記錄的方法
  • 對數據庫數據執行計算的工具
  • 同時查看多個相關表格數據的方法

🎯 查詢的目的

  • 從大型數據集中僅檢索所需的數據
  • 回答關於數據的特定問題
  • 執行計算和分析
  • 為報表和表單準備數據
  • 批量更新、添加或刪除記錄

🛠️ 數據庫查詢類型

🔎 選擇查詢

  • 最常見的查詢類型
  • 從一個或多個表格中檢索數據
  • 允許過濾、排序和計算
  • 返回可以查看、打印或導出的記錄集
  • 不改變底層數據

選擇查詢示例:

SELECT FirstName, LastName, Grade
FROM Students
WHERE Grade > 80
ORDER BY LastName ASC;

🔄 動作查詢

📝 更新查詢

  • 批量修改現有記錄
  • 根據指定條件更改字段值
  • 同時影響多個記錄

更新查詢示例:

UPDATE Students
SET Grade = Grade * 1.05
WHERE CourseID = 101;

➕ 追加查詢

  • 將一個表格中的記錄添加到另一個表格
  • 用於合併來自多個來源的數據
  • 可以過濾要追加的記錄

追加查詢示例:

INSERT INTO ArchivedStudents
SELECT * FROM CurrentStudents
WHERE GraduationYear = 2024;

❌ 刪除查詢

  • 刪除符合指定條件的記錄
  • 永久刪除數據(謹慎使用)
  • 通常用於數據清理或歸檔

刪除查詢示例:

DELETE FROM OrderDetails
WHERE OrderDate < '2023-01-01';

🏗️ 創建表格查詢

  • 從查詢結果創建新表格
  • 用於創建數據快照
  • 有助於數據分析和報告

創建表格查詢示例:

SELECT StudentID, FirstName, LastName, AVG(Grade) AS AverageGrade
INTO StudentAverages
FROM Grades
GROUP BY StudentID, FirstName, LastName;

🔄 交叉表查詢

  • 以類似電子表格的格式匯總數據
  • 在行和列的交叉處顯示值
  • 用於數據分析和比較

交叉表查詢示例:

TRANSFORM AVG(Grade)
SELECT StudentName
FROM Grades
GROUP BY StudentName
PIVOT Subject;

📋 查詢創建方法

🖌️ 使用查詢嚮導

  1. 打開數據庫應用程序(例如Microsoft Access)
  2. 選擇「創建查詢」或「查詢嚮導」
  3. 選擇查詢類型(簡單選擇、交叉表等)
  4. 選擇要包含的表格和字段
  5. 指定排序順序和過濾條件
  6. 命名並保存查詢

💻 使用查詢設計視圖

  1. 在設計視圖中創建新查詢
  2. 將表格添加到查詢
  3. 選擇要包含的字段
  4. 設置過濾條件
  5. 指定排序順序
  6. 運行並保存查詢

📝 使用SQL視圖

  1. 創建新查詢
  2. 切換到SQL視圖
  3. 直接編寫SQL語句
  4. 運行並保存查詢

🔍 查詢組件和條件

📊 字段和表格

  • 選擇要包含在結果中的特定字段
  • 使用關係連接多個表格
  • 使用表達式創建計算字段

🔢 條件和運算符

  • 比較運算符:=, <, >, <=, >=, <>
  • 邏輯運算符:AND, OR, NOT
  • 通配符:* (多個字符), ? (單個字符)
  • 範圍運算符:BETWEEN
  • 列表運算符:IN
  • 空值:IS NULL, IS NOT NULL

條件示例:

-- 姓氏以'L'開頭的學生
WHERE LastName LIKE 'L*'

-- 價格在$10到$20之間的產品
WHERE Price BETWEEN 10 AND 20

-- 來自特定城市的訂單
WHERE City IN ('香港', '九龍', '新界')

-- 缺少電話號碼的記錄
WHERE PhoneNumber IS NULL

🔄 排序和分組

  • 排序順序:升序或降序
  • 多級排序:主要、次要等
  • 分組:按共同值聚合記錄
  • HAVING:基於聚合值過濾組

排序和分組示例:

-- 按姓氏然後名字排序
ORDER BY LastName ASC, FirstName ASC

-- 按產品分組銷售並計算總數
SELECT ProductName, SUM(Quantity) AS TotalSold
FROM Sales
GROUP BY ProductName
HAVING SUM(Quantity) > 100

🧮 高級查詢技術

🔄 連接

  • 內部連接:返回兩個表格中具有匹配值的記錄
  • 左連接:返回左表的所有記錄和右表的匹配記錄
  • 右連接:返回右表的所有記錄和左表的匹配記錄
  • 完全連接:當任一表格中有匹配時返回所有記錄

連接查詢示例:

SELECT Students.Name, Classes.ClassName
FROM Students
INNER JOIN Classes ON Students.ClassID = Classes.ClassID;

📊 聚合函數

  • COUNT:記錄數量
  • SUM:值的總和
  • AVG:值的平均值
  • MIN:最小值
  • MAX:最大值

聚合查詢示例:

SELECT Subject, AVG(Grade) AS AverageGrade, 
MIN(Grade) AS LowestGrade,
MAX(Grade) AS HighestGrade
FROM Grades
GROUP BY Subject;

🔄 子查詢

  • 嵌套在其他查詢中的查詢
  • 用於執行需要多個步驟的操作
  • 可以出現在SELECT、FROM或WHERE子句中

子查詢示例:

SELECT StudentName
FROM Students
WHERE StudentID IN
(SELECT StudentID
FROM Grades
WHERE Grade > 90);

🔄 聯合查詢

  • 合併來自多個SELECT語句的結果
  • 默認情況下刪除重複記錄
  • 要求所有SELECT語句中的列兼容

聯合查詢示例:

SELECT Name, 'Student' AS Type FROM Students
UNION
SELECT Name, 'Teacher' AS Type FROM Teachers
ORDER BY Name;

💼 實用查詢示例

📚 學術數據庫

-- 查找數學成績優異的學生
SELECT s.FirstName, s.LastName, g.Grade
FROM Students s
JOIN Grades g ON s.StudentID = g.StudentID
JOIN Subjects sub ON g.SubjectID = sub.SubjectID
WHERE sub.SubjectName = 'Mathematics' AND g.Grade >= 90
ORDER BY g.Grade DESC;

-- 按班級計算平均成績
SELECT c.ClassName, AVG(g.Grade) AS AverageGrade
FROM Classes c
JOIN Students s ON c.ClassID = s.ClassID
JOIN Grades g ON s.StudentID = g.StudentID
GROUP BY c.ClassName
ORDER BY AverageGrade DESC;

🛒 零售數據庫

-- 查找銷量最高的產品
SELECT p.ProductName, SUM(od.Quantity) AS TotalSold
FROM Products p
JOIN OrderDetails od ON p.ProductID = od.ProductID
GROUP BY p.ProductName
ORDER BY TotalSold DESC
LIMIT 10;

-- 計算月度銷售額
SELECT
YEAR(OrderDate) AS Year,
MONTH(OrderDate) AS Month,
SUM(TotalAmount) AS MonthlySales
FROM Orders
GROUP BY YEAR(OrderDate), MONTH(OrderDate)
ORDER BY Year, Month;

🚀 查詢優化提示

⚡ 性能考慮

  • 只選擇必要的字段
  • 對用於過濾和排序的字段使用索引
  • 限制通配符的使用,特別是在搜索詞的開頭
  • 使用特定條件減少結果集
  • 避免不必要的連接

🔍 常見問題故障排除

  • 檢查SQL語句中的語法錯誤
  • 驗證表格和字段名稱
  • 確保正確的連接條件
  • 分部測試複雜查詢
  • 使用查詢分析工具解決性能問題

數據庫查詢是將數據轉化為可操作信息的強大工具。掌握查詢技術可以讓您從數據庫中精確提取所需的信息,支持更好的決策和數據分析。