更新於 2024/08/08閱讀時間約 5 分鐘

SQL語法修改資料庫 - INSERT(插入)

    ※ 把record加到table有兩種方式:

    • VALUES

    • SELECT

    ※ 語法

    • INSERT INTO VALUES 語法:
    raw-image
    1. Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。
    2. INSERT INTO 語法用來指定要插入資料的表格。
    3. 需要提供一個欄位列表(column list)和一個值列表(value list)。
    4. 語法執行完畢後,會將一個新的記錄插入到指定的表格中。
    5. 可以一次插入多個記錄,只需用逗號(,)分隔不同的值列表。
    • INSERT INTO SELECT 語法:

    INSERT INTO SELECT 語法在實務中經常用來創建總結表格(summary table),特別是當需要結合不同的表格時。使用 JOIN 語法可以將多個表格中的數據結合起來,然後使用 INSERT INTO SELECT 將這些數據插入到新的表格中。

    INSERT INTO SELECT 語法允許我們將一個查詢結果插入到另一個表格中。這個語法的作用類似於INSERT INTO VALUES,但它使用SELECT查詢來獲取要插入的數據。

    INSERT INTO table_name(colum_list)
    SELECT
    select_list
    FROM
    another_table
    WHERE
    condition

    說明

    1. INSERT INTO table_name (column_list): 指定要插入數據的目標表格和欄位列表。
    2. SELECT select_list FROM another_table WHERE condition: 執行SELECT查詢,從另一個表格中選擇數據,並根據條件過濾數據。

    ※ 實例

    SUMMARY(計算每個歌單的歌數⽬)

    // WITH AS(…)是一個 CTE,用來計算每個歌單中的歌曲數量。
    WITH list_id_to_song_cnt AS (
    SELECT list_id, COUNT(song_name) AS COUNT // 從 song 表中選擇 list_id 和歌曲數量。
    FROM song // 資料來源是 song 表。
    GROUP BY list_id // 根據 list_id 分組,計算每個歌單中的歌曲數量。
    )

    // 將計算結果插入到 list_with_song_cnt 表中。
    INSERT INTO list_with_song_cnt(list_id, list_name, user_id, description, count)

    // 從 list 表中選擇歌單ID、歌單名稱和歌曲數量。
    SELECT t1.list_id, t1.list_name, IFNULL(t2.count, 0) // 如果 t2.count 為空,則返回0。
    FROM list AS t1 // 資料來源是 list 表,並將其命名為 t1。
    // 使用左連接將 list 表和CTE list_id_to_song_cnt 連接起來,根據 list_id 進行匹配。
    LEFT JOIN list_id_to_song_cnt AS t2 ON t1.list_id = t2.list_id

    總結

    1. 計算每個歌單中的歌曲數量。
    2. 將每個歌單的ID、名稱、使用者ID、描述和歌曲數量插入到 list_with_song_cnt 表中。如果某個歌單中沒有歌曲,則顯示0。


    ※ INSERT IGNORE(插入忽略

    INSERT IGNORE 語法在插入數據時,如果遇到重複鍵(如唯一鍵或主鍵)或其他約束違反的情況,會忽略該行的插入操作,而不是終止整個插入過程,也不會報錯。這對於避免重複插入相同數據非常有用。

    ※ 語法

    說明

    1. INSERT IGNORE INTO table (column_list):
      • INSERT IGNORE INTO: 指定要插入數據的目標表格,並使用 IGNORE 關鍵字來忽略可能引發錯誤的行。
      • table: 目標表格的名稱。
      • column_list: 要插入數據的欄位列表。
    2. VALUES (value_list1), (value_list2):
      • VALUES: 指定要插入的數據值。
      • (value_list1), (value_list2): 每個 value_list 代表一行數據,包含與 column_list 對應的值。

    ※ 實例

    假設我們有一個 users 表,包含 id 和 email 欄位,並且 email 欄位具有唯一約束:

    CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    email VARCHAR(130) NOT NULL UNIQUE
    );

    我們嘗試插入兩行數據,其中一行數據的 email 欄位值重複:

    INSERT IGNORE INTO users (email)
    VALUES ('john.doe@gmail.com'),
    ('john.doe@gmail.com');

    在這種情況下,INSERT IGNORE 將忽略重複的行並插入有效的行,而不會引發錯誤。

    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.