一、 標識符
可以用做標識符的字符:
英文字符: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 @i=@i+1
if @i<=100
if (@i%2)=0
Continue
else
set @sum=@sum+@i
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是指向的語句標號。
八、批處理
1. 批處理:指包含一條或多條T - SQL語句的語句組,這組語句從應用程序一次性地發送到
SQL server服務器執行。
2. 執行單元:SQL server服務器將批處理語句編譯成一個可執行單元,這種單元稱爲執行單元。
3. 若批處理中的某條語句編譯出錯,則無法執行。若運行出錯,則視情況而定。
4. 書寫批處理時,go語句作爲批處理命令的結束標誌,當編譯器讀取到go語句時,會把go語句前
的所有語句當作一個批處理,並將這些語句打包發送給服務器。go語句本身不是T - SQL語句
的的組成部分,只是一個表示批處理結束的前端指令。
注意:
1)create default , create rule , create trigger和create view等語句在同一個批處理中只能提交一個。
2)不能在刪除一個對象之後,在同一批處理中再次引用這個對象。
3)不能把規則和默認值綁定到表字段或者自定義字段上之後,立即在同一批處理中使用它們。
4)不能定義一個check約束之後,立即在同一個批處理中使用。
5)不能修改表中一個字段名之後,立即在同一個批處理中引用這個新字段。
6)使用set語句設置的某些set選項不能應用於同一個批處理中的查詢
7)若批處理中第一個語句是執行某個存儲過程的execute語句,則execute關鍵字可以省略。
若該語句不是第一個語句,則必須寫上。
eg:
use exp6
go
select * from student
go
creacte view view1 as
select * from studnet
where sno = '1'
go
select * from view1
go