SQL 中条件、循环语句的应用整理
来源:互联网 发布:网络语言大二班 编辑:程序博客网 时间:2024/06/05 20:58
引言:
作为程序员一族,无论是任何语言,最基本的语句都离不开顺序、条件(选择)、循环这三大逻辑结构,有些知识不经常使用的话就会模糊,所以即使是很简单的知识点也想做个总结。
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_StudentsGroup 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 IFdecode(字段或字段的运算,值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;
0 0
- SQL 中条件、循环语句的应用整理
- R语言中条件及循环语句的应用
- SQL 查询语句中交叉条件的应用!
- SQL 查询语句中交叉条件的应用!
- Oracle PL/SQL 中循环语法语句的应用
- SQL中循环语句
- 我的php学习笔记(三)条件语句和循环语句的介绍与应用
- 条件语句、循环语句中创建的变无法在语句外使用
- 循环语句的应用
- 循环语句&条件语句
- 条件语句、循环语句
- SqlServer中循环和条件语句示例!
- SqlServer中循环和条件语句示例!
- SQL 语句的整理!
- 整理的sql语句
- where条件语句的应用
- delphi中多条件SQL语句的增加注意事项
- ibatis里面sql语句中条件使用like的写法
- Google Volley框架源码走读
- java 网格组布局
- 第1章 算法在计算中的作用
- Hadoop配置文件参数整理(2)---hdfs-site.xml
- [LeetCode]Implement Stack using Queues
- SQL 中条件、循环语句的应用整理
- C++ 10.4 关联容器-----set 类型
- android使用红杏代理更新sdk
- Redis内存管理
- google镜像网站大全
- #ifndef#define#endif防止头文件重复包含, 你不是真的懂
- Volley学习之一AtomicInteger
- Hadoop配置文件参数整理(3)---mapred-site.xml
- java中Collections.sort() 排序函数的用法