SQL 中条件、循环语句的应用整理

2 篇文章 0 订阅

引言:

作为程序员一族,无论是任何语言,最基本的语句都离不开顺序、条件(选择)、循环这三大逻辑结构,有些知识不经常使用的话就会模糊,所以即使是很简单的知识点也想做个总结。

1、条件分支(SQL中的条件分支实现主要有两种形式:Case 和If

1.1 Case When 语句

Case when具有两种格式:简单Case函数和Case搜索函数。 另外有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略,(且在Oracle下受任何数据对象的名称长度不能超过30个字符的约束,返回的值也不能超过30个字符,MSSQL下不是很确定是否也有此限制)

1.1.1 简单Case 函数

例:当sex='0'时返回男,sex='1'返回女,否则返回'人妖'
Case sex        
    when'0' then'男'        
    when '1' then'女'        
Else'人妖' End

1.1.2 Case 搜索函数

当条件表达式1成立则返回男,当条件表达式2成立则返回值2,否则返回值3,其中条件表达式里还可以嵌套,也可以调用函数等等,任何合理的逻辑表达式都可以。

Case When 条件表达式1 then1        
    When 条件表达式2 then2        
Else3 End
例:
case when F_RCJC_UserInPersonIds(e.Pdm_Rcjc_Entrusttestid,'{@sysuserid}')='1' and e.State>32 then '1' 
               when F_RCJC_UserInPersonIds(e.Pdm_Rcjc_Entrusttestid,'{@sysuserid}')='1' and  e.State=32 then '0'
                      else '2' end)  OperateState

1.1.3 Case 的实际应用:

1.1.3.1 统计各班级的男生人数和女生人数
Select 
SUM(case when sex='1' then 1 else 0 end) 男生数,
SUM(case when sex='0' then 1 else 0 end ) 女生数
From T_Students
Group by grade
1.1.3.2各班成绩按分数分级并统计人数
Select grade,(case when score<60 then '不及格'  
    when score>=60 and score<=70 then '及格'  
    when score>70 and score<=90 then '良好'  
    when score>90 then '优秀'  
    else null end) ScoreClass,  
    COUNT(*) 人数  
From T_Students    
Group by grade,  
(case when score<60 then '不及格'  
    when score>=60 and score<=70 then '及格'  
    when score>70 and score<=90 then '良好'  
    when score>90 then '优秀'  
    else null end)   
    order by grade  
1.1.3.3工资管理中根据不同的实现更新条件,工资以上的职员,工资减少XX,工资在X到XX之间的职员,工资增加 X
Update T_Employee       
    Set salary = (case when salary >= 6000 then salary * 0.9  
    when salary >= 2400 AND salary < 5600 then salary * 1.15  
    else salary end

1.2 Oracle 中特有的Decode

**decode**(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

decode(字段或字段的运算,值1,值2,值3)

       这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式

1.2 If条件分支语句

**Oracle和MSsql下唯一的区别在于:MSsql下是else if而Oracle下的是elsif**
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
ELSIF 条件=值n THEN
    RETURN(翻译值n)
ELSE
    RETURN(缺省值)
END IF

小结:

Case函数不同于DECODE函数。在Case函数中,可以使用BETWEEN,LIKE,IS NULL,IN,EXISTS等等,通过在Case函数中嵌套Case函数,在合计函数中使用Case函数等方法,也可以在Check、触发器等中使用Case。

2、循环分支For和While

2.1For循环

for  变量  in  开始数值...结束数值 loop     end loop;

2.2While循环

只要表达式成立就执行循环语句
**while** 条件表达式 loop 
  循环语句
end loop; 

2.3简单应用

计算出1到100的和

**for实现:**
for i in 1..100 loop   
  i:=i+1;  
end loop

**While实现:**
while i<100 loop 
  i:=i+1; 
end loop; 
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrazyMo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值