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

SQL 四大核心 DML 語句入門:INSERT、SELECT、UPDATE、DELETE 完整詳解

     編輯:關於SqlServer

掌握 INSERT、SELECT、UPDATE、DELETE 四大資料操作語言 (DML) 是使用 SQL 的基石。本文以 Employees 範例表逐步講解語法、資料型別處理、NULL 語意、交易原子性與進階用法。

範例資料表

CREATE TABLE Employees (
    EmpID      INT IDENTITY(1,1) PRIMARY KEY,
    LastName   NVARCHAR(50) NOT NULL,
    FirstName  NVARCHAR(50) NOT NULL,
    BirthDate  DATE NOT NULL,
    City       NVARCHAR(50),
    Level      TINYINT,
    Salary     DECIMAL(10,2)
);

1. INSERT — 新增資料

完整欄位插入

INSERT INTO Employees (LastName, FirstName, BirthDate, City, Level, Salary)
VALUES (N'Smith', N'John', '1980-06-10', N'Los Angeles', 16, 45000.00);
  • 明確列出欄位順序,避免結構變更導致錯誤。
  • 字串、日期用單引號 N'...' (Unicode);數值不加引號。
  • IDENTITY 欄位自動產生,不可指定值(除非 SET IDENTITY_INSERT ON)。

部分欄位插入(其餘用預設值/NULL)

INSERT INTO Employees (LastName, FirstName, BirthDate)
VALUES (N'Jones', N'Davy', '1970-10-10');  -- City, Level, Salary 為 NULL

多筆插入 (SQL 2008+)

INSERT INTO Employees (LastName, FirstName, BirthDate, City, Level, Salary)
VALUES 
    (N'Bunyan', N'Paul', '1970-07-04', N'Boston', 12, 70000),
    (N'John', N'Adams', '1992-01-21', N'Boston', 20, 100000),
    (N'Smith', N'Pocahontas', '1976-04-06', N'Los Angeles', 12, 100000);

交易與原子性

單一 INSERT 為隱含交易:任何欄位違反型別/約束/觸發器錯誤,整筆回滾,不會寫入部分資料。

2. SELECT — 查詢資料

基本語法

SELECT [ALL | DISTINCT] select_list
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC]];

常用範例

-- 全欄位
SELECT * FROM Employees;

-- 指定欄位、別名、條件、排序
SELECT EmpID, LastName + N' ' + FirstName AS FullName, Salary
FROM Employees
WHERE City = N'Boston' AND Salary > 50000
ORDER BY Salary DESC;

-- 聚合與分組
SELECT City, COUNT(*) AS EmpCount, AVG(Salary) AS AvgSalary
FROM Employees
GROUP BY City
HAVING COUNT(*) > 1
ORDER BY AvgSalary DESC;

3. UPDATE — 修改資料

基本語法

UPDATE table_name
SET column1 = expression1, column2 = expression2, ...
[WHERE search_condition];

範例

-- 單筆更新
UPDATE Employees SET Salary = 50000, Level = 17 WHERE EmpID = 1;

-- 批次更新:所有 Boston 員工薪資調漲 5%
UPDATE Employees SET Salary = Salary * 1.05 WHERE City = N'Boston';

-- 子查詢更新:同步其他表資料
UPDATE e SET e.City = d.City
FROM Employees e
JOIN Departments d ON e.DeptID = d.DeptID
WHERE d.Location = N'New York';

關鍵提醒

  • 永遠加 WHERE:無 WHERE 會更新全表,造成災難。
  • 先 SELECT 驗證:用相同 WHERE 先查詢受影響列數與資料,確認無誤再執行 UPDATE。
  • 大量更新分批:超過萬筆建議分批 (如每 5000 筆) 並配合 WAITFOR DELAY 避免長鎖定。

4. DELETE — 刪除資料

基本語法

DELETE FROM table_name [WHERE search_condition];

範例

-- 刪除特定員工
DELETE FROM Employees WHERE EmpID = 999;

-- 刪除離職超過 5 年且薪資為 0 的記錄
DELETE FROM Employees WHERE HireDate < DATEADD(YEAR, -5, GETDATE()) AND Salary = 0;

DELETE vs TRUNCATE TABLE

特性DELETETRUNCATE TABLE
可用 WHERE是否 (全表)
觸發器啟動 AFTER DELETE不啟動
IDENTITY 重置否是 (重種子)
記錄檔空間逐列記錄最小記錄 (釋放頁面)
權限DELETE 權限ALTER TABLE 權限

NULL 處理原則

  • NULL 代表「未知」,非零、非空字串。
  • 比較:WHERE Col = NULL 永遠為 UNKNOWN → 用 WHERE Col IS NULL。
  • 聚合函數自動忽略 NULL(COUNT(*) 計列數,COUNT(Col) 計非 NULL 值)。
  • ISNULL(Col, 0) / COALESCE(Col1, Col2, 0) 處理顯示與運算。

練習建議

  1. 建立 Employees 表並插入 10 筆測試資料。
  2. 嘗試各種 SELECT 組合:篩選、排序、分組、連接。
  3. 執行 UPDATE 前先 SELECT 驗證,觀察 @@ROWCOUNT。
  4. 在交易中測試 DELETE + ROLLBACK 體驗原子性。

四大 DML 是 SQL 的心臟。熟練語法、理解 NULL、善用交易、養成「先查後改」習慣,即能安全高效操作資料。

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