当前位置: 代码迷 >> SQL >> SQL必知必会 札记 第十五章 插入数据
  详细解决方案

SQL必知必会 札记 第十五章 插入数据

热度:61   发布时间:2016-05-05 10:35:09.0
SQL必知必会 笔记 第十五章 插入数据

15.1数据插入

插入可以用几种方式使用:
(1)插入完整的行
(2)插入行的一部分
(3)插入某些查询的结果

15.1.1插入完整的行

INSERT INTO CustomersVALUES('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代码继续发挥作用,即使表结构发生了变化。

15.1.2插入部分行

使用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)在表定义中给出默认值。这表示如果不给出值,将使用默认值。

15.1.3插入检索出的数据

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_countryFROM CustNew;

不一定要求列名相同。
INSERT SELECT 中SELECT语句可包含WHERE子句过滤插入的数据。
插入多行:INSERT通常只插入一行。为了插入多行,必须执行多个INSERT语句。INSERT SELECT是个例外,它可以用单条INSERT插入多行,不管SELECT语句返回多少行,都将被INSERT插入。

15.2从一个表复制到另一个表

为了将一个表复制到另一个表(在运行中创建的表)。可使用SELECT INTO语句。
INSERT SELECT和SELECTINTO:他们之间的一个重要差别是前者导出数据,而后者导入表。

SELECT *INTO CustCopyFROM Customers;

MySQL和Oracle使用的语法稍有不同

CREATE TABLE CustCopy ASSELECT *FROM Customers;

在使用SELECT INTO时,需要注意:
(1)任何SELECT选项和子句都可以使用,包括WHERE和GROUP BY。
(2)可利用联结从多个表插入数据。
(3)不管从多少个表中检索数据,数据都只能插入到单个表中。

  相关解决方案