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
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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章