最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL?Update更新數(shù)據(jù)的操作方法

 更新時間:2025年08月15日 10:48:25   作者:數(shù)據(jù)碼頭  
本文詳解SQL?UPDATE語句的基本語法、WHERE條件使用、更新值類型及聯(lián)表更新方法,強(qiáng)調(diào)更新前需驗證數(shù)據(jù)并使用事務(wù),避免誤操作導(dǎo)致數(shù)據(jù)錯誤,感興趣的朋友一起看看吧

在實際工作中,我們經(jīng)常需要更改數(shù)據(jù)庫中的數(shù)據(jù),更新數(shù)據(jù)用到的關(guān)鍵詞是UPDATE,其基本語法是:

UPDATE 表名
SET 列名1 = 新值1, 列名2 = 新值2, ...
WHERE 條件;

其中UPDATE 后面指定要更新數(shù)據(jù)的表,再用SET設(shè)置需要更新的列及其新值,可以同時更新多個列,用逗號分隔,where后面則加條件指定哪些行的數(shù)據(jù)需要被更新。例如,有如下一張Student表:

現(xiàn)在需要將小明的班級更新為301,同時他的年齡應(yīng)該是21歲,那么可以寫成:

UPDATE dbo.Student
SET Class = '301',
    Age = 21
WHERE Name = '小明';

如果省略了WHERE 子句,即不加任何限定條件,那么表中所有行的數(shù)據(jù)都會被更新(即所有學(xué)生的class都成了301,age都是21了),這在大多數(shù)情況下不是我們想要的結(jié)果,因此使用時需格外注意。在實際工作中,強(qiáng)烈建議大家在執(zhí)行update之前,先將指定的條件用select語句查一遍,確保要更新的數(shù)據(jù)是對的。記得我剛開始工作的時候,害怕更新錯或者刪錯數(shù)據(jù),每次update或者delete都在事務(wù)中進(jìn)行,確保沒問題后再提交(事務(wù)我后面會介紹)。

上面是update的基本用法,也還有其他的情況,比如where后面所接的指定條件,可以是大于某個數(shù)或者在某個范圍內(nèi),或者跟一個子查詢等等,即這里where后面能寫的條件跟select中是類似的。因為更新前,先將需要更新的數(shù)據(jù)篩選出來,再執(zhí)行更新操作。例如將所有不及格同學(xué)的成績都改為60分,可以寫成:

UPDATE dbo.Score
SET Score = 60
WHERE Score < 60;

更新后的值也可以是一個表達(dá)式,而非某個具體的值,例如將學(xué)號001同學(xué)所有課程的分?jǐn)?shù)都加上10分,可以寫成:

UPDATE dbo.Score
SET Score = Score + 10
WHERE StudentNumber = '001';

要提醒的一點是:更新某條數(shù)據(jù)時,各列是同一時間更新的,例如有下面一個SQL:

UPDATE dbo.T
SET colA= colA + 10 , colB =colA+10;

執(zhí)行完之后,colA和colB的結(jié)果是一樣的,并不是說colB在A已經(jīng)加了10的基礎(chǔ)上再執(zhí)行加10。

聯(lián)表更新:

在查詢數(shù)據(jù)的時候,如果要的數(shù)據(jù)是通過不同的條件指定的,這些條件并不在同一張表中,我們需要將多表關(guān)聯(lián)進(jìn)行查詢。同理,如果在更新數(shù)據(jù)的時候,給我們的條件也不全在同一張表中,我們就需要聯(lián)表來進(jìn)行更新。例如,Score表數(shù)據(jù)結(jié)構(gòu)如下:

現(xiàn)要求將李華同學(xué) 操作系統(tǒng)這門課程 的成績加一分,應(yīng)該怎么寫SQL呢?

我們肯定要找到他對應(yīng)的學(xué)號和操作系統(tǒng)這門課程的編號是多少,因為Score表里有的只是編號而沒有具體的值或課程名。(為什么不在Score表里存這些具體的值呢?這在后面表的設(shè)計原則中會介紹)。

所以我們可以分3步,查“李華”的StudentNumber--->查“操作系統(tǒng)”對應(yīng)的CourseNumber--->再將這兩次查到的結(jié)果放在update語句where后面的條件中。只是有點繁瑣,可以用聯(lián)表更新將這3步合為一步,即:

UPDATE A
SET A.Score = A.Score + 1
FROM dbo.Score AS A
    INNER JOIN dbo.Student AS B
        ON B.StudentNumber = A.StudentNumber
    INNER JOIN dbo.Course AS C
        ON C.CourseNumber = A.CourseNumber
WHERE B.Name = '李華'
      AND C.Name = '操作系統(tǒng)';

寫上面這個SQL的邏輯也是建立在多表關(guān)聯(lián)查詢的基礎(chǔ)上,即首先寫的SQL是:

SELECT A.Score
FROM dbo.Score AS A
    INNER JOIN dbo.Student AS B
        ON B.StudentNumber = A.StudentNumber
    INNER JOIN dbo.Course AS C
        ON C.CourseNumber = A.CourseNumber
WHERE B.Name = '李華'
      AND C.Name = '操作系統(tǒng)';

通過關(guān)聯(lián)Student表和Course表查出我們要更新的數(shù)據(jù),然后再將SELECT換成UPDATE,update之后是我們要更新的那個表名。通過上面使用表的別名大家應(yīng)該也能看出,雖然update是寫在一開始的,但是它執(zhí)行的邏輯順序卻是最后。在這里補充一點關(guān)于SQL語句的執(zhí)行順序:

對于常見的查詢(SELECT語句),其書寫順序如下:

  • SELECT:用于指定要查詢的列。例如SELECT column1, column2,你可以選擇一個或多個列,也可以使用*來表示查詢所有列。
  • FROM:指定要從哪個表中查詢數(shù)據(jù)。例如FROM table_name,這是數(shù)據(jù)來源的表。
  • WHERE:用于對數(shù)據(jù)進(jìn)行篩選,添加條件來過濾數(shù)據(jù)。例如WHERE column1 = value,只有滿足條件的行才會被返回。
  • GROUP BY:用于對結(jié)果集進(jìn)行分組。例如GROUP BY column1,通常和聚合函數(shù)(如COUNT()、SUM()等)一起使用,對每個分組進(jìn)行操作。
  • HAVING:在分組后對分組進(jìn)行篩選,它和WHERE的區(qū)別在于HAVING是針對分組后的結(jié)果進(jìn)行篩選,而WHERE是對原始數(shù)據(jù)進(jìn)行篩選。例如HAVING COUNT(column1) > 10
  • ORDER BY:用于對結(jié)果集進(jìn)行排序。例如ORDER BY column1 ASC(升序,默認(rèn))或ORDER BY column1 DESC(降序),可以指定一個或多個列進(jìn)行排序。

SQL語句的執(zhí)行順序和書寫順序有所不同,主要的執(zhí)行順序是:

  • FROM:首先確定數(shù)據(jù)來源的表,這是整個查詢的基礎(chǔ),即要查哪張表。數(shù)據(jù)庫會加載指定的表,為后續(xù)的操作提供數(shù)據(jù)源。
  • WHERE:在確定了表之后,再對表中的數(shù)據(jù)進(jìn)行篩選,根據(jù)WHERE子句中的條件過濾出符合條件的行。這一步可以減少后續(xù)操作的數(shù)據(jù)量,提高查詢效率。
  • GROUP BY:對WHERE篩選后的結(jié)果集進(jìn)行分組操作。按照指定的列將數(shù)據(jù)分成不同的組,為后續(xù)的聚合操作做準(zhǔn)備。
  • 聚合函數(shù)(如在SELECT中使用的COUNT、SUM等):在分組的基礎(chǔ)上,對每個分組應(yīng)用聚合函數(shù)進(jìn)行計算。例如計算每個分組的行數(shù)、總和等。
  • HAVING:對分組后的結(jié)果進(jìn)行篩選。這是在聚合函數(shù)計算之后進(jìn)行的,根據(jù)HAVING子句中的條件過濾分組。
  • SELECT:最后確定要返回的列。此時已經(jīng)完成了數(shù)據(jù)的篩選、分組和聚合等操作,根據(jù)SELECT子句指定的列從最終的結(jié)果集中提取數(shù)據(jù)。
  • ORDER BY:對最終的結(jié)果集進(jìn)行排序。這是最后一步,根據(jù)指定的列對結(jié)果進(jìn)行升序或降序排列。

執(zhí)行順序?qū)斫釹QL語句的運行非常有幫助!

說回更新語句,首先是要查詢到需要更新的數(shù)據(jù),即確定表--->篩選行--->計算新值(set語句)--->再更新數(shù)據(jù)。

關(guān)于update更新數(shù)據(jù)的知識,大概就這么多,大家需要掌握:

1.更新單列、更新多列

2.不同的限定條件來更新數(shù)據(jù)

3.基于表達(dá)式更新

4.表關(guān)聯(lián)更新

最后還想重復(fù)一句,執(zhí)行update的時候一定要慎重,不要忘記where限定條件,最好先將更新語句中指定的條件用select語句查一遍,確保要更新的數(shù)據(jù)是對的(后面說刪除也是同理),在實際工作中如果弄錯重要數(shù)據(jù),后果很嚴(yán)重。

到此這篇關(guān)于【SQL】Update更新數(shù)據(jù)的文章就介紹到這了,更多相關(guān)SQL Update更新數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

白沙| 博湖县| 乌海市| 左云县| 理塘县| 高台县| 屏山县| 佳木斯市| 华蓥市| 慈利县| 大田县| 平罗县| 丰顺县| 四子王旗| 晋江市| 泾源县| 彩票| 岳普湖县| 工布江达县| 台东市| 义乌市| 临湘市| 洛南县| 鄂托克旗| 罗田县| 蒙阴县| 米脂县| 上虞市| 黑山县| 阳信县| 吐鲁番市| 宜春市| 应用必备| 余干县| 乌恰县| 湘西| 松原市| 长宁县| 田东县| 宣化县| 商水县|