SQL 脚本二

1、If-Else条件结构
2、While循环结构
3、Case-End多分支结构
4、批处理语句
5、(=)子查询
6、(In、Not In)子查询
7、(EXISTS、Not EXISTS)子查询

 

//定义局部变量


declare @name varchar(8)
declare @seat int

 

//编写T-SQL查找李文才的左右同桌 ?
//局部变量使用(赋值)


set @name='admin'
select @seat=id from stu
where stuname=@name
select * from stu
where (id=@seat-1) or (id=@seat+1)
go

 

//全局变量都使用 @@(两个)标志作为前缀

 

print '版本号'+@@version
print '服务器'+@@servername
insert into stu(stuname,stupwd,email)values('ces','ces','c@c.c')
print '错误号'+convert(varchar(5),@@error)
print '最后ID'+convert(varchar(5),@@identity)
update stu set email='a' where id=@@identity
print '错误:'+convert(varchar(5),@@error)
go

 

//SQL中的IF-ELSE语句


declare @myavg int
select @myavg=avg(score1) from stuscore
print '平均分:'+convert(varchar(5),@myavg)
if (@myavg>90)
begin
 print '成绩优秀'
 select top 3 * from stuscore order by score1 desc
end
else
begin
 print '成绩不好'
 select top 3 * from stuscore order by score1
end
go

 

//SQL中的WHILE语句


declare @n int
while(1=1)
begin
 select @n=count(*) from stuscore where score1<60
 if(@n>0)
  update stuscore set score1=score1+2
 else
  break
end
print '加分以后的成绩:'
select * from stuscore
go

 

//SQL中的CASE-END多分支


select uid as 学号,score1 as 笔试,score2 as 面试,(score1+score2)/2 as 平均分,
 等级=case
  when (score1+score2)/2 <60 then '不及格'
  when (score1+score2)/2 between 60 and 69 then '及格'
  when (score1+score2)/2 between 70 and 79 then '一般'
  when (score1+score2)/2 between 80 and 89 then '良好'
  when (score1+score2)/2 between 90 and 100 then '优秀'
 end
from stuscore
go

 

//则根据如下规则对机试成绩进行反复加分,直到平均分超过85分为止。请编写T-SQL语句实现。


90分以上:   不加分
80-89分:   加1分
70-79分:   加2分
60-69分:   加3分
60分以下:   加5分

declare @myavg int
while(1=1)
begin
 select @myavg=avg(score1) from stuscore
 if(@myavg<75)
  begin
   update stuscore set score1=
   case
    when score1<60 then score1+5
    when score1 between 60 and 69 then score1+3
    when score1 between 70 and 79 then score1+2
    when score1 between 80 and 89 then score1+1
    else
    score1
   end
  end
 else
  break
end
select * from stuscore
go

 

//批处理语句

 

GO是批处理的标志,表示SQL Server将这些T-SQL语句编译为一个执行单元,提高执行效率
一般是将一些逻辑相关的业务操作语句,放置在同一批中,这完全由业务需求和代码编写者决定
SQLServer规定:如果是建库、建表语句、以及我们后面学习的存储过程和视图等,则必须在语句末尾添加 GO 批处理标志

 

//子查询


select * from stu where id>(select id from stu where stuname='admin')

select * from stu where id=(select uid from stuscore where score1=80)

select * from stu where id in (select uid from stuscore where score1>70)

select * from stu where id not in (select uid from stuscore)

 

//子查询-问题1
问题:
编写T-SQL语句,查看年龄比“李斯文”大的学员,要求显示这些学员的信息 ?
分析:
第一步:求出“李斯文”的年龄;
第二步:利用WHERE语句,筛选年龄比“李斯文”大的学员;

方法一
DECLARE @age INT  --定义变量,存放李斯文的年龄
SELECT @age=stuAge FROM stuInfo
     WHERE stuName=‘李斯文’      --求出李斯文的年龄
--筛选比李斯文年龄大的学员
SELECT * FROM stuInfo WHERE stuAge>@age
 GO

方法二
SELECT * FROM stuInfo
WHERE stuAge>( SELECT stuAge FROM 
                      stuInfo where stuName='李斯文')
GO

 

子查询在WHERE语句中的一般用法:
    SELECT … FROM 表1 WHERE 字段1 >(子查询)
 外面的查询称为父查询,括号中嵌入的查询称为子查询
UPDATE、INSERT、DELETE一起使用,语法类似于SELECT语句
将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个

 

//子查询-问题2
问题:查询笔试刚好通过(60分)的学员。
方法一(联结)
SELECT stuName FROM stuInfo
    INNER JOIN   stuMarks
       ON  stuInfo.stuNo=stuMarks.stuNo
           WHERE writtenExam=60
GO
方法二(子查询)
SELECT stuName FROM stuInfo
     WHERE stuNo=(SELECT stuNo FROM 
                stuMarks WHERE writtenExam=60)
GO

 

//EXISTS-问题


问题:
检查本次考试,本班如果有人笔试成绩达到80分以上,则每人提2分;否则,每人允许提5分
分析:
是否有人笔试成绩达到80分以上,可以采用EXISTS检测
答案:
/*--采用EXISTS子查询,进行酌情加分--*/
IF EXISTS (SELECT * FROM stuMarks WHERE writtenExam>80)
  BEGIN
    print '本班有人笔试成绩高于80分,每人加2分,加分后的成绩为:'
    UPDATE stuMarks SET writtenExam=writtenExam+2
    SELECT * FROM stumarks
  END
ELSE
  BEGIN
    print '本班无人笔试成绩高于80分,每人可以加5分,加分后的成绩:'
    UPDATE stuMarks SET writtenExam=writtenExam+5
    SELECT * FROM stumarks
  END
GO

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值