SQL INSERT 语句

时间:2018-11-15 17:14:17  来源:igfitidea点击:

SQL INSERT–将一行或多行数据插入表中。

在本教程中,我们将学习如何使用SQL INSERT语句将数据插入表中。

下面说明插入单个行到现有表中的INSERT语句。

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

要将行插入表中,需要指定三项内容:
首先,是表,要在insert INTO子句中插入新行的表。
其次是指定表的列,用逗号分隔并用括号括起来。
第三是values子句中的值列表,也使用括号包围且用逗号进行分隔。

数据列列表的元素数必须与值列表的元素数相同,否则数据库引擎将发出错误。

以下INSERT语句将将一个新行插入shippers表:

INSERT INTO shippers(companyname, phone)
VALUES ('Alliance  Shippers','1-800-222-0451');

VALUES子句中指定了两个常量'Alliance Shippers'和'1-800-222-0451'。
数据库引擎将会将它们分别插入companyname和phone列中。

执行语句后,数据库服务器将返回一条消息,显示受影响的行数。
在这种情况下,我们会收到一条消息“1 row infected”(受影响的一行)通知您已成功插入新行。

注意,我们没有在列列表中指定shipperID列,因为shipperID列是一个自动递增列,每当向表中插入新行时,数据库引擎就会自动为它生成下一个序列。

为了编写更少的代码,SQL提供了INSERT语句的较短形式,如下所示:

INSERT INTO table
VALUES(value1,value2,...)

在这种形式中,值列表的顺序必须与表中所有列的顺序相同。如果使用这种形式的INSERT语句,则必须为除了自动递增列之外的所有列提供值。

不过在INSERT语句中使用列名是一种很好的做法,可以使代码更易于维护。

下面的INSERT语句等同于上面的语句:

INSERT INTO shippers
VALUES ('Alliance  Shippers','1-800-222-0451');

SQL INSERT语句–向表中插入多行

INSERT语句还允许您使用单个语句将多行插入到表中,如下所示:

INSERT INTO table_name(column1,column2…)
VALUES (value1,value2,…),
       (value1,value2,…),
…

在这种形式的INSERT语句中,您需要提供多个值列表,每个列表用逗号分隔。

以下INSERT语句将两行插入shippers表:

INSERT INTO shippers(companyName,phone)
VALUES ('UPS','1-800-782-7892'),
       ('DHL','1-800-225-5345')

SQL INSERT语句-复制表的数据

您可以使用SELECT语句从另一个表中选择值并将它们提供给INSERT语句,而不是指定值列表。
这样我们就可以从一个表将数据复制到另一个表。

以下语句说明如何将数据从另一个表another_table复制到表table:

INSERT INTO table(column1, column2,...)
SELECT 
     column1, column2,...
FROM 
     another_table
WHERE 
     condition

SELECT子句中的列名列表必须与INSERT in to子句中的列名列表相对应。如果只想复制部分数据,则需要在WHERE子句中指定条件。

假设您有一个名为shippers_tmp的临时表,其结构与shippers表相同。
要将数据从shippers表复制到shippers_tmp表,请使用以下语句:

INSERT INTO shippers_tmp (shipperid,name,phone)
SELECT 
    shipperid, companyName, phone
FROM 
    shippers