MySQL中的INSERT INTO SELECT查询关联语句

在MySQL中,INSERT INTO SELECT语句是一种非常有用的查询语句,可以将一个表的数据插入到另一个表中。这种查询关联语句可以大大简化开发人员的工作,提高数据库操作的效率。本文将详细介绍INSERT INTO SELECT语句的用法,并提供代码示例说明。

INSERT INTO SELECT语句的基本语法

INSERT INTO SELECT语句的基本语法如下:

INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;

其中,table2是目标表,table1是源表。column1, column2, column3等是目标表和源表中要插入的列名。SELECT子句用于从源表中选择要插入的数据,可以使用WHERE子句来指定插入的条件。

INSERT INTO SELECT语句的应用场景

INSERT INTO SELECT语句在许多场景中都非常有用。下面是一些常见的应用场景:

  • 复制表的数据到另一个表
  • 合并两个表的数据
  • 从一个表中提取特定条件的数据并插入到另一个表中
  • 从一个表中提取和计算数据,然后插入到另一个表中

接下来,我们将通过具体的代码示例来说明这些应用场景。

复制表的数据到另一个表

假设我们有一个名为customers的表,包含了客户的信息,我们想要将其中的一部分数据复制到另一个名为new_customers的表中。

CREATE TABLE customers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

INSERT INTO customers (name, email)
VALUES ('John Doe', 'john@example.com'),
       ('Jane Smith', 'jane@example.com'),
       ('Mike Wilson', 'mike@example.com'),
       ('Lisa Johnson', 'lisa@example.com');

现在,我们使用INSERT INTO SELECT语句将customers表中的数据复制到new_customers表中:

CREATE TABLE new_customers (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

INSERT INTO new_customers (name, email)
SELECT name, email
FROM customers;

通过以上代码,我们可以将customers表中的所有数据复制到new_customers表中。

合并两个表的数据

假设我们有两个表ordersnew_orders,分别存储了订单的信息。我们想要将这两个表中的订单信息合并到一个新的表all_orders中。

CREATE TABLE orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
);

CREATE TABLE new_orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
);

INSERT INTO orders (customer_id, amount)
VALUES (1, 100.00),
       (2, 200.00),
       (3, 150.00);

INSERT INTO new_orders (customer_id, amount)
VALUES (4, 300.00),
       (5, 250.00);

现在,我们使用INSERT INTO SELECT语句将orders表和new_orders表中的数据合并到all_orders表中:

CREATE TABLE all_orders (
    id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL
);

INSERT INTO all_orders (customer_id, amount)
SELECT customer_id, amount
FROM orders
UNION
SELECT customer_id, amount
FROM new_orders;

通过以上代码,我们可以将orders表和new_orders表中的订单信息合并到all_orders表中。

从一个表中提取特定条件的数据并插入到另一个表中

假设我们有一个名为products的表,存储了不同产品的信息。我们想要从这个表中提取出所有价格低于100的产品,并将它们插入到另一个名为cheap_products的表中。

CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DEC