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”

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值