《SQL必知必会》--插入数据

第15课 插入数据

本节课介绍如何利用SQL的INSERT语句将数据插入表中。

数据插入

SQL最常用的语句有四个:SELECT INSERT UPDATE DELETE

本节课介绍INSERT语句。
INSERT用来将行插入(或添加)到数据库表。插入的方式有三种:

  1. 插入完整的行;
  2. 插入行的一部分;
  3. 插入某些查询的结果。

插入完整行

第一种形式

1
2
3
4
5
6
7
8
9
10
insert into customers
values('1000000006',
'Toy Land',
'123 Any Street',
'New York',
'NY',
'11111',
'USA',
null,
null);

第二种形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);

第一种形式相对简单,但是出错率更高,表次序依赖性强,而且移植性差;
第二种形式相对繁琐,但是安全性高,应成为我们使用的主要形式;
第一种形式中输入的数据必须与表列一一对应,一个也不能少;
第二种形式中输入的数据与指定的列名一一对应,且指定的列名不必与原始表格中的次序相同;

插入部分行

插入部分行的方法,已经给出来了,就是上面的第二种形式。

在插入记录时,有一部分我们可以省略不写,但是其对应的列必须允许NULL值,或者有默认值,若非如此则报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 INTO...VALUES();
INSERT INTO...SELECT...FROM...;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
insert into customers(cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email)
select cust_id,
cust_name,
cust_address,
cust_city,
cust_state,
cust_zip,
cust_country,
cust_contact,
cust_email
from CUSTNEW;

复制表数据

将一个表复制到一章全新的表中:

1
2
3
select *
into CustCopy
from customers;
1
2
create table CustCopy AS
SELECT * from customers;

不同DBMS语法不同;
可以指定具体列复制部分数据,而非使用通配符复制全部数据;
同样也可以对数据进行过滤处理后复制,本语法正常使用WHERE ORDER等操作符;
可以利用联结,从多个表中取数据。

小结

1
2
3
4
5
6
7
8
9
10
11
INSERT INTO table_name VALUES('c1_date','c2_data',,,'c0_date');

INSERT INTO table_name(c1,c2,,,c0) VALUES('c1_date','c2_data',,,'c0_date');

INSERT INTO table_name(c1,c2) VALUES('c1_date','c2_date');

INSERT INTO table0_name(c1,c2) SELECT c1,c2 FROM table1_name;

SELECT * INTO new_table_name FROM table0_name;

CREATE TABLE new_table_name AS SELECT * FROM table_name where... order by...;