T-SQL是SQL Server系統(tǒng)產(chǎn)品獨有的關(guān)系數(shù)據(jù)庫系統(tǒng)語言。
T-SQL主要由三部分組成
- DDL:數(shù)據(jù)定義語言,用于在數(shù)據(jù)庫中對數(shù)據(jù)庫、表、視圖、索引等數(shù)據(jù)庫對象進行創(chuàng)建及管理;
- DCL:數(shù)據(jù)控制語言,用于實現(xiàn)對數(shù)據(jù)庫中數(shù)據(jù)的完整性、安全性等的控制;
- DML:數(shù)據(jù)操作語言,用于插入、修改、刪除和查詢數(shù)據(jù)庫中的數(shù)據(jù)。
T-SQL語句結(jié)構(gòu)
每條SQL語言都由一個謂語開始,如SELECT,UPDATE。謂語后緊接著一個或者多個子句,子句給出了被謂語作用的數(shù)據(jù)或提供謂語動作的詳細信息,每一條子句都由一個關(guān)鍵字開始。
比如select語句主要結(jié)構(gòu)如下:
select 子句
[ into 子句 ]
from 子句
[ where 子句 ]
[ group by 子句 ]
[ having 子句 ]
[ oder by 子句 ase/desc ]
T-SQL語句分類
- 變量說明語句:用來說明變量的命令;
- 數(shù)據(jù)定義語句:用來建立數(shù)據(jù)庫、數(shù)據(jù)庫對象和定義列,大部分以create開頭的命令,如create table 、create view、drop table等;
- 數(shù)據(jù)操作語句:用來操作數(shù)據(jù)庫的命令,如select、insert、updata、delete和cursor等;
- 數(shù)據(jù)控制語句:用來控制數(shù)據(jù)庫組件的存取許可、存取權(quán)限等命令,如grant、revoke等;
- 流程控制語句:用于設(shè)計應(yīng)用程序流程的語句,如if while和case等;
- 內(nèi)嵌函數(shù):說明變量的命令;
- 其他命令:嵌于命令中使用的標(biāo)準(zhǔn)函數(shù)。
常量
- 數(shù)字常量:整數(shù)常量、小數(shù)常量和浮點常量(e,即乘10的幾次冪 )
- 字符串常量:常用單引號括在內(nèi);
- 日期和時間常量
- 符號常量:SQL包含幾個特有的符號變量,例current_date表示當(dāng)前日期,類似的如current_time,current_timestamp等。
變量
數(shù)據(jù)在內(nèi)存中儲存可以變化的量叫變量。
局部變量
局部變量是用戶可自定義的變量,必須以@開頭。
1、聲明局部變量
局部變量的聲明需要使用declare語句
declare
{ @varaible_name datatype [ ,…n ] }
其中@varaible_name是局部變量名;
datatype是數(shù)據(jù)類型
例如: declare @身份證類型 char(10)
2、為局部變量賦值
- 第一種方法是用select語句
select
@varaible_name=expression
[ from table_name[,…] where clause ]
賦值的時候select語句可以不用from子句。
select語句賦值和查詢不能混淆!
- 第二種方法是用set語句
declare @varaible_name char(10)
set @varaible_name=expression
- 為多個變量一起賦值
declare @a int,@b char(10),@c int
select @a=1,@b='love',@c=2
全局變量
全局變量是數(shù)據(jù)庫內(nèi)部事先定義好的變量,其名稱都是以@@開頭的
- @@connections
使用@@connections可以讓系統(tǒng)管理員很容易得到今天所有試圖連接本服務(wù)器的連接數(shù)目; - @@cup_busy
記錄自上次啟動以來嘗試的連接數(shù),都是以ms為單位的cpu工作時間 - @@cursor_rows
返回在本次服務(wù)器連接中,打開游標(biāo)取出數(shù)據(jù)行的數(shù)目; - @@DBTS
返回當(dāng)前數(shù)據(jù)庫中timestamp數(shù)據(jù)類型的當(dāng)前值 - @@error
返回執(zhí)行上一條Transact-SQL語句返回的錯誤代碼。 - @@fetch_status
返回上一次使用游標(biāo)fetch操作所返回的狀態(tài)值,且返回值為整型。
……………………不在贅述!
注釋符、運算符與通配符
流程控制
- begin ……end
用于將多個T-SQL語句組合成一個邏輯塊。
在begin……end 可嵌套另外的begin……end來定義另一程序塊。 - if
if <條件表達書>{命令行|程序塊}
- if ……else
if <條件表達書>{命令行|程序塊}
[ else {命令行|程序塊} ]
例:
declare @x int,@y int
set @x=-1
@y=1
if @x>0
if@y>0
print"xy在第一象限"
else
print"xy在第四象限"
else
if@y>0
print"xy在第二象限"
else
print"xy在第三象限"
- case
使用case語句可以很方便地實現(xiàn)多重選擇的情況,比if……then結(jié)構(gòu)有更多的選擇和判斷的機會。
1、第一種簡單的case函數(shù)
CASE 所計算的表達式
WHEN 選擇條件表達式 THEN 返回表達式
[……n] --表示可以使用多個when……then
[
ELSE 返回表達式
END
2、case 搜索函數(shù)
CASE
WHNE 所計算的布爾表達式 THEN 返回表達式
[……n]
[
ELSE 返回表達式
END
3、舉例
use 學(xué)生成績數(shù)據(jù)庫
go
select *,
評分總結(jié)=case
when 成績>=90 then '成績優(yōu)秀'
when 成績<90 and 成績>=80 then '成績良好'
when 成績<80 and 成績>=60 then '成績及格'
else '成績不及格'
end
from 成績表
while
while子句是T-SQL語句支持的循環(huán)結(jié)構(gòu)。在條件為真時,while子句可以循環(huán)執(zhí)行其后一條T-SQL語句。如果要循環(huán)執(zhí)行一組命令,需要配合begin……end子句使用。
while <條件表達式>
begin
<命令行|程序塊>
end
舉例:求1~10之間的整數(shù)和
declare @n int,@sum int
set @n=1
set @sum=0
while @n<=10
begin
set @sum=@sum+@n
set @n=@n+1
end
print @sumwhile ……continue……break
while <條件表達式>
begin
<命令行|程序塊>
[break] --跳出循環(huán),結(jié)束while命令
[continue] --回到循環(huán)第一步
end
舉例1:求1~10之間偶數(shù)的和,用continue進行控制
declare @x int,@sum int
set @x=1
set @sum=0
while @x<10
begin
set @x=@x+1
if @x % 2=0
set @sum=@sum+@x
else
continue
end
- return
return語句用于從查詢或過程中無條件退出。位于return之后的語句不會被執(zhí)行。 - goto
- waitfor
常用命令
- DBCC命令用于驗證數(shù)據(jù)庫完整性、查找錯誤和分析系統(tǒng)使用情況等。
1、DBCC checkalloc 檢查制定數(shù)據(jù)庫的磁盤空間分配結(jié)構(gòu)的一致性;
2、DBCC showcontig 顯示指定表的數(shù)據(jù)和索引的碎片信息; - checkpoint
- declare
- raiserror
- readtext
- backup 數(shù)據(jù)備份
backup database 數(shù)據(jù)庫名 to disk='文件名.bak'
-restore
-select 除了查詢,還可以賦值
-set,一方面用于局部變量賦值,一方面用于執(zhí)行SQL命令時SQL Server的處理選項設(shè)定
-shutdown立即停止SQL Server的執(zhí)行。
-writetext
-use