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;
Oracle 的等效示例:
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;
Oracle 的等效示例:
SELECT * FROM Customers WHERE Country='Germany' FETCH FIRST 3 ROWS ONLY;