PostgreSQL修炼之道:从小工到专家. 3.5 其他SQL语句

    xiaoxiao2024-04-05  144

    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;

    相关资源:PostgreSql修炼之道从小工到专家.pdf
    最新回复(0)