购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 其他SQL语句

本节将介绍一些其他的常用SQL,如INSERT...SELECT语句、UNION语句、TRUNCATE语句等。

3.5.1 INSERT...SELECT语句

使用INSERT...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语句

使用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语句是把数据一条一条地删除,所以DELETE语句删除多行数据时执行起来比较慢。

如果想把student_bak表中的数据清除,可以使用如下命令: aJRiu3o0CUjQg2n8DpceUnWUYJ6tvrQCflqI9Ih1ZQLoSdbOjQ8sI37IfxO0aP+t


TRUNCATE TABLE student_bak;

点击中间区域
呼出菜单
上一章
目录
下一章
×