INSERT~SELECT (从一个表select内容,insert到另一个表)

本篇是关于
SELECT 表B table B的内容,INSERT到 表A table A 中的SQL 的。

SQL

  • 定义相同的两个table,全件insert
INSERT INTO table_A
SELECT * 
FROM table_B;
  • 指定字段insert
INSERT INTO table_A(
     字段1
    ,字段2
)
SELECT 字段1
      ,字段2
FROM table_B;
  • 指定条件,将select的结果insert
INSERT INTO table_A(
     字段1
    ,字段2
)
SELECT 字段1
      ,字段2
FROM table_B
WHERE 条件;

数据准备

CREATE TABLE test_db.insert_table (
  `id` INT AUTO_INCREMENT NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `age` INT,
  PRIMARY KEY (`id`));
  
CREATE TABLE test_db.insert_table2 (
  `id` INT AUTO_INCREMENT NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  `age` INT,
  PRIMARY KEY (`id`));
  
INSERT INTO test_db.insert_table2 (name,age)
VALUES ('Joey',27), 
('Jack',34), 
('John',52), 
('Ryan',25), 
('May',22);

两个表的当前内容:

mysql> SELECT * FROM test_db.insert_table;
Empty set (0.01 sec)

mysql> SELECT * FROM test_db.insert_table2;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Joey |   27 |
|  2 | Jack |   34 |
|  3 | John |   52 |
|  4 | Ryan |   25 |
|  5 | May  |   22 |
+----+------+------+
5 rows in set (0.00 sec)
  • 执行SQL 例1,
INSERT INTO insert_table
SELECT *
FROM insert_table2; 

执行结果

mysql> SELECT * FROM test_db.insert_table;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Joey |   27 |
|  2 | Jack |   34 |
|  3 | John |   52 |
|  4 | Ryan |   25 |
|  5 | May  |   22 |
+----+------+------+
5 rows in set (0.00 sec)
  • 执行 SQL 例2,
INSERT INTO insert_table (
id,
name
)
SELECT insert_table2.id, 
insert_table2.name
FROM insert_table2;

执行结果

mysql> SELECT * FROM test_db.insert_table;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Joey | NULL |
|  2 | Jack | NULL |
|  3 | John | NULL |
|  4 | Ryan | NULL |
|  5 | May  | NULL |
+----+------+------+
5 rows in set (0.00 sec)
  • 执行SQL 例3,
INSERT INTO insert_table (
name, 
age)
SELECT insert_table2.name, 
insert_table2.age
FROM insert_table2
WHERE insert_table2.age >= 30; 

执行结果,

mysql> SELECT * FROM test_db.insert_table;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Jack |   34 |
|  2 | John |   52 |
+----+------+------+
2 rows in set (0.00 sec)

执行例子,每次insert前可以清空一下表insert_table:
truncate table insert_table;

以上。

发布了26 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Olivia_Vang/article/details/104053716