2024-08-12|閱讀時間 ‧ 約 30 分鐘

SQL語法修改資料庫 - UPDATE (更新)

    已經存在在table裡面的那些record做更新。

    ※ 語法

    raw-image
    UPDATE [LOW_PRIORITY] [IGNORE] table_name

    SET
    column_name1 = expr1,
    column_name2 = expr2,


    [WHERE
    condition];
    1. UPDATE [LOW_PRIORITY] [IGNORE] table_name:
      • UPDATE 關鍵字用來指定要更新的表格。
      • LOW_PRIORITY 是一個選項,表示這個更新操作的優先順序較低。
      • IGNORE 是另一個選項,表示在更新過程中忽略不合法的更新。
    2. SET column_name1 = expr1, column_name2 = expr2, …:
      • SET 關鍵字用來指定要更新的欄位及其新值。
      • column_name1 = expr1 表示將 column_name1 欄位更新為 expr1 的值。
    3. [WHERE condition]:
      • WHERE 子句是可選的,用來指定更新的條件。
      • 如果有 WHERE 子句,則只更新符合條件的記錄。
      • 如果沒有 WHERE 子句,則更新整個表格中的所有記錄。
    4. IGNORE:
      • 如果使用 IGNORE 關鍵字,則在更新過程中忽略不合法的更新。
      • 例如,如果嘗試將一個記錄的 ID 更新為已存在的 ID,這是不合法的更新。
      • 使用 IGNORE 關鍵字時,不合法的更新會被忽略,合法的更新會繼續進行。


    ※ 解析順序

    解析順序如下:

    1. 選擇表格:首先,UPDATE 後面接的是要更新的表格名稱。
    2. 篩選記錄:接著,利用 WHERE 子句來篩選出要更新的記錄。如果沒有寫 WHERE,則會更新整個表格中的所有記錄。
    3. 設定更新內容:最後,在 SET 子句中告訴 SQL 我們要如何更新選進來的記錄。


    ※ 實例

    • Update Single Column

    假設我們有一個名為 employees 的表格,其中包含員工的資訊。我們想要更新員工編號為 101 的員工的薪水。

    UPDATE employees
    SET salary = 60000
    WHERE employee_id = 101;

    解析順序如下:

    1. 選擇表格:UPDATE employees 指定要更新的表格是 employees
    2. 設定更新內容:SET salary = 60000 指定要將 salary 欄位更新為 60000。
    3. 篩選記錄:WHERE employee_id = 101 篩選出員工編號為 101 的記錄。

    • Update Multiple Column

    假設我們有一個名為 employees 的表格,其中包含員工的資訊。我們想要更新員工編號為 101 的員工的薪水和職位。

    UPDATE employees
    SET salary = 60000,
    position = 'Senior Developer'
    WHERE employee_id = 101;

    解析順序如下:

    1. 選擇表格:UPDATE employees 指定要更新的表格是 employees
    2. 設定更新內容:SET salary = 60000, position = 'Senior Developer' 指定要將 salary 欄位更新為 60000,並將 position 欄位更新為 ‘Senior Developer’。
    3. 篩選記錄:WHERE employee_id = 101 篩選出員工編號為 101 的記錄。

    • REPLACE function

    假設我們有一個名為 products 的表格,其中包含產品的名稱。我們想要將所有產品名稱中的 “Old” 替換為 “New”。

    UPDATE products
    SET product_name = REPLACE(product_name, 'Old', 'New');

    ※ 使用 REPLACE 函數時,參數的位置:

    REPLACE(替換操作的原始字串, 要被替換的子字串, 用來替換的子字串)

    解析順序如下:

    1. 選擇表格:UPDATE products 指定要更新的表格是 products
    2. 設定更新內容:SET product_name = REPLACE(product_name, 'Old', 'New') 指定要將 product_name 欄位中的 “Old” 替換為 “New”。
    3. 篩選記錄:這裡沒有 WHERE 子句,因此會更新表格中的所有記錄。

    ※ UPDATE JOIN

    ※ 使⽤時機

    當我們需要使用另一個表格的資訊來更新時,就需要使用 JOIN Table來合併表格。

    ※ 語法

    1. 選擇表格:首先,指定要更新的表格(left table)。
    2. 合併表格:使用 JOIN(可以是 INNER JOIN 或 LEFT JOIN)來合併表格,並在 ON 子句中指定合併條件。
    3. 篩選記錄:利用 WHERE 子句篩選出要更新的記錄。
    4. 設定更新內容:在 SET 子句中指定要更新的欄位和更新方式,可以使用表格中的欄位(例如,使用 t2 的欄位來更新 t1 的欄位)或函數(例如,REPLACE 函數或 CONCAT 函數)來更新。

    ※ 解析順序

    1. 確定 right table 和 left table:首先要確定你要更新的表格(left table)和你要用來匹配的表格(right table)。
    2. 合併表格:根據你選擇的 JOIN 方式(例如 INNER JOIN, LEFT JOIN 等),將兩個表格合併在一起。
    3. 篩選記錄:使用 WHERE 子句來篩選出你想要更新的記錄。這一步是基於合併後的表格來進行的。
    4. 更新記錄:最後,使用 SET 子句來更新篩選出的記錄。

    ※ 實例

    設我們有兩個表格:employees 和 departments。我們希望更新 employees 表格中的 department_name 欄位,根據 departments 表格中的 department_id 來匹配。

    -- 更新 students 表格中的 grade 欄位
    UPDATE students AS s
    JOIN grades AS g ON s.student_id = g.student_id
    SET s.grade = g.grade
    WHERE g.exam_date = '2024-08-01';

    解析順序如下:

    1. 確定 right table 和 left table:students 是 left table,grades 是 right table。
    2. 合併表格:使用 JOIN 將 students 和 grades 表格根據 student_id 欄位合併。
    3. 篩選記錄:使用 WHERE 子句篩選出 grades 表格中 exam_date 為 ‘2024-08-01’ 的記錄。
    4. 更新記錄:使用 SET 子句更新 students 表格中的 grade 欄位。
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.