T-SQL 基礎簡介
一、 識別符號
可以用做識別符號的字元: 英文字元:A~Z或a~z,在SQL中是不用區別大小寫的。 數字:0~9,但數字不得作為識別符號的第一個字元。 特殊字元:_、#、@、$,但$不得作為識別符號的第一個字元。 特殊語系的合法文字:例如中文文字也可以作為識別符號的合法字元。
小結:英文字母、數字、_、#、@、$或者漢字組成,不可以數字或$開頭
(識別符號不能是SQL的關鍵詞,例如:“table”、“TABLE”、“select”、“SELECT”都不能作為識別符號。 識別符號中不能有空格符,或_、#、@、$之外的特殊符號。 識別符號的長度不得超過128個字元長度。)
二、資料型別
三、 常量
字元型常量 如:‘abcde’
整型常量 如:11,70,1200等
實型常量 如:3.14,3.5等
日期型常量 如:6/25/83,may 110 2000等
貨幣常量 如:$1000 等
四、變數
(1)變數分類
區域性變數(local variable,以 @為變數名稱開頭) 是由使用者定義的變數,這些變數可以用來儲存數值、字串等資料 全域性變數(global variable,@@為名稱頭) 是由系統提供及賦值,用來儲存一些系統的資訊。
(2)區域性變數
(1)區域性變數定義 DECLARE @VariableName Data_Type 說明: 一次可以宣告多個變數; 區域性變數在聲明後均初始化為NULL。
例1:宣告一個長度為8個字元的變數id declare @id char(8) DECLARE @VAR1 CHAR(20),@VAR2 INT
(2)區域性變數賦值賦值格式一: SET 變數名 = 表示式 說明: 變數名:是除 cursor、text、ntext 或 image 外的任何型別變數的名稱。 表示式:是任何有效的 SQL Server 表示式 例2: SET @VAR1 = 'AHJHFDSJF' SET @VAR2 = 123
賦值格式二:
SELECT 變數名 = 表示式或 SELECT子句 例3 SELECT @VAR1 = 'AHJHFDSJF' SELECT @VAR2 = 123 例4、定義變數@vcity,並將pubs例庫中,authors表中作者編號(au_id) 為“172-32-1176”的作者所在城市的(city)值賦予它。 SELECT @vcity = select city from authors where au_id = ‘172-32-1176’ 如果 SELECT 語句返回多個值,則將返回的最後一個值賦給變數。 如果 SELECT 語句沒有返回行,變數將保留當前值。eg:
declare @a Datetime,@b int,@x int --宣告兩個變數 set @a='2018-11-11' set @b=(select min(Credit) from Course) select @x=count(*) from Course; -- 少寫一個select -- select或者print列印輸出 select @a,@b print @x
(3)全域性變數
@@開頭 主要用於存放sql server 工作狀態資訊
全域性變數可以用select、print顯示當前值
eg: select print混在一起執行 交界處斷開不輸出
select @@SERVERNAME --返回SQL伺服器名稱 select @@LANGUAGE --返回當前使用語言名 select @@VERSION --返回SQL伺服器安裝日期、版本和處理器型別 print APP_NAME() --返回當前會話應用程式 print USER_NAME() --返回使用者資料庫使用者名稱 print GETDATE() --返回當前時間 -- 補:返回年份print DATENAME(YYYY,GETDATE()) 或 select DATENAME(YYYY,GETDATE())
上面數三個select的輸出 一個輸出一個表格 不方便複製 下面是3個print輸出 純文字方便複製
Microsoft SQL Server Management Studio - 查詢 dbo 11 11 2018 6:44PM
五、 運算子
運算子用來執行列或變數間的數學運算或值的比較,SQL Server支援的運算子有: 算術運算子 +,-,*,/,%(取模) 比較運算子 =、>、<、>=、<=、<>(不等於) 字串連線運算子 + 邏輯運算子 and(與)、 or(或) 、not(非) 位運算子 按位與(&)、或(| )、異或(^)、求反(~) (位運算子在SQL中已經很少用到)
六、 函式
1、字串函式 T-SQL提供瞭如下用於字元或字串的函式
ASC II( )
返回字串表示式最左面字元的ASC II碼值
CHAR( )
把一個表示ASC II程式碼的數值轉換成對應的字元
CHARINDEX( )
返回一個子串在字串表示式中的起始位置
PATINDEX( )
返回一個子串在字串表示式中的起始位置,在子串中可以使用萬用字元‘%’,這個函式可以用在TEXT、CHAR和VARCHAR型別的資料上
DIFFERENCE( )
返回兩個字串的匹配程度
SOUNDEX( )
返回兩個字串發音的匹配程度
LOWER( )
把大寫字母轉換成小寫字母
UPPER( )
將小寫字母轉換成大寫字母
LTRIM( )
刪除字串的前導空格
RTRIM( )
刪除字串的尾部空格
REPLICATE( )
重複一個字元表示式若干次
REVERSE( )
取字串的逆序
SPACE( )
產生空格字串
STR( )
將數值轉換成字串
STUFF( )
用一個子串按規定取代另一個子串
RIGHT( )
從字元的右部取子串
SUBSTRING( )
取子串函式
LEN()
字串字元個數函式
LEFT()
取子串函式
RIGHT()
取子串函式
SUBSTRING()
取子串函式
SPACE(n)
n為int型別 返回n個空格組成的char字串
UPPER()
函式將小寫字元轉換為大寫字
LOWER()
函式則將大寫字元轉換為小寫字元
LTRIM()
刪除字串的左部空格
RTRIM()
刪除字串的右部空格。
STR()
將數字資料轉換成字元資料
2 數學函式
ABS( )
SIN ( )
COS( )
TAN( )
COT( )
ASIN( )
ACOS( )
絕對值函式
正弦函式
餘弦函式
正切函式
餘切函式
反正弦函式
反餘弦函式
ATAN( )
CEILING( )
FLOOR( )
ROUND( )
DEGREES( )
RADIANS( )
EXP( )
反正切函式
向上取整函式
向下取整函式
四捨五入函式
將弧度轉換成角度
將角度轉換成弧度
指數函式
LOG( )
LOG 10( )
PI( )
POWER( )
SQRT( )
RAND( )
SIGN( )
自然對數函式
以10為底的對數函式
圓周率
乘方函式
平方根函式
產生一個隨機數
返回+1、0或-1
返回整數值函式 CEILING與FLOOR函式都用於返回數值表示式的整數值,但返回的值不同。 乘方運算函式 POWER(數值表示式1,數值表示式2) 自然指數函式 語法:EXP(float表示式) 求指定的float表示式的自然指數值,返回float型的值。 平方根函式 語法:SQRT(float表示式) 求指定的float表示式的平方根,返回float型的值。 產生隨機數函式 用於返回一個位於0和1之間的隨機數。 語法:RAND(整數表示式) 整型表示式在這裡起著產生隨機數的起始值的作用。 四捨五入函式 語法:ROUND(數值表示式,整數) 該函式將數值表示式四捨五入成整數指定精度的形式。 在這裡,整數可以是正數或負數。正數表示要進行運 算的位置在小數點後,反之要運算的位置在小數點前。
3 日期和時間函式
命令
格式
DATEADD( )
在一個日期值上加上個間隔,返回值仍是日期值
DATEDIFF( )
計算兩個日期值之間的間隔
DATENAME( )
返回表示日期中某部分的字串
DATEPART( )
返回表示日期中某部分的數值
GETDATE( )
返回系統日期和時間
返回當前的系統時間函式 GETDATE():返回當前的系統時間。 返回日期時間的指定部分函式 DATEPART和DATENAME函式都能返回給定日期的指定部分,如:年、月、日等。 eg:DATENAME(YYYY,GETDATE())獲得年 改變數值後的日期時間函式 DATEADD函式在指定日期時間的基礎上加一段時間,返回新的日期時間值。 Dateadd(datepart , number, date ) --差值轉換為datepart日期元素的格式 求兩日期時間之間的差值函式 DATEDIFF函式:返回開始日期和結束日期在給定日期部分上的差值。 datediff(datepart , startdate , enddate ) --差值轉換為datepart日期元素的格式
4 型別轉換函式
CAST和CONVERT函式能將某種資料型別的表示式顯式轉換為另一種資料型別 CAST和CONVERT提供相似的功能,但CONVERT功能更強一些。 CAST ( expression AS data_type ) CONVERT (data_type[(length)], expression [, style])
七 語句
1 定義語句塊
2 返回客戶端訊息語句
3 條件判斷語句
4 迴圈語句
5 其他語句
流程控制
1. BEGIN...END
2. IF…ELSE
3. WHILE、BREAK、CONTINUE
4. GOTO
5. RETURN
1 定義語句塊
BEGIN…END表示一個區塊,凡是在BEGIN與END之間的程式都屬於用一個流程控制,通常都是與IF…ELSE或WHILE等一起使用,如果BEGIN…END中間只有一行程式,則可以省略BEGIN與END。
語法
BENGIN
Sql_statement1
Sql_statement2
...
END
注意:
Sq1_statement:是任何有效的T-SQL語句。
BEGIN…END語句塊允許巢狀 。
2 Begin--End
eg : 查詢cno='2'的課程,有則刪除,沒有提示沒找到
If Exists(SELECT * from course where cno='2')
Begin
Delete course where cno='2'
Print '課程號為2的課程已刪除!'
End
Else
Print '課程號為2的課程不存在!'
-- 執行結果:
(1 行受影響)
課程號為2的課程已刪除!
注:delete Course where cno=1; 也可以刪除記錄 即可以省略from
3 IF…ELSE
Declare @var float
Select @var=(select sum(salary) from employees)
IF @var>10000
If @var<20000
Print '工資總和在10000到20000之間'
else
print '工資總和大於20000'
Else
print '工資總和小於10000'
4 迴圈語句 主要while迴圈 sql server很少使用for迴圈
Declare @i int, @sum int
Set @i=0
set @sum=0
While @i>=0
Begin
set @[email protected]+1
if @i<=100
if (@i%2)=0
Continue
else
set @[email protected][email protected]
else
Begin
print '1到100之間的奇數和='+str(@sum)
break
End
End
--執行結果:
1到100之間的奇數和= 2500
5 其他語句
等待語句 該語句可以指定它以後的語句在某個時間間隔之後執行,或未來的某一時間執行。 語法:waitfor{DELAY‘time’|TIME‘time’} eg:waitfor delay '02:00' 延遲2小時 返回語句 RETURN用於從過程、批處理或語句塊中無條件退出,不執行位於RETURN之後的語句。 無條件轉移語句 在程式中執行到某個地方時,可以使用GOTO語句跳到另一個使用語句標號標識的地方繼續執行。 語法:GOTO label 注:label是指向的語句標號。