插入可以用几种方式使用:
(1)插入完整的行
(2)插入行的一部分
(3)插入某些查询的结果
INSERT INTO Customers
VALUES(‘1000000006‘,
‘Toy Land‘,
‘123 Any Street‘,
‘New York‘,
‘NY‘,
‘11111‘,
‘USA‘,
NULL,
NULL);
对每个列必须提供一个值,如果某个列没有值,应该用NULL值。
保证INSERT语句的更安全
INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
VALUES(‘1000000006‘,
‘Toy Land‘,
‘123 Any Street‘,
‘New York‘,
‘NY‘,
‘11111‘,
‘USA‘,
NULL,
NULL);
因为提供了列名,VALUES必须以其指定的次序匹配指定的列名,不一定按各个列出现在实际表中的次序。其优点是,即使表的结构改变,此INSERT语句仍然能正确工作。
总是使用列的列表:一般不要使用没有明确给出列的列表的INSERT语句。使用列的列表能使SQL代码继续发挥作用,即使表结构发生了变化。
使用INSERT的推荐方法是明确给出表的列名。使用这种语法,还可以省略列。
INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
VALUES(‘1000000006‘,
‘Toy Land‘,
‘123 Any Street‘,
‘New York‘,
‘NY‘,
‘11111‘,
‘USA‘);
省略列:如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件:
(1)该列定义为允许NULL值。
(2)在表定义中给出默认值。这表示如果不给出值,将使用默认值。
INSERT可以利用它将一条SELECT语句的结果插入表中。这就是所谓的INSERT SELECT。
INSERT INTO Customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;
不一定要求列名相同。
INSERT SELECT 中SELECT语句可包含WHERE子句过滤插入的数据。
插入多行:INSERT通常只插入一行。为了插入多行,必须执行多个INSERT语句。INSERT SELECT是个例外,它可以用单条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。
为了将一个表复制到另一个表(在运行中创建的表)。可使用SELECT INTO语句。
INSERT SELECT和SELECTINTO:他们之间的一个重要差别是前者导出数据,而后者导入表。
SELECT *
INTO CustCopy
FROM Customers;
MySQL和Oracle使用的语法稍有不同
CREATE TABLE CustCopy AS
SELECT *
FROM Customers;
在使用SELECT INTO时,需要注意:
(1)任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY。
(2)可利用联结从多个表插入数据。
(3)不管从多少个表中检索数据,数据都只能插入到单个表中。
原文地址:http://blog.csdn.net/veno813/article/details/45092173