SQL积累 复制一个表数据到另一个表 SELECT INTO -- INSERT INTO ... SELECT

创建一个新表并复制另一个表的结构和数据到这张表

CREATE TABLE 新建的表名
AS
SELECT * FROM  已经存在的表的表名

其中 AS 可以省略,需要复制指定列结构和数据的时候可以将 * 切换为具体的列名,与一般的 SELECT 查询指定字段写法一致。

SELECT INTO 复制一个表数据到另一张表

(MYSQL 不支持该写法,但支持INSERT INTO … SELECT)

语法示例

  1. 复制所有列数据(可以当作备份操作)
SELECT * INTO 新表表名 FROM 源表表名;
  1. 复制指定列数据
SELECT name, sex INTO 新表表名 FROM 源表表名;
  1. 复制源表指定条件的数据
SELECT * INTO 新表表名 FROM 源表表名 WHERE 源表需要符合的条件;

条件就是一般的 某个字段等于某某某 等条件。

  1. 复制多个表的数据到一张表内
SELECT 源表表名.源表字段1, 源表2表名.字段1, 源表2表名.源表2字段2
	INTO 新表表名
FROM 源表表名
LEFT JOIN 源表2表名
	ON 源表表名.id=源表2表名.pid;
  1. 使用 SELECT INTO 创建一个新的空表。只需添加使查询没有数据返回的 WHERE 子句即可,例如:
SELECT * INTO 新表表名 FROM 源表表名 WHERE 0=1;

因为 0=1 永不成立,所以无数据返回,则只复制表结构,创建空表。

INSERT INTO … SELECT 从一个表复制数据,把数据插入到一个已存在的表中

  1. 复制一个表的所有数据到另一个已存在的表
INSERT INTO table2 SELECT * FROM table1;
  1. 复制指定的列数据到另一个已存在的表中
INSERT INTO table2 (column_name(s)) SELECT column_name(s) FROM table1;

示例:

INSERT INTO table2 (name, sex) SELECT wname, sex FROM table1;

添加条件则如下示例:

INSERT INTO table2 (name, sex) SELECT wname, sex FROM table1 WHERE id=10;

区分

select into from 和 insert into select 都可以用来复制表

主要区别为:
select into from 要求目标表不存在,因为在插入时会自动创建
insert into select from 要求目标表已存在

  1. 复制表结构及其数据:
    create table table_name_new as select * from table_name_old
  2. 只复制表结构:
    create table table_name_new as select * from table_name_old where 1=2;
    或者:
    create table table_name_new like table_name_old
  3. 只复制表数据:
    如果两个表结构一样:

insert into table_name_new select * from table_name_old
如果两个表结构不一样:

insert into table_name_new(column1,column2…) select column1,column2… from table_name_old

部分总结来源于各大学习网站

你可能感兴趣的:(数据库,sql)