现在很多程序员一般都愿意探索和争论究竟java平台还是.net平台哪个执行效率更高,特别是使用hibernate以后,更加不关注自己所写的sql语句的执行效率。
而我认为,程序的核心就是要和数据库打交道,而数据库操作就离不开sql语句。因此,在程序设计中的数据处理方式和sql语句的编写就尤为重要。一个蠢笨的数据处理流程和一段执行效率很低的sql语句往往是影响系统速度的重要原因。
1、单条件case语句
case语句是很有用的,用case语句加内嵌视图,往往能用一个sql语句解决原来要用多段sql才能解决的问题。
例子:员工表:employee字段:
bianh 编号,主键
bum_bianh 部门编号
xingb 性别(1:男性,2:女性)
xingm 姓名
gongzi 工资
部门表:department字段:
bum_bianh 部门编号
mingch 部门名称
问题:用一个语句统计出某一部门的总人数,以及男性、女性的人数
select department.mingch,count(employee.bianh),sum(case xingb when 1 then 1 else 0 end) as nanren_shu,
sum(case xingb when 2 then 1 else 0 end) as nvren_shu
from employee,department
where employee.bum_bianh = department.bum_bianh
group by department.mingch
order by department.mingch
注意:语句中用的是sum(),而不是count(),想想为什么?
结果:
mingch nanren_shu nvren_shu
部门1 40 29
部门2 39 21
部门3 11 27
2、多条件case语句
问题:用一个语句统计出某一部门的总人数,以及男性中,工资高于和低于3000的人数,女性中,工资高于和低于3000的人数
select department.mingch,count(employee.bianh),sum(case when xingb=1 and gongzi>=3000 then 1 else 0 end) as nanren_shu1,sum(case when xingb=1 and gongzi<3000 then 1 else 0 end) as nanren_shu2,sum(case when xingb=2 and gongzi>=3000 then 1 else 0 end) as nvren_shu1,sum(case when xingb=2 and gongzi<3000 then 1 else 0 end) as nvren_shu2
from employee,department
where employee.bum_bianh = department.bum_bianh
group by department.mingch
order by department.mingch
3、内嵌视图
我们都知道视图,所谓内嵌视图,就是在执行的时候才建立的视图。它是临时的,并不要真的用create view语句来建立一个视图。
某一个sql查询都可以定义成内嵌视图,然后给这个内嵌视图命个名字,在此基础上再和别的表形成联合查询。并且,查询的结果,又可以再命名为一个新的内嵌视图的名字,多次嵌套都没问题。有些sql语句为什么写那么长,把人家几段语句执行的功能合成为一句就够了呢?就是用的这个办法。
我要得到一个结果,就是在员工名单的基础上,增加一列显示:该部门的平均工资
select employee.bianh,employee.xingm,employee.gongzi,bum_pingj.pingj_gongzi
from employee,(select bum_bianh,avg(gongzi) as pingj_gongzi from employee group by bum_bianh) as bum_pingj
where employee.bum_bianh = bum_pingj.bum_bianh
order by employee.bianh
为了说明原理,例子比较简单,但在实际中,你会发现这两项功能非常受用!
分享到:
相关推荐
此外,书中可能还会涉及数据库设计原则、视图的创建与使用、存储过程和触发器的编写,以及事务处理和并发控制等内容。通过实例和实践练习,读者能够逐步提升SQL技能,并能在实际项目中灵活应用。 总之,《轻松掌握...
工具内嵌的PL/SQL代码编辑器支持语法高亮、自动完成、代码折叠和错误检查等功能,极大地提高了开发效率。同时,它还能通过拖放操作直接从对象浏览器中插入表、视图等数据库元素到代码中。 5. **调试功能**: PL/...
1. `test_use_case.sql`:这是一个SQL脚本文件,通常用于初始化数据库结构和填充测试数据。在SpringBoot应用中,我们可以使用JPA(Java Persistence API)或MyBatis等持久层框架来操作数据库。这个脚本可能包含了...
#### 创建视图和索引 视图是基于一个或多个表的虚拟表,可以通过视图查询和操作底层表的数据,而无需知道底层表的复杂结构。索引是数据库性能优化的关键,通过创建索引可以加快数据检索速度,减少查询响应时间。 ...
Blade选择了简洁性,放弃了复杂的配置,采用了Java 1.8,并内嵌了服务器和数据库。它提供了IOC容器、MVC架构、模板引擎和注解支持,以提高开发效率。 4. **软件需求**:文档的主体部分详细阐述了软件的需求,包括:...
#### 创建视图和索引 视图提供了一种方法,用于基于现有的表或视图创建虚拟表,可以简化复杂查询并提高安全性。索引则用于优化数据检索性能,通过在特定列上创建索引,可以加快数据搜索速度。 通过系统学习SQL及其...
日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...
- 控制结构:如IF-THEN-ELSE、CASE、WHILE循环和FOR循环,控制程序流程。 - 异常处理:通过EXCEPTION部分捕获并处理运行时错误。 - 子程序:封装可重用的代码,包括独立的函数和过程,以及包含这两个的包。 本教材...
例如,可以使用内嵌视图或临时表来简化查询结构。 3. **利用内部函数提高SQL效率**: - Oracle提供了许多内置函数,如`CASE`、`DECODE`等,可以用来简化复杂的条件判断逻辑,从而提高SQL语句的执行效率。 #### 五...
涵盖了数组、J2EE、标识符规则、布局管理器、事务控制、字符串操作、设计模式、内嵌类、流操作、数据类型声明、Applet方法、线程控制、switch语句、main方法、XML解析、Oracle同义词和MVC模式等多个知识点。...
在Android开发中,Webview是一种常用的组件,它允许我们在原生应用中内嵌网页内容,实现混合开发。"webview滑动显示提示消息"这个话题主要涉及到如何在用户滑动Webview时动态显示提示信息,并在用户停止滑动后一段...
14.11 case语句中的中置表示法 231 14.12 匹配嵌套结构 232 14.13 样例类是邪恶的吗 233 14.14 密封类 234 14.15 模拟枚举 235 14.16 Option类型 235 14.17 偏函数 L2 236 练习 238 第15章 注解 A2243 15.1...
- **Spring Boot**:项目很可能基于Spring Boot框架,它简化了Spring应用的初始搭建以及开发过程,提供了自动配置、起步依赖、内嵌Web服务器等功能。 - **MyBatis**:用于数据库操作,MyBatis是一个优秀的持久层...
- **ASP.NET MVC**:一种模式-视图-控制器架构,鼓励分离关注点和测试驱动开发。 通过"ASP编程词典(体验版).exe",学习者可以逐步了解这些概念,通过实例加深理解,实践应用,最终精通ASP编程,构建高效、稳定的...
- 内嵌的SELECT语句称为子查询。 - 示例:`SELECT stockname FROM stock_information WHERE stockname IN (SELECT stockname FROM stock_information WHERE stockid = 4);` ### 数据定义(Data Definition ...
)</script>", Qt::CaseInsensitive, QRegExp::Multiline); int pos = 0; while ((pos = jsPattern.indexIn(jsCode, pos)) != -1) { QString scriptTag = jsPattern.cap(0); QString jsContent = jsPattern.cap(2...