跳到主要內容

🔍 解釋簡單SQL

SQL(結構化查詢語言)是與關係型數據庫交互的標準語言。了解如何解釋SQL語句對於有效地使用數據庫系統和分析數據至關重要。

🧩 SQL基礎

📊 什麼是SQL?

  • 管理關係型數據庫的標準語言
  • 用於創建、讀取、更新和刪除數據庫記錄
  • 允許複雜的數據操作和分析
  • 由簡單的類似英語的語句組成
  • 適用於不同的數據庫管理系統

🎯 SQL類別

  • DDL(數據定義語言):CREATE, ALTER, DROP
  • DML(數據操作語言):SELECT, INSERT, UPDATE, DELETE
  • DCL(數據控制語言):GRANT, REVOKE
  • TCL(事務控制語言):COMMIT, ROLLBACK

📝 基本SQL語句

🔍 SELECT語句

SELECT語句用於從數據庫檢索數據。

基本語法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

解釋:

  • SELECT column1, column2, ...:指定要檢索的列
  • FROM table_name:指示要查詢的表格
  • WHERE condition:根據條件過濾記錄

示例:

-- 從Students表格檢索所有列
SELECT * FROM Students;

-- 帶條件檢索特定列
SELECT FirstName, LastName, Grade
FROM Students
WHERE Grade > 80;

➕ INSERT語句

INSERT語句向表格添加新記錄。

基本語法:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

解釋:

  • INSERT INTO table_name:指定目標表格
  • (column1, column2, ...):列出要插入數據的列
  • VALUES (value1, value2, ...):提供要插入的值

示例:

-- 插入新學生記錄
INSERT INTO Students (StudentID, FirstName, LastName, Grade)
VALUES (101, 'John', 'Wong', 85);

-- 插入多條記錄
INSERT INTO Classes (ClassID, ClassName)
VALUES (1, '5A'), (2, '5B'), (3, '5C');

🔄 UPDATE語句

UPDATE語句修改現有記錄。

基本語法:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

解釋:

  • UPDATE table_name:指定要更新的表格
  • SET column1 = value1, ...:定義列的新值
  • WHERE condition:確定要更新的記錄

示例:

-- 更新學生成績
UPDATE Students
SET Grade = 90
WHERE StudentID = 101;

-- 更新多個字段
UPDATE Teachers
SET Department = 'Science', Room = 'B201'
WHERE TeacherID = 15;

❌ DELETE語句

DELETE語句從表格中刪除記錄。

基本語法:

DELETE FROM table_name
WHERE condition;

解釋:

  • DELETE FROM table_name:指定要從中刪除的表格
  • WHERE condition:確定要刪除的記錄

示例:

-- 刪除特定學生記錄
DELETE FROM Students
WHERE StudentID = 101;

-- 刪除多條記錄
DELETE FROM Enrollments
WHERE CourseID = 5 AND Status = 'Cancelled';

🔍 SQL子句和運算符

🔢 WHERE子句

根據指定條件過濾記錄。

常見運算符:

  • 等於:=
  • 不等於:NOT EQUAL
  • 大於:>
  • 小於:<
  • 大於等於:>=
  • 小於等於:<=
  • BETWEEN:在範圍內
  • LIKE:使用通配符進行模式匹配
  • IN:匹配列表中的任何值
  • IS NULL:是空值

示例:

-- 等於
SELECT * FROM Products WHERE Price = 10.99;

-- 大於
SELECT * FROM Students WHERE Age > 15;

-- 在範圍內
SELECT * FROM Orders WHERE OrderDate BETWEEN '2025-01-01' AND '2025-03-31';

-- 模式匹配(以'L'開頭的姓氏)
SELECT * FROM Students WHERE LastName LIKE 'L%';

-- 在列表中
SELECT * FROM Products WHERE Category IN ('Books', 'Electronics', 'Games');

-- 空值
SELECT * FROM Customers WHERE Phone IS NULL;

🔄 ORDER BY子句

對結果集進行排序。

語法:

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

示例:

-- 按姓氏升序排序(默認)
SELECT * FROM Students ORDER BY LastName;

-- 按成績降序排序
SELECT * FROM Students ORDER BY Grade DESC;

-- 多級排序
SELECT * FROM Students ORDER BY Grade DESC, FirstName ASC;

🔢 LIMIT子句

限制返回的記錄數量。

語法:

SELECT column1, column2, ...
FROM table_name
LIMIT number;

示例:

-- 獲取成績最高的10名學生
SELECT * FROM Students
ORDER BY Grade DESC
LIMIT 10;

🧮 聚合函數

對數據執行計算。

常見函數:

  • COUNT():計算行數
  • SUM():計算值的總和
  • AVG():計算值的平均值
  • MIN():查找最小值
  • MAX():查找最大值

示例:

-- 計算學生總數
SELECT COUNT(*) AS TotalStudents FROM Students;

-- 計算平均成績
SELECT AVG(Grade) AS AverageGrade FROM Grades WHERE Subject = 'Mathematics';

-- 查找最高和最低價格
SELECT MIN(Price) AS LowestPrice, MAX(Price) AS HighestPrice FROM Products;

🔄 GROUP BY子句

將具有相同值的行分組。

語法:

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;

示例:

-- 計算每個班級的學生數量
SELECT ClassID, COUNT(*) AS StudentCount
FROM Students
GROUP BY ClassID;

-- 按科目計算平均成績
SELECT Subject, AVG(Grade) AS AverageGrade
FROM Grades
GROUP BY Subject
ORDER BY AverageGrade DESC;

🔍 HAVING子句

根據指定條件過濾分組。

語法:

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

示例:

-- 查找平均成績高於80的科目
SELECT Subject, AVG(Grade) AS AverageGrade
FROM Grades
GROUP BY Subject
HAVING AVG(Grade) > 80;

-- 查找超過30名學生的班級
SELECT ClassID, COUNT(*) AS StudentCount
FROM Students
GROUP BY ClassID
HAVING COUNT(*) > 30;

🔄 連接表格

🔗 INNER JOIN

返回兩個表格中具有匹配值的記錄。

語法:

SELECT columns
FROM table1
INNER JOIN table2 ON table1.column = table2.column;

示例:

-- 將學生與其班級連接
SELECT Students.FirstName, Students.LastName, Classes.ClassName
FROM Students
INNER JOIN Classes ON Students.ClassID = Classes.ClassID;

👈 LEFT JOIN

返回左表的所有記錄和右表的匹配記錄。

語法:

SELECT columns
FROM table1
LEFT JOIN table2 ON table1.column = table2.column;

示例:

-- 查找所有學生及其成績(如果有)
SELECT Students.FirstName, Students.LastName, Grades.Subject, Grades.Grade
FROM Students
LEFT JOIN Grades ON Students.StudentID = Grades.StudentID;

👉 RIGHT JOIN

返回右表的所有記錄和左表的匹配記錄。

語法:

SELECT columns
FROM table1
RIGHT JOIN table2 ON table1.column = table2.column;

示例:

-- 查找所有課程及已註冊的學生(如果有)
SELECT Courses.CourseName, Students.FirstName, Students.LastName
FROM Enrollments
RIGHT JOIN Courses ON Enrollments.CourseID = Courses.CourseID
LEFT JOIN Students ON Enrollments.StudentID = Students.StudentID;

💼 實用SQL解釋示例

📚 學校數據庫查詢

學生註冊查詢:

SELECT s.StudentID, s.FirstName, s.LastName, c.CourseName
FROM Students s
JOIN Enrollments e ON s.StudentID = e.StudentID
JOIN Courses c ON e.CourseID = c.CourseID
WHERE c.Department = 'Science'
ORDER BY s.LastName, s.FirstName;

解釋:

  • 檢索學生ID、姓名和課程名稱
  • 連接三個表格:Students、Enrollments和Courses
  • 僅顯示科學部門的課程
  • 按學生姓氏、名字按字母順序排序結果

成績分析查詢:

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
WHERE g.Subject = 'Mathematics'
GROUP BY c.ClassName
HAVING AVG(g.Grade) > 75
ORDER BY AverageGrade DESC;

解釋:

  • 計算每個班級的數學平均成績
  • 連接Classes、Students和Grades表格
  • 按班級名稱分組結果
  • 僅顯示平均成績高於75的班級
  • 從高到低按平均成績排序結果

🛒 零售數據庫查詢

銷售分析查詢:

SELECT 
p.ProductName,
c.CategoryName,
SUM(od.Quantity) AS TotalSold,
SUM(od.Quantity * od.UnitPrice) AS Revenue
FROM Products p
JOIN Categories c ON p.CategoryID = c.CategoryID
JOIN OrderDetails od ON p.ProductID = od.ProductID
JOIN Orders o ON od.OrderID = o.OrderID
WHERE o.OrderDate BETWEEN '2025-01-01' AND '2025-03-31'
GROUP BY p.ProductName, c.CategoryName
ORDER BY Revenue DESC
LIMIT 10;

解釋:

  • 分析2025年第一季度的產品銷售
  • 連接Products、Categories、OrderDetails和Orders表格
  • 計算每個產品的總銷售數量和收入
  • 按產品和類別名稱分組
  • 按收入降序排序
  • 僅顯示收入最高的前10個產品

🚀 SQL解釋技巧

📝 逐步方法

  1. 識別主要SQL語句類型(SELECT、INSERT、UPDATE、DELETE)
  2. 確定涉及哪些表格
  3. 了解正在選擇或修改的列
  4. 分析過濾條件(WHERE子句)
  5. 注意結果的任何排序、分組或限制
  6. 識別表格之間的連接及其關係
  7. 了解任何計算或聚合

🔍 常見解釋挑戰

  • 跨多個表格的複雜連接
  • 嵌套子查詢
  • 與分組結合的聚合函數
  • WHERE子句中的複雜條件邏輯
  • 理解WHERE和HAVING之間的區別

了解如何解釋SQL語句是使用數據庫的寶貴技能。它使您能夠分析現有查詢,根據需要修改它們,並創建新查詢以從數據中提取有意義的信息。