首頁 > 軟體

MySQL學習之資料更新操作詳解

2022-08-08 14:03:36

UPDATE 語句

UPDATE 語句用於修改表的記錄,語法如下

UPDATE IGNORE 表名
SET 欄位1=值1, 欄位2=值2, 欄位3=值3, ......
WHERE 條件1 ......
ORDER BY ......
LIMIT ......;

-- 注意:IGNORE - 是可選條件,使用後,會針對有衝突的修改記錄忽略
-- 注意:WHERE - 也是可選條件,使用了就是有條件的修改記錄;不使用就是無條件的修改記錄,也就是針對全表範圍進行記錄的修改 
-- 注意:ORDER BY - 之所以使用排序主要是針對類似多條記錄,批次遞增的形式去修改(比如說員工工資的統一普調,員工工號的遞增加1)。
-- 注意:LIMIT - UPDATE 語句中的 LIMIT 子句只能寫一個引數,不能像之前那樣寫兩個引數。

UPDATE 語句的執行順序:UPDATE ---> WHERE ---> ORDER BY ---> LIMIT ---> SET

UPDATE 語句練習①

把每個員工的編號和上司的編號 +1 ,利用 “ORDER BY” 子句完成。

“UPDATE” - SQL語句演示案例①:

UPDATE t_emp
SET empno = empno + 1, mgr = mgr + 1
ORDER BY empno DESC;

-- 這裡解釋一下,為什麼會這樣。
-- 當我們更新第一個員工的工號 +1 的時候,實際上他的下一位員工編號是與當前員工編號 +1 的結果是衝突的,這就是我們使用 ORDER BY 的原因

UPDATE 語句練習②

將月收入前3名的員工月薪減 100 ,使用 LIMIT 子句完成。

“UPDATE” - SQL語句演示案例②:(首先按照月收入排成降序,然後取前3條記錄,然後再執行 "UPDATE" 的操作)

UPDATE t_emp
SET sal = sal - 100
ORDER BY sal + IFNULL(comm,0) DESC
LIMIT 3;

UPDATE 語句練習③

將 10 部門中,工齡超過 20 年的員工,底薪增加 200 。

“UPDATE” - SQL語句演示案例③:(篩選 10 部門與工齡超過20年的員工寫在 "WHERE" 子句即可,底薪增加 200 寫在SET子句)

UPDATE t_emp
SET sal = sal + 200
WHERE deptno=10
AND DATEDIFF(NOW(),hiredate)/365 >= 20;

UPDATE 語句的表連線

因為相關子查詢的效率非常低,所以我可以利用表連線的方式來改造 “UPDATE” 語句。

表連線的 “UPDATE” 語句可以修改多張表的記錄。

UPDATE 語句的表連線的語法如下:(內連線方式)

UPDATE 表1 JOIN 表2 ON 條件
SET 欄位1=值1, 欄位2=值2, ......;

-- 這裡的欄位是比較有意思的,不是說 SET 關鍵字修改的欄位只能來自一張表,它可以來自 被關聯的任意一張表。

UPDATE 語句的表連線的語法如下:(內連線變種方式)

UPDATE 表1, 表2 
SET 欄位1=值1, 欄位2=值2, ......
WHERE 連線條件;

UPDATE 語句練習④

把 ALLEN 調往 “RESEARCH” 部門,職務調整為 “ANALYST”。

這個需求的 SQL 語句牽扯到兩張表,這裡呢我們可以通過子查詢的方式來實現。但是 UPDATE 語句中的子查詢為相關子查詢,所以並不建議使用。比較合適的方式就是實用 “表連線” 的方式來實現,具體參考 “UPDATE 語句的表連線” 語法。

通過練習題的方式更鼓 “UPDATE” 的語法還是挺有意思的,可以開闊思路,有助於我們鞏固 “UPDATE” 的語法。

到此這篇關於MySQL學習之資料更新操作詳解的文章就介紹到這了,更多相關MySQL資料更新內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com