1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SQL中的變量

        共 2493字,需瀏覽 5分鐘

         ·

        2021-08-24 17:05

        點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

        設(shè)為“置頂或星標(biāo)”,第一時間送達干貨

        SQL專欄

        SQL基礎(chǔ)知識第二版
        SQL高級知識第二版

        變量的定義

        SQL Server中的變量就是一個參數(shù),可以對這個參數(shù)進行賦值。


        變量的分類

        變量分為局部變量和全局變量,局部變量用@來標(biāo)識,全局變量用@@來標(biāo)識(常用的全局變量一般都是已經(jīng)定義好的)


        聲明變量

        變量在使用前必須先聲明才能夠使用。

        申明局部變量語法

        DECLARE @變量名 數(shù)據(jù)類型;

        例如:

        DECLARE @A INT;

        這樣就聲明了一個整數(shù)型的變量@A


        局部變量賦值

        聲明完了變量就可以給變量賦值了,變量賦值有兩種方式SET 或 SELECT

        語法

        SET 變量名=值

        SELECT  變量名1=值1,變量名2=值2

        從上面的語法大家可能已經(jīng)看出兩種賦值方式的區(qū)別了,SET只能給一個變量賦值,SELECT 可以給多個變量賦值。

        例如

        SET @A=3
        SELECT @A=字段名1,@B=字段名2 FROM TABLE


        變量常用場景

        變量一般用作參數(shù)去給字段賦值,即將變量的值反過來賦值給字段。

        我們以表Customers作為示例表

        DECLARE @ID INT
        DECLARE @NAME VARCHAR2(50)
        DECLARE @ADDRESS VARCHAR2(50)
        --用SET方法給變量賦值 , 此方法一次只能給一個變量賦值
        SET @ID=1
        --將部門ID為1的客戶姓名和地址,賦值給@NAME和@ADDRESS變量 ,此方法能一次多個變量賦值
        SELECT @NAME=姓名,@ADDRESS=地址 FROM Customers WHERE 客戶ID=@ID
        --查詢變量里的結(jié)果
        SELECT @NAME,@ADDRESS

        結(jié)果如下:

        如果我們想查詢其他ID的姓名和地址,只需要更改一下@ID的值即可。


        Q:可能有人會問,我直接把值寫在客戶ID后面不就可以了嗎?為什么寫這么長一段內(nèi)容來要使用變量呢?

        這里有兩個原因

        1、使用簡便

        當(dāng)一個查詢里同一個字段需要修改的地方較多的時候,我們只需要修改這個字段對應(yīng)的變量內(nèi)容,那么所有的字段對應(yīng)的值都會一起跟著修改。

        例如

        要查詢學(xué)生們對應(yīng)的不同老師的信息:

        DECLARE @ID INT
        SET @ID=1
        SELECT * FROM TEST WHERE Teacher=@ID AND Student='張三'
        UNION ALL
        SELECT * FROM TEST WHERE Teacher=@ID AND Student='李四'
        UNION ALL
        SELECT * FROM TEST WHERE Teacher=@ID AND Student='王五'
        UNION ALL
        SELECT * FROM TEST WHERE Teacher=@ID AND Student='馬六'
        UNION ALL
        SELECT * FROM TEST WHERE Teacher=@ID AND Student='趙七'

        我們只需要修改@ID的值,下面的所有查詢的ID都會變更。


        2、可以提高查詢效率。

        當(dāng)我們使用查詢的使用,數(shù)據(jù)庫在執(zhí)行這個查詢語句的時候,如果不使用變量來修改值,實際上是兩個查詢。

        例如:

        SELECT * FROM TEST WHERE Student='張三'
        SELECT * FROM TEST WHERE Student='李四'

        執(zhí)行這兩個查詢,數(shù)據(jù)庫會制定兩個執(zhí)行計劃,而制定執(zhí)行計劃是需要消耗系統(tǒng)資源的。

        而如果我們改成:

        DECLARE @NAME VARCHAR(20)
        SET @NAME='張三'
        SELECT * FROM TEST WHERE Student=@NAME

        當(dāng)我們修改@NAME的值為'李四'的時候,數(shù)據(jù)庫還是會使用之前的執(zhí)行計劃。這樣就節(jié)省了時間。


        全局變量

        全局變量使用@@來表示,一般都是系統(tǒng)預(yù)定義的一些全局變量。常用的全局變量有

        @@ERROR ——最后一個SQL錯誤的錯誤號 

        @@IDENTITY —–最后一次插入的標(biāo)識值 

        @@LANGUAGE —–當(dāng)前使用的語言的名稱 

        @@MAX_CONNECTIONS – 可以創(chuàng)建的同時連接的最大數(shù)目 

        @@ROWCOUNT —-受上一個SQL語句影響的行數(shù) 

        @@SERVERNAME —-本地服務(wù)器的名稱 

        @@TRANSCOUNT —–當(dāng)前連接打開的事物數(shù) 

        @@VERSION —–SQL Server的版本信息


        例如查詢數(shù)據(jù)庫的版本號

        PRINT @@VERSION


        結(jié)果:


        查詢本地服務(wù)器的名稱

        PRINT @@SERVERNAME

        結(jié)果:

        這些信息都存儲在全局變量中,當(dāng)發(fā)生改變時,全局變量的值也會跟著改變。


        以上就是變量的一些相關(guān)內(nèi)容,如有什么疑問,可以在底下留言,我會一一回復(fù)的。


        總結(jié)

        變量的應(yīng)用范圍比較廣,特別是在存儲過程,游標(biāo)還有動態(tài)SQL中都有應(yīng)用。作用也比較明顯,在查詢優(yōu)化方面也是一個不錯的選擇。此外還有很多全局變量可以供我們在平時的開發(fā)中去使用,有興趣的可以去探究一下其他全局變量的用法。


        最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。

        有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行
        數(shù)據(jù)前線


        后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

        后臺回復(fù)關(guān)鍵字:進群,帶你進入高手如云的交流群。


        推薦閱讀

        瀏覽 83
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            伊人久久爱 | 国产农村妇女三级全黄第06集在线观看 | 国产成人无码A片免费男男 | 奇米一区二区三区 | 办公室大尺度做爰 | 手机AV在线播放 | 宅男噜噜噜66国产精品86 | 男的舔女的下面视频 | app毛片 | 亚洲精品AA |