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

閱讀時間約 7 分鐘

已經存在在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 關鍵字時,不合法的更新會被忽略,合法的更新會繼續進行。


※ 解析順序

raw-image

解析順序如下:

  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來合併表格。

※ 語法

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

※ 解析順序

raw-image
  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 欄位。
    全端網頁開發專業知識分享
    留言0
    查看全部
    發表第一個留言支持創作者!
    ※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
    ※ CTE是什麼? 在 SQL 中,我們經常需要從多個表中提取數據,因此會使用子查詢 (subquery)。為了讓子查詢更易讀並實現遞迴查詢,我們可以使用 Common Table Expression (CTE)。 CTE 是一個「暫存」且「具名」的結果集合,透過 AS 關鍵字將查詢結果暫時儲
    ※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
    ※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
    ※ 別名: 目的在於提高SQL查詢的可讀性和簡潔性。 ※ 別名有兩種: Column Alias(列別名):在查詢結果中的某一列,取一個臨時的新名字。 Table Alias(表別名):給查詢中的表取一個短暫的新名字。 ※ Column Alias ※ 為什麼需要 Column A
    ※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
    ※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
    ※ CTE是什麼? 在 SQL 中,我們經常需要從多個表中提取數據,因此會使用子查詢 (subquery)。為了讓子查詢更易讀並實現遞迴查詢,我們可以使用 Common Table Expression (CTE)。 CTE 是一個「暫存」且「具名」的結果集合,透過 AS 關鍵字將查詢結果暫時儲
    ※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
    ※ 何時該使用 JOIN? JOIN 使用的時機是:當你需要同時查詢一張以上的資料表的時候。 ※ SQL有哪些TABLE JOIN的方式? INNER JOIN LEFT JOIN RIGHT JOIN SELF JOIN ※ 使用 JOIN 的時候,我們需要考慮到: 我要使用哪一種
    ※ 別名: 目的在於提高SQL查詢的可讀性和簡潔性。 ※ 別名有兩種: Column Alias(列別名):在查詢結果中的某一列,取一個臨時的新名字。 Table Alias(表別名):給查詢中的表取一個短暫的新名字。 ※ Column Alias ※ 為什麼需要 Column A
    ※ GROUP BY 用於將數據表中的數據按照一個或多個列進行分組。例如在處理一個表格的資料時,可以指定欄位,一個或是多個,然後把將其視為ID進行分組處理。 ※ 語法 SELECT column1, column2, ..., aggregate_function(column) FROM
    你可能也想看
    Google News 追蹤
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    在工作情境中手動執行SQL語法更新中文字時,有時會遇到中文字顯示問號(?)的情況。這篇文章將介紹如何解決手動執行SQL語法時造成中文顯示問號(?)的方法。
    Thumbnail
    題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
    Thumbnail
    題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
    Thumbnail
    題目敘述 題目會給我們一張Views資料表。裡面分別有article_id、author_id、viewer_id、view_date等欄位。題目說這張資料表沒有主鍵Primary key,而且可能有重複欄位。 題目要求我們列出所有讀過自己寫的文章的作者ID 輸出答案時,請以作者ID做升序排列
    Thumbnail
    題目敘述 題目會給我們一張Products資料表。裡面分別有product_id、new_price、change_date等欄位。其中(product_id, change_date)是這張資料表的複合主鍵Primary key。 所有商品預設都是10元。之後若有更新,則以新價格為主。 要求
    Thumbnail
    題目會給我們一張資料表Queue,代表乘客排隊上車的情境。 裡面分別有person_id、 person_name 、weight、turn等欄位,分別代表乘客ID、乘客姓名、乘客重量、乘客排隊的順序。 要求我們判斷,在不超重的條件下,最後一位上車的乘客是誰。
    Thumbnail
    題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
    Thumbnail
    SQL 基本篇 - CRUD、運算子、內建函式
    Thumbnail
    我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下
    Thumbnail
    近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
    Thumbnail
    在工作情境中手動執行SQL語法更新中文字時,有時會遇到中文字顯示問號(?)的情況。這篇文章將介紹如何解決手動執行SQL語法時造成中文顯示問號(?)的方法。
    Thumbnail
    題目敘述 題目會給我們兩張資料表,第一張是Sales,第二張是Product。 第一張是Sales表格,裡面分別有sale_id、 product_id、year、quantity、price等欄位。其中(sale_id、 product_id)做為複合主鍵Primary key Table:
    Thumbnail
    題目敘述 題目會給我們兩張資料表。 第一張資料表是Employees 裡面分別有id、name等欄位。這張資料表的id是主鍵。 第二張資料表是EmployeeUNI 裡面分別有id、unique_id等欄位。 題目要求我們列出每位員工對應到的Unique ID
    Thumbnail
    題目敘述 題目會給我們一張Views資料表。裡面分別有article_id、author_id、viewer_id、view_date等欄位。題目說這張資料表沒有主鍵Primary key,而且可能有重複欄位。 題目要求我們列出所有讀過自己寫的文章的作者ID 輸出答案時,請以作者ID做升序排列
    Thumbnail
    題目敘述 題目會給我們一張Products資料表。裡面分別有product_id、new_price、change_date等欄位。其中(product_id, change_date)是這張資料表的複合主鍵Primary key。 所有商品預設都是10元。之後若有更新,則以新價格為主。 要求
    Thumbnail
    題目會給我們一張資料表Queue,代表乘客排隊上車的情境。 裡面分別有person_id、 person_name 、weight、turn等欄位,分別代表乘客ID、乘客姓名、乘客重量、乘客排隊的順序。 要求我們判斷,在不超重的條件下,最後一位上車的乘客是誰。
    Thumbnail
    題目敘述 題目會給我們一張Cinema資料表,裡面分別有id、movie、description, rating 等欄位,其中id 是主鍵Primary Key。 要求我們列出所有推薦人ID為奇數,而且不無聊的電影,印出時依照電影rating評分從高到低降序排列。 Table: Cinema
    Thumbnail
    SQL 基本篇 - CRUD、運算子、內建函式
    Thumbnail
    我自己是使用微軟的SQLIT軟體 這個軟體的操作上 沒有辦法直接用滑鼠點選或是拖拉的方式來看到你想看到的表格 都是要下指令的像是要看data.sqlite中的user這個table我就必須下 才能把table調閱出來看 那做為一個python三年工作經驗的工程師通常我不會直接在SQLIT軟體 裡面下