SQL?server數據庫declare和set用法技巧小結
最近遇到一段不怎么看得懂的SQL語句,經過查閱資料,整理出來的有關數據拼接、數據庫變量的一些內容如下:
如根據下述學生表,若要求得到年齡最大的學生信息:
學號 | 15001 | 15002 | 15003 | 16004 |
姓名 | 張三 | 李四 | 王麗 | 薇姿 |
性別 | 男 | 男 | 女 | 女 |
年齡 | 20 | 20 | 19 | 22 |
不使用變量的情況下,可用嵌套查詢實現:
Select * from 學生表 where 年齡=(select max(年齡) from 學生表)
運用變量解決上述問題:
????????Declare @bianliang?int; ????????Set @bianliang=(select max(年齡) from 學生表); ????????Select * from 學生表 where 年齡=@bianliang
面對實際工作中海量紛繁復雜的數據,使用嵌套或連接查詢時很容易出現各種語句錯誤,此時可以通過引入變量的方式將數據之間的邏輯關系簡單化、清晰化。
SQL Server中變量的使用主要涉及三方面的內容,即定義變量,為變量賦值以及結果的顯示。
一、定義/聲明變量
變量分為全局變量和局部變量,全局變量一般是系統(tǒng)內置的,用戶使用時一般無法自行定義,實際工作中也只需要使用局部變量。定義變量的語句如下(定義多個變量時需用逗號隔開):
Declare @變量名1 數值類型,@變量名2 數值類型,@變量名3 數值類型,……
如:declare @i1 int,@i2 nvarchar(10),@i3 money,……
二、為變量賦值
可以使用set或select命令為變量賦值,可以直接將某個具體的值賦給變量,也可以將一個需要經過運算產生的查詢結果賦給變量。
1.直接賦值
如聲明變量:declare @bl1 int,@bl2 nvarchar(10),@bl3 money;
分別使用set和select分別為上述3個變量賦值:
set @bl1=100; set @bl2='hello' ; set @bl3=3.1415926 ;
或
Select @bl1=100, @bl2='hello',@bl3=3.1415926 ;
2.為變量賦一個需要運算產生結果的值
如聲明變量:Declare @bl int;
以前文的學生表為例,分別使用set和select將學生表中學生年齡的最大值賦給變量@bl:
Set @bl=(select max(年齡) from學生表);
或
Select @bl=max(年齡) from 學生表;
3.set與select為變量賦值時的區(qū)別
直接賦值時set與select并無區(qū)別,只有所賦的值是一個查詢結果時二者才有不同,當查詢結果唯一時(如最大最小值),set和select都可以完成賦值,但是查詢結果不止一個時使用set會提示錯誤。
如查詢前文學生表中學生年齡:
Declare @bl?int; Set @bl=(select 年齡 from 學生表);
則變量@bl的賦值無法完成,因為學生表中年齡不止一條記錄。而此時select命令仍可以產生結果。
Declare @bl?int; Select @bl=年齡 from 學生表;
此時變量@i的值為22,即表中最后一行年齡數據。這是因為select對變量的賦值方式是遍歷數據中的全部記錄,然后將最后一條記錄賦給變量。
4.使用select命令為變量賦值的應用
了解了select為變量賦值時遍歷全部數據的特性,用戶可以運用變量將表中的一列記錄變成一行值顯示,仍以前文提到的學生表為例:
Declare @i varchar(100) Set @i='' Select @i=@i+姓名 from學生表
此時變量@i的值為“張三李四王麗薇姿”。
這種方法在實際工作中可以結合存儲過程運用,提高SQL語句執(zhí)行效率。需要注意的是,若上例的學生表中“姓名”列有null值,則變量@i的值也是null,這是因為null與任何值進行運算結果都是null,此時需要通過isnull函數對null值進行調整。
三、顯示結果
變量的結果有兩種顯示方式,即文本顯示(print)和表格顯示(select)兩種.
總結
相關文章
數據庫性能優(yōu)化一:數據庫自身優(yōu)化提升性能
數據庫自身優(yōu)化包括:增加次數據文件,設置文件自動增長、表分區(qū),索引分區(qū)、分布式數據庫設計、整理數據庫碎片等等.需要了解的朋友可以參考下2013-01-01