1. 程式人生 > >T-SQL 基礎簡介

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 @[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是指向的語句標號。