3.5 其他SQL语句
3.5.1 INSERT INTO... SELECT语句
使用INSERT INTO... SELECT语句可以把数据从一张表插入到另一张表中,这个语句属于DML语句。
假设建了一张学生表的备份表:student_bak
CREATE TABLE student_bak(no int primary key, student_name varchar(40), age int, class_no int);
可以使用下面的语句把数据备份到下面这张备份表中:
INSERT INTO student_bak SELECT * FROM student;
实际演示如下:
osdba=# INSERT INTO student_bak SELECT * FROM student;
INSERT 0 8
osdba=# SELECT * FROM student_bak;
no | student_name | age | class_no
----+--------------+-----+----------
1 | 张三 | 14 | 1
2 | 吴二 | 15 | 1
3 | 李四 | 13 | 2
4 | 吴三 | 15 | 2
5 | 王二 | 15 | 3
6 | 李三 | 14 | 3
7 | 吴二 | 15 | 4
8 | 张四 | 14 | 4
(8 rows)
3.5.2 UNION语句
可以将从两张表查询出来的数据整合在一个结果集下,如:
SELECT * FROM student WHERE no = 1 UNION SELECT * FROM student_bak where no = 2;
这里的语法比较简单,把两个SQL用“UNION”关键字连接起来就可以了。
结果如下:
osdba=# SELECT * FROM student WHERE no = 1 UNION SELECT * FROM student_bak where no = 2;
no | student_name | age | class_no
----+--------------+-----+----------
1 | 张三 | 14 | 1
2 | 吴二 | 15 | 1
(2 rows)
注意,UNION可以把结果集中相同的两条记录合并成一条:
osdba=# SELECT * FROM student WHERE no = 1 UNION SELECT * FROM student_bak where no = 1;
no | student_name | age | class_no
----+--------------+-----+----------
1 | 张三 | 14 | 1
(1 row)
如果不想合并,请使用UNION ALL,如下:
osdba=# SELECT * FROM student WHERE no = 1 UNION ALL SELECT * FROM student_bak where no = 1;
no | student_name | age | class_no
----+--------------+-----+----------
1 | 张三 | 14 | 1
1 | 张三 | 14 | 1
(2 rows)
3.5.3 TRUNCATE TABLE语句
TRUNCATE TABLE语句的用途是清空表内容。不带WHERE条件子句的DELETE 语句也表示清空表的内容。从执行结果看,两者实现了相同的功能,但两者实现的原理是不一样的。
TRUNCATE TABLE是DDL语句,即数据定义语句,相当于用重新定义一个新表的方法把原先表的内容直接丢弃了,所以TRUNCATE TABLE执行起来很快,而DELETE 是DML语句,可以认为DELETE 是把数据一条一条地删除,若要删除很多行数据,就会比较慢。
如果想把表student_bak中的数据清理掉,则可以使用如下命令:
TRUNCATE TABLE student_bak;