T-SQL常用語法

一、批處理:

<span style="font-size:12px;">SELECT * FROM Students
SELECT * FROM Student_course
UPDATE Student_course 
   SET Student_grade=Student_grade+2 
GO
</span>

 

GO是批處理的標誌,表示SQL Server將這些T-SQL語句編譯爲一個執行單元,提高執行效率

一般是將一些邏輯相關的業務操作語句,放置在同一批中,這完全由業務需求和代碼編寫者決定

SQLServer規定:如果是建庫、建表語句、以及我們後面學習的存儲過程和視圖等,則必須在語句末尾添加 GO 批處理標誌

二、變量:

局部變量:

局部變量必須以標記@作爲前綴,如@age

局部變量的使用也是先聲明,再賦值

全局變量:

全局變量必須以標記@ @作爲前綴,如@@version

全局變量由系統定義和維護,我們只能讀取,不能修改全局變量的值

聲明局部變量

     DECLARE   @變量名  數據類型

例如:

DECLARE @name varchar(8)

DECLARE @seat int

 

賦值

          SET @變量名 =

      SELECT  @變量名 =

例如:

SET @name=‘張三’

SELECT @name=stuName FROM stuInfo

        WHERE stuNo=‘s25302’ 

全局變量都使用兩個@標誌作爲前綴

變量

含義

@@ERROR

最後一個T-SQL錯誤的錯誤號

@@IDENTITY

最後一次插入的標識值

@@LANGUAGE

當前使用的語言的名稱

@@MAX_CONNECTIONS

可以創建的同時連接的最大數目

@@ROWCOUNT   

受上一個SQL語句影響的行數

@@SERVERNAME

本地服務器的名稱

@@TRANSCOUNT

當前連接打開的事務數

@@VERSION 

SQL Server的版本信息

參考語句

<span style="font-size:12px;">print  'SQL Server的版本'+@@VERSION 
print  '服務器的名稱: '+@@SERVERNAME 
INSERT INTO Students(Student_id,Student_name,Student_sex,Student_classid)   
     VALUES(‘11003’,‘張三’,'男',‘2005022')
--如果大於0表示上一條語句執行有錯誤
print '當前錯誤號'+convert(varchar(5),@@ERROR)
GO
</span>


 

三、BEGIN…END語句

BEGIN

    語句1

    語句2

    ……

END

BEGIN…END

語句相當於其他語言中的複合語句,如JAVA語言中的{ }。它用於將多條T-SQL語句封裝爲一個整體的語句塊,即將BEGIN…END內的所有T-SQL語句視爲一個單元執行。

 

四、IFELSE語句

IF (條件)

  BEGIN

    語句1

    語句2

    ……

  END

ELSE

 BEGIN

    語句1

    語句2

    ……

  END              -- ELSE是可選部分

--如果有多條語句,才需要BEGIN-END語句塊


                                                                                 表一

問題:

統計並顯示Course_id爲‘1001’的課程的平均分,如果平均分在70以上,顯示“成績優秀“,並顯示前三個最高的成績;如果在70以下,顯示“成績較差“,並顯示後三個最低的成績。

分析:

第一步,統計平均成績存入臨時變量;

第二步,用IFELSE判斷;

USE  Student
GO
DECLARE @myavg  float
SELECT @myavg=AVG (Student_grade) 
               FROM  Student_course
               WHERE  Course_id='1001'
PRINT  ‘本課程的平均成績' +convert(varchar,@myavg)
IF (@myavg>70)
     BEGIN
           PRINT ‘本課程成績優秀,前三個最高的成績爲:'
           SELECT  TOP 3 *  FROM  Student_course 
                         WHERE  Course_id='1001' ORDER BY  Student_grade  DESC 
     END
ELSE
     BEGIN
            PRINT  ‘本課程成績較差,後三個最低的成績爲:'
            SELECT  TOP 3 *  FROM  Student_course 
                             WHERE  Course_id='1001' ORDER BY  Student_grade
      END
GO


五、WHILE循環語句

WHILE (條件)

  BEGIN

    語句1

    語句2

    ……

    BREAK

  END                                  --BREAK表示退出循環如果有多條語句,才需要BEGIN-END語句塊

問題:
表一中假定要給考試成績提分。提分規則很簡單,給沒達到85分的學生每人都加2分,看是否都達到85分以上,如果沒有全部達到85分以上,每人再加2分,再看是否都達到85分以上,如此反覆提分,直到所有人都達到85分以上爲止。

分析:
第一步,統計沒達到85分的人數;
第二步,如果有人沒達到,加分;
第三步,循環判斷。

DECLARE @n int
WHILE(1=1) --條件永遠成立
  BEGIN
    SELECT @n=COUNT(*) FROM Student_course 
            WHERE Student_grade<85    --統計沒達到85分的人數
    IF (@n>0)
       UPDATE Student_course     --每人加2分
            SET Student_grade=Student_grade+2
            WHERE Student_grade<85
   ELSE
       BREAK    --退出循環
  END
print '加分後的成績如下:'
SELECT * FROM Student_course


六、 CASEEND多分支語句

CASE

  WHEN 條件1 THEN  結果1

  WHEN 條件2 THEN  結果2

  ……

  ELSE 其他結果

END

問題:

根據表一採用美國的ABCDE五級打分制來顯示筆試成績。

 A:   90分以上

 B級: 8089

 C:   7079

 D級: 6069

 E級: 60分以下

print  'ABCDE五級顯示成績如下:'
SELECT Student_id,
   成績= CASE  
                  WHEN Student_grade<60 THEN 'E'
                  WHEN Student_grade BETWEEN 60 AND 69 THEN 'D'
                  WHEN Student_grade BETWEEN 70 AND 79 THEN 'C'
                  WHEN Student_grade BETWEEN 80 AND 89 THEN 'B'
                  ElSE    'A'
              END
      FROM Student_course


 

練習:

則根據如下規則對學生成績進行反覆加分,直到平均分超過85分爲止。請編寫T-SQL語句實現。

90分以上:   不加分

8089分:   1

7079分:   2

6069分:   3

60分以下:   5

SELECT * FROM Student_course  --原始成績
SELECT AVG(Student_grade) FROM Student_course --原始平均成績
DECLARE @avg INT
WHILE(1=1)
 BEGIN
    UPDATE Student_course 
      SET Student_grade=
        CASE
            WHEN Student_grade<60 THEN Student_grade+5
            WHEN Student_grade between 60 AND 69 THEN Student_grade+3
            WHEN Student_grade between 70 AND 79 THEN Student_grade+2 
            WHEN Student_grade between 80 AND 89 THEN Student_grade+1
            ELSE Student_grade
        END
     SELECT @avg=AVG(Student_grade) FROM Student_course
     IF  @avg>=85
           BREAK
 END
SELECT * FROM Student_course  --加分後的成績
SELECT AVG(Student_grade) FROM Student_course  --加分後平均成績

總結

變量的賦值有兩種方式:使用SET語句或SELECT語句。

輸出結果也有兩種方式:print語句和SELECT語句。

控制流語句提供了條件操作所需的順序和邏輯。

語句塊使用BEGIN…END

批處理可以提高語句執行的效率,批處理結束的標誌是“GO”

 

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