MySQL - Insert Into Select:初學者的全面指南

您好,未來的數據庫魔法師們!今天,我們將踏上一段令人興奮的旅程,進入MySQL的世界,特別聚焦於強大的 "Insert Into Select" 語句。別擔心你對編程是新手——我會成為你友善的導遊,一步一步解釋一切。所以,來一杯咖啡,我們一起來深入探讨!

MySQL - Insert Into Select

MySQL Insert Into Select 語句

想像一下你正在整理書架。你有一堆新書(我們稱之為我們的源數據),並且你想把它們加入到已經整理好的書架上(我們的目標表)。這正是MySQL中的 "Insert Into Select" 語句所做的事情——它允許我們從一個表中複製數據並將其插入到另一個表中。

基本語法如下:

INSERT INTO 目标表 (列1, 列2, 列3, ...)
SELECT 列1, 列2, 列3, ...
FROM 源表
WHERE 条件;

讓我們分解這個語句:

  • INSERT INTO 目标表:這是我們將數據放入的地方。
  • (列1, 列2, ...):這是我們在目標表中填寫的列。
  • SELECT ...:這是我們獲取數據的地方。
  • FROM 源表:這是我們複製數據的表。
  • WHERE 条件:這是可選的,但它讓我們過濾我們複製的數據。

從一個表將需要的數據插入到另一個表

現在,讓我們動手寫一些真正的代碼!假設我們有兩個表:old_booksnew_arrivals。我們想將所有的奇幻書從 old_books 移動到 new_arrivals

INSERT INTO new_arrivals (标题, 作者, 类型)
SELECT 标题, 作者, 类型
FROM old_books
WHERE 类型 = '奇幻';

在這個例子中:

  • 我們正在插入到 new_arrivals,指定了我們想要填寫的列。
  • 我們從 old_books 選擇相同的列。
  • 我們只選擇類型為 '奇幻' 的書。

這個查詢會將所有奇幻書從 old_books 複製到 new_arrivals。就像神奇地把所有你的奇幻書傳送到一個新書架!

使用 LIMIT 限制插入的行數

有時候,我們不希望一次全部移動。也許我們正在測試,或者我們只有空間放幾本書。這時 LIMIT 就顯得很方便。

INSERT INTO bestsellers (标题, 作者, 销量)
SELECT 标题, 作者, 销量
FROM all_books
WHERE 销量 > 1000000
ORDER BY 销量 DESC
LIMIT 10;

這個查詢:

  • 將數據插入我們的 bestsellers 表。
  • all_books 選擇銷量超過一百萬的書。
  • 按銷量降序排列。
  • 只選擇前10本。

這就像選擇最精華的部分——只有前10名的暢銷書能夠進入我們特別的書架!

從一個表複製所有列到另一個表

有時候,我們想要複製一切——每一個細節。我們也可以做到!讓我們說我們正在歸檔我們整個2022年的銷售數據:

INSERT INTO sales_archive_2022
SELECT *
FROM current_sales
WHERE YEAR(销售日期) = 2022;

在這裡發生了什麼:

  • 我們在 INSERT INTO 部分沒有指定列。
  • 我們使用 SELECT * 選擇所有列。
  • 我們過濾以只包括2022年的銷售。

這就像拍攝你整個2022年書架的快照,並在新的位置精確地重現它。

使用客戶端程序執行 INSERT INTO SELECT

現在,讓我們談論一下我們如何在不離開MySQL的情況下,使用客戶端程序來做這些操作。我會用Python語言給你一個例子,這是一種在數據庫操作中非常流行的語言。

import mysql.connector

# 連接到數據庫
mydb = mysql.connector.connect(
host="localhost",
user="你的用户名",
password="你的密码",
database="你的数据库"
)

mycursor = mydb.cursor()

# 我們的 INSERT INTO SELECT 查詢
sql = """
INSERT INTO new_arrivals (标题, 作者, 类型)
SELECT 标题, 作者, 类型
FROM old_books
WHERE 类型 = '奇幻'
"""

# 執行查詢
mycursor.execute(sql)

# 提交更改
mydb.commit()

print(mycursor.rowcount, "条记录已插入。")

這個腚本:

  1. 連接到你的MySQL數據庫。
  2. 創建一個游標對象與數據庫交互。
  3. 定義我們的 INSERT INTO SELECT 查詢。
  4. 執行查詢。
  5. 提交更改(非常重要!)
  6. 打印出插入的記錄數。

這就像有一個機器人助手,可以為你重新整理書架!

結論

好了,各位!我們已經在MySQL的 "Insert Into Select" 領域中踏上了旅程。從基本概念到實際應用,我們都涵蓋了。記住,熟能生巧,所以不要害怕嘗試這些查詢。

這裡是一個我們討論過的方法的快速參考表:

方法 描述 示例
基本 Insert Into Select 從一個表複製數據到另一個表 INSERT INTO 目标 SELECT * FROM 源
插入特定列 只複製某些列 INSERT INTO 目标 (列1, 列2) SELECT 列1, 列2 FROM 源
有條件的插入 復製符合特定條件的數據 INSERT INTO 目标 SELECT * FROM 源 WHERE 条件
使用 LIMIT 限制插入 復製限定數量的行 INSERT INTO 目标 SELECT * FROM 源 LIMIT 10
插入所有列 不指定列名複製所有列 INSERT INTO 目标 SELECT * FROM 源
使用客戶端程序 從MySQL外部執行 Insert Into Select 參見上面的Python示例

祝您查詢愉快,願您的數據庫總是井然有序且高效!

Credits: Image by storyset