INSERT INTO 插入語句
該INSERT INTO語句用于在表中插入新記錄。
INSERT文法
可以INSERT INTO 用兩種方式編寫語句:
1- 指定要插入的列名和值:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
2-如果要為表的所有列添加值,則無需在 SQL 查詢中指定列名。但是,請確定值的順序與表中的列順序相同。在這裡, INSERT INTO文法如下:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);
我們假設還是有着樣一個Customers表:

INSERT示例
以下 SQL 語句在“Customers”表中插入一條新記錄:
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');
運作顯示如下:
練習:
表中插入一條新記錄。
INSERT INTO Customers
(
CustomerName,
Address,
City,
PostalCode,
Country
)
VALUES
(
'Hekkan Burger',
'Gateveien 15',
'Sandnes',
'4306',
'Norway'
)
;
NULL 空值
具有 NULL 值的字段是沒有值的字段。如果表中的字段是可選的,則可以在不向該字段添加值的情況下插入新記錄或更新記錄。然後,該字段将儲存為 NULL 值。
注意: NULL 值不同于零值或包含空格的字段。具有 NULL 值的字段是在建立記錄期間留白的字段!
如何測試 NULL 值?
無法使用比較運算符(例如 =、< 或 <>)測試 NULL 值。我們将不得不改用IS NULL和 IS NOT NULL運算符。
IS NULL 文法
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
IS NOT NULL 文法
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
我們還是以”Customers”表為例子:
IS NULL 運算符
列出了 "Address"字段中具有 NULL 值的所有客戶:
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;
提示:始終使用 IS NULL 來查找 NULL 值。
IS NOT NULL 運算符
該IS NOT NULL運算符用于測試非空值(NOT NULL 值)。
列出了在 "Address”字段中具有值的所有客戶:
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;
從列為空的Customers位置選擇所有記錄PostalCode。
SELECT * FROM Customers
WHERE PostalCode IS NULL;
UPDATE更新語句
UPDATE語句用于修改表中的現有記錄。
UPDATE 文法:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
注意: 更新表中的記錄時要小心!注意 WHERE語句中的子句UPDATE。該WHERE子句指定應該更新哪些記錄。如果省略該WHERE子句,表中的所有記錄都将被更新!
我們還是以“Customers”表為例:
更新表
更新CustomerID = 1的使用者名字和城市資料
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;
更新過後将會如下:
更新多條記錄
該WHERE子句确定将更新多少條記錄。
将國家為"Mexico"的所有記錄的 ContactName 更新為“Juan”:
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
更新後将會變成:
更新警告!
更新記錄時要小心。如果省略該 WHERE子句,則所有記錄都将被更新!
例如:
UPDATE Customers
SET ContactName='Juan';
則會導緻如下結果:
更新表City中所有記錄的Customers列。
UPDATE Customers
SET City = 'Oslo';
DELETE删除語句
該DELETE語句用于删除表中的現有記錄。
删除文法
DELETE FROM table_name WHERE condition;
注意: 删除表中的記錄時要小心!注意 WHERE語句中的子句 DELETE。該WHERE條款指定應删除哪些記錄。如果省略該WHERE子句,表中的所有記錄都将被删除!
哈哈哈哈,我們還是以“Customers”表為例子如下:
删除示例
從“Customers”表中删除客戶“Alfreds Futterkiste”:
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
于是就變成這樣:
删除所有記錄
可以在不删除表的情況下删除表中的所有行。這意味着表結構、屬性和索引将保持不變
DELETE FROM table_name;
例如:删除“Customers”表中的所有行,但不删除該表:
DELETE FROM Customers;
練習:從Customers表中删除Country值為“挪威”的所有記錄。
DELETE FROM Customers
WHERE Country = 'Norway';
TOP、LIMIT、FETCH FIRST 或 ROWNUM限制子句
SELECT TOP 子句
SELECT TOP子句用于指定要傳回的記錄數。SELECT TOP子句在具有數千條記錄的大表上很有用。傳回大量記錄會影響性能。
注意: 并非所有資料庫系統都支援該 SELECT TOP子句。MySQL 支援LIMIT子句選擇有限數量的記錄,而 Oracle 使用FETCH FIRST n ROWSONLYROWNUM
Server / MS 通路文法:
SELECT TOP number|percent column_name(s)
FROM table_name
WHERE condition;
MySQL 文法:
SELECT column_name(s)
FROM table_name
WHERE condition
LIMIT number;
Oracle 12 文法:
SELECT column_name(s)
FROM table_name
ORDER BY column_name(s)
FETCH FIRST number ROWS ONLY;
比如還是“Customers”表如下
TOP、LIMIT 和 FETCH FIRST示例
從 "Customers表中選擇前三個記錄(用于 SQL Server/MS Access):
SELECT TOP 3 * FROM Customers;
MySQL 的等效示例:
SELECT * FROM Customers
LIMIT 3;
Oracle 的等效示例:
SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;
TOP PERCENT 示例
從"Customers“表中選擇前 50% 的記錄(用于 SQL Server/MS Access):
SELECT TOP 50 PERCENT * FROM Customers;
SELECT * FROM Customers
FETCH FIRST 50 PERCENT ROWS ONLY;
添加 WHERE 條款
從“Customers”表中選擇前三個記錄,其中國家是“Germany”(對于 SQL Server/MS Access):
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';
MySQL 的等效示例
SELECT * FROM Customers
WHERE Country='Germany'
LIMIT 3;
SELECT * FROM Customers
WHERE Country='Germany'
FETCH FIRST 3 ROWS ONLY;