第15课 插入数据
本节课介绍如何利用SQL的INSERT
语句将数据插入表中。
数据插入
SQL最常用的语句有四个:SELECT
INSERT
UPDATE
DELETE
。
本节课介绍INSERT
语句。
INSERT
用来将行插入(或添加)到数据库表。插入的方式有三种:
- 插入完整的行;
- 插入行的一部分;
- 插入某些查询的结果。
插入完整行
第一种形式:
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...;
|