引言:

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

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 then 值1        When 条件表达式2 then 值2
Else 值3 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 THENRETURN(翻译值1)
ELSIF 条件=值2 THENRETURN(翻译值2)......
ELSIF 条件=值n THENRETURN(翻译值n)
ELSERETURN(缺省值)
END IFdecode(字段或字段的运算,值1,值2,值3)这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式

1.2 If条件分支语句

**Oracle和MSsql下唯一的区别在于:MSsql下是else if而Oracle下的是elsif**
IF 条件=值1 THENRETURN(翻译值1)
ELSIF 条件=值2 THENRETURN(翻译值2)......
ELSIF 条件=值n THENRETURN(翻译值n)
ELSERETURN(缺省值)
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; 

SQL 中条件、循环语句的应用整理相关推荐

  1. SQL中的循环语句_类似FOR循环

    DECLARE @a int    SET   @a = 0     WHILE   @a<=10    BEGIN                    PRINT   @a          ...

  2. sql脚本语言中的循环语句介绍

    sql脚本语言中的循环语句介绍 –sql脚本语言的循环介绍: –1.goto循环点. declare x number; begin x:=0;–变量初始化: <<repeat_loop& ...

  3. oracle sql循环判断语句怎么写,Oracle 非常详细的 PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理...

    PL/SQL入门教程目录 Oracle PL/SQL入门教程,PL/SQL语法格式/循环语句/条件判断/异常处理 一.PL/SQL简介 1.PL/SQL简介 1.PL/SQl是过程语言PL与结构化语言 ...

  4. Shell中的循环语句for、while、until实例讲解

     在编程语言中,循环语句是最基本的语法之一,在Shell(这里是Bash)中也不例外,再把以前自己写过的相关内容整理一下吧. 这里包括for/while/until循环,以及变量自增的语法实例. ...

  5. php中用for循环制作矩形,PHP中for循环语句的几种变型

    PHP中for循环语句的几种变型 2021-01-22 10:21:42406 for语句可以说是PHP(同时也是多种语言)的循环控制部份最基本的一个语句了,for语句的执行规律和基础用法在这里就不多 ...

  6. python循环语句-详解Python中的循环语句的用法

    一.简介 Python的条件和循环语句,决定了程序的控制流程,体现结构的多样性.须重要理解,if.while.for以及与它们相搭配的 else. elif.break.continue和pass语句 ...

  7. 【C语言进阶深度学习记录】七 C语言中的循环语句

    文章目录 1 循环语句分析 1.1 do...while循环 1.2 while循环 1.3 for循环 1.4 三种循环语句使用对比 2 break和continue的区别 3 总结 1 循环语句分 ...

  8. 【转】foreach for each for_each引发的探讨:c++世界中的循环语句

    转自:foreach for each for_each引发的探讨:c++世界中的循环语句_w_419675647的博客-CSDN博客 一 背景: 代码中看到 for each,注意,两个单词中间没有 ...

  9. [转载] Python入门(输入/输出、数据类型、条件/循环语句)

    参考链接: Python中的循环技术 在介绍之前我们先来看看计算机的三个根本性基础: 1.计算机是执行输入.运算.输出的机器 2.程序是指令和数据的集合 3.计算机的处理方式有时与人们的思维习惯不同 ...

  10. PHP中for循环设计无穷循环,PHP中for循环语句的几种“变态”用法

    PHP中for循环语句的几种"变态"用法 for语句可以说是PHP(同时也是多种语言)的循环控制部份最基本的一个语句了,for语句的执行规律和基础用法在这里就不多说,可以参见PHP ...

最新文章

  1. python掌握程度怎么判断-Python学到什么程度可以面试工作?
  2. STM 32如何实现程序自加密
  3. css 宽高自适应的div 元素 如何居中 垂直居中
  4. [Android]SQLite的使用
  5. [转载]一个发生在亚洲服务器上的真实故事!
  6. oracle10g 64位安装包下载地址,Oracle10g下载地址--多平台下的32位和64位
  7. vue实现垂直无限滑动日历组件
  8. 网络通信——下载管理器DownloadManager——利用POST方式上传文件
  9. SCM-PEG2000-Maleimide,Mal-PEG2000-Succinimidyl Carboxymethyl Ester
  10. Vmware 打不开vmx文件
  11. solr6.3与MySQL结合使用
  12. 使用机器人工具箱在matlab上进行六轴机器人(6R)运动学建模【个人简记】
  13. 华为交换机查看本机mac地址命令
  14. 使用Metasploit对MSSQL渗透测试步骤——学习笔记
  15. 【J】BeanCreationException: Error creating bean with name 'shiroFilter' defined in class path resource
  16. QQ轻聊版、TIM版无法修改个人文件夹位置的解决方法
  17. puzzle(0211)几何划分问题
  18. 大数据之路、阿里巴巴大数据实践读书笔记 --- 第二章、日志采集
  19. FFplay文档解读-45-视频过滤器二十
  20. 能用10年的电动车牌子是什么?绿源电动车了解一下吧

热门文章

  1. [转]高精度乘法计算
  2. Android 离线人脸识别方案总结
  3. NIO、AIO概述总结
  4. Arduino设置esp8266实现局域网通信
  5. 英国手机漫谈之签手机喽!
  6. react-native 拨打电话
  7. 解决实验室服务器无法连网问题
  8. 高等数学:第八章 多元函数的微分法及其应用(3)全微分
  9. 不站队的UCloud,才是最可怕的
  10. 王春亮推拿正骨与按摩心理学高级师传培训班