本篇是关于
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;
以上。