版權歸原作者所有,如有侵權,請聯(lián)系我們

update

百度百科
原創(chuàng)
全球最大中文百科全書
收藏

Update是SQL語句中DML類(DataManipulation Language,數(shù)據(jù)操縱語言)中的一個指令,用于更新(修改)表中原有數(shù)據(jù)2。

語句概述

Update是SQL語句中DML類(Data Manipulation Language,數(shù)據(jù)操縱語言)中的一個指令,用于更新(修改)表中原有數(shù)據(jù)2?;緯鴮懸?guī)則

(1)SQL 語句使用分號(;)結尾;

(2)Update作為關鍵字不區(qū)分大小寫。

語法結構

UPDATE 表名稱

SET 列名稱 = 新值, 列名稱2 = 新值2,...

WHERE 條件;

其中,表名稱是需要更新數(shù)據(jù)的表的名稱;列名稱= 新值部分指定了要更新的列及其新值;WHERE條件用于指定哪些記錄需要被更新。如果省略WHERE子句,所有記錄將被更新。

SQL的UPDATE語句通過指定表、列及其新值以及適用的條件來實現(xiàn)對數(shù)據(jù)庫表中數(shù)據(jù)的更新操作。使用WHERE子句

更新部分數(shù)據(jù)行時可以使用WHERE來指定更新對象的條件。通過WHERE

子句指定更新對象的UPDATE語句稱為搜索型UPDATE語句1。

更新操作

(1)更新表中的特定行3

UPDATE語句用于修改表中的數(shù)據(jù),而WHERE子句則用于指定哪些行需要被更新。

語法說明:

UPDATE< 表名 >

SET< 列名 = 表達式 >[,…n]

WHERE< 查詢條件 >

具體說明:

1)< 表名 > 指定需要修改數(shù)據(jù)的表的名稱。

2)< 列名 = 表達式 > 指定要修改的列名和相應的值,表達式值的數(shù)據(jù)類型要與對應列的數(shù)據(jù)類型一樣。

3)WHERE子句指定表中修改數(shù)據(jù)所要滿足的條件。如果WHERE子句省略,則表示要修改表中的所有行。

例如2:

客戶1000000005現(xiàn)在有了電子郵件地址,因此他的記錄需要更新。

語句如下:

輸入▼

UPDATE Customers

SET cust_email = ‘kim@thetoystore.com’

WHERE cust_id = ‘1000000005’;

UPDATE語句總是以要更新的表名開始。在這個例子中,要更新的表名為Customers。SET命令用來將新值賦給被更新的列。在這里,SET子句設置cust_email列為指定的值:

SET cust_email = ‘kim@thetoystore.com’ UPDATE語句以WHERE子句結束,它告訴DBMS 更新哪一行。沒有WHERE子句,DBMS將會用這個電子郵件地址更新Customers表中的所有行。

(2)更新表中的所有行1

省略WHERE子句,所有記錄將被更新。

語法說明:

UPDATE <表名>

SET <列名> = <表達式>;

(3)多列更新1

同時更新多列時,可以在UPDATE語句的SET子句中,使用逗號分隔更新對象的多個列1。

語法說明:

UPDATE< 表名 >

SET< 列名1 = 表達式1,列名2=表達式2,…… >

WHERE< 查詢條件 >

例如2:

輸入▼

UPDATE Customers

SET cust_contact = 'Sam Roberts', cust_email = 'sam@toyland.com'

WHERE cust_id = '1000000006';

在更新多個列時,只需要使用一條SET命令,每 個“列=值”對之間用逗號分隔(最后一列之后不用逗號)。在此例子中,更新顧客1000000006的 cust_contact和cust_email列。

(4)使用NULL進行更新

使用 UPDATE 也可以將列更新為 NULL(該更新俗稱為 NULL 清空)。此時只需要將賦值表達式右邊的值直接寫為 NULL 即可。和 INSERT 語句一樣,UPDATE 語句也可以將 NULL 作為一個值來使用。但是,只有未設置 NOT NULL 約束和主鍵約束的列才可以清空為NULL。如果將設置了上述約束的列更新為NULL,就會出錯。要刪除某個列的值,可設置它為NULL(假如表定義允許NULL值)1。

語法說明:

UPDATE< 表名 >

SET< 列名 = NULL,…… >

WHERE< 查詢條件 >

例如:

輸入▼

UPDATE Customers SET cust_email = NULL WHERE cust_id = ‘1000000005’

其中NULL用來去除cust_email列中的值。這與保存空字符串不同(空字符串用‘’表示,是一個值),而NULL表示沒有值2。

(5)FROM關鍵字在有些數(shù)據(jù)庫系統(tǒng)中,SQL實現(xiàn)支持在UPDATE語句中使用FROM子句,用一個表的數(shù)據(jù)更新另一個表的行。如想知道是否支持該特性需查閱數(shù)據(jù)庫系統(tǒng)文檔2。

(6)update語句中使用子查詢2

在有些數(shù)據(jù)庫系統(tǒng)中,update語句中可以使用子查詢,使得能用SELECT 語句檢索出的數(shù)據(jù)更新列數(shù)據(jù)。

子查詢是嵌套在另一個查詢中的查詢,通常用在WHERE子句中,但也可以用于SET子句。

例如:

1)在WHERE子句中使用子查詢

假設有一個sales表,將那些銷售額超過所有銷售人員平均銷售額的記錄的bonus字段更新為100。

UPDATE sales

SET bonus = 100

WHERE sales_amount > (SELECTAVG(sales_amount) FROM sales);

在這個例子中,子查詢計算sales表中所有記錄的sales_amount的平均值,然后WHERE子句根據(jù)這個平均值來更新記錄。

2)在SET子句中使用子查詢

假設有兩個表:employees和departments。根據(jù)departments表中的信息更新employees表中的salary字段。

UPDATE employees

SET salary = salary * (SELECTdepartment_increase FROM departments WHERE departments.department_id =employees.department_id)

WHERE EXISTS (SELECT 1 FROMdepartments WHERE departments.department_id = employees.department_id);

在這個例子中,department_increase是departments表中的一個字段,表示每個部門的工資增長百分比。SET子句中的子查詢根據(jù)department_id字段來更新employees表中的salary字段。

(7)在SQL UPDATE語句中使用JOIN來更新表中的數(shù)據(jù)

當需要根據(jù)一張或多張表的數(shù)據(jù)來更新另一張表的數(shù)據(jù)時,可以使用UPDATE語句結合JOIN操作。

1)選擇合適的JOIN類型:INNER JOIN(內(nèi)連接)、LEFT JOIN(左連接)、RIGHT JOIN(右連接)。

2)編寫UPDATE語句并包含JOIN:首先,確定要更新的目標表和源表,并使用別名來簡化查詢。使用ON子句指定JOIN條件。使用SET子句來定義要更新的字段及其新值。

假設我們有一個客戶表(Customers)和訂單表(Orders),我們想要更新客戶的姓氏為“Smith”,但僅當他們的訂單包含鍵盤時才進行更新。

UPDATE Customers C

JOIN Orders O ONC.customer_id = O.customer_id

SET C.last_name = 'Smith'

WHERE O.item = 'Keyboard';

在這個例子中,通過Customers和Orders表之間的連接,找到了所有相關聯(lián)的客戶,并將他們的姓氏更新為“Smith”。

如果需要在一個表內(nèi)更新數(shù)據(jù),可以使用自連接。例如,更新每個員工的上級姓名:

UPDATE employee AS t1

JOIN employee AS t2 ON t1.經(jīng)理_id = t2.員工_id

SET t1.經(jīng)理_姓名= t2.姓名;

這個語句的目的是更新employee表中每個員工的“經(jīng)理_姓名”字段,使其與對應經(jīng)理的“姓名”字段相匹配。使用了自連接(self-join),即同一個表employee通過兩個不同的別名t1和t2來表示,t1和t2代表同一個表employee的不同實例或行集,t1代表當前正在處理的員工,t2代表當前員工的上級,通過ON子句中的條件t1.經(jīng)理_id = t2.員工_id,確定了t1中的每一行與t2中的哪一行相關聯(lián)。

3)在某些數(shù)據(jù)庫系統(tǒng)中(如SQL Server),可能需要使用FROM子句和表別名來明確指定源表。確保JOIN條件正確且高效,以避免性能問題。

操作舉例說明

例子1:

以Product(商品)表為例

|| || Product表

1)更新表中的所有行:將登記日期全部更新為“2009-10-10”

UPDATEProduct

SETregist_date = '2009-10-10';

|| || 結果

此時,連登記日期原本為 NULL的數(shù)據(jù)行(運動 T 恤)的值也更新為2009-10-10了。

2)更新特定行

將商品種類(product_type)為廚房用具的記錄的銷售單價(sale_price)更新為原來的 10 倍

UPDATEProduct

SETsale_price = sale_price * 10

WHEREproduct_type = '廚房用具';

|| || 結果

該語句通過WHERE 子句中的“product_type = '廚房用具'”條件,將更新對象限定為 3 行。然后通過 SET 子句中的表達式sale_price * 10,將原來的單價擴大了 10 倍。SET 子句中賦值表達式的右邊不僅可以是單純的值,還可以是包含列的表達式。

3)多列更新

將銷售單價(sale_price)更新為原來的 10 倍,同時將進貨單(purchase_price)更新為原來的一半

UPDATEProduct

SETsale_price = sale_price * 10, purchase_price = purchase_price / 2

WHEREproduct_type = '廚房用具';

|| || 結果

內(nèi)容資源由項目單位提供

評論
中氣旋
少師級
已經(jīng)閱讀
2025-04-12