typora-copy-images-to: SQL 必知必会
SQL 必知必会 Chapter 15 插入数据
15.1 数据插入
-
INSERT 用来将行插入数据表库
-
插入的方式
- 插入完整的行
- 插入行的一部分
- 插入某些查询的结果
-
插入INSERt 可能需要DBMS特定的安全权限
Insert into Customers
VALUES('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
NULL,
NULL);
# 加入没有值,则应该使用NULL值,各列必须以它们在表定义中出现的次序填充
# INTO 为了保证可移植性,应予以保留
# 这种方法高度依赖于表中列的定义次序
# 更安全的方法如下:
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);
# 好处是,如果表结构变化,insert语句依然能够正常工作
-
不要使用没有明确给出列的INSERT 语句。给出列能使SQL 代码继续
发挥作用,即使表结构发生了变化 -
插入部分行
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');
# 插入时可以省略列,表明省略了两个列及其对应的值
# 插入省略列的条件
# 该列定义允许为NULL值
# 在表定义中给出默认值,如果不给出值,将使用默认值
- 插入检索出的数据
- 使用一条INSERT 语句加上一条SELECT 语句
# 加入想把另一表中的顾客列合并到Customers表中
INSERT INTO Customers(cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country)
SELECT cust_id,
cust_contact,
cust_email,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country
FROM CustNew;
# 切记,不一定要求列名匹配,其实质是使用列的位置
# 可以使用以上命令插入多行,不管select 语句返回多少行,都将插入
15.2 从一个表复制到另一个表
-
要将一个表的内容复制到一个全新的表,使用SELECT INTO
-
INSERT SELECT 与SELECT INTO,它们之间的一个重要差别是前者导出数据,而后者导入数据
CREATE TABLE CustCopy AS
SELECT * FROM Customers;
# 任何SELECT 选项和子句都可以使用,包括WHERE 和GROUP BY
# 可利用联结从多个表插入数据
# 不管从多少个表中检索数据,数据都只能插入到一个表中
- 进行表的复制,SELECT INTO 是试验新SQL 语句前进行表复制的很好工具。先进行复制,可在复制的数据上测试SQL 代码,而不会影响实际的数据
15.3 小结
- 介绍如何将行插入到数据库表中。我们学习了使用INSERT 的几
种方法,为什么要明确使用列名,如何用INSERT SELECT 从其他表中导
入行,如何用SELECT INTO 将行导出到一个新表。下一课将讲述如何使
用UPDATE 和DELETE 进一步操作表数据