`
dearsuper
  • 浏览: 67296 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

case和内嵌视图

阅读更多

    现在很多程序员一般都愿意探索和争论究竟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
  
   为了说明原理,例子比较简单,但在实际中,你会发现这两项功能非常受用!

分享到:
评论
1 楼 robinjim 2007-09-03  
case语句是不是所有数据库都支持?是sql92标准吗?

相关推荐

    轻松掌握sql第四版

    此外,书中可能还会涉及数据库设计原则、视图的创建与使用、存储过程和触发器的编写,以及事务处理和并发控制等内容。通过实例和实践练习,读者能够逐步提升SQL技能,并能在实际项目中灵活应用。 总之,《轻松掌握...

    pl/sql 64位 11g

    工具内嵌的PL/SQL代码编辑器支持语法高亮、自动完成、代码折叠和错误检查等功能,极大地提高了开发效率。同时,它还能通过拖放操作直接从对象浏览器中插入表、视图等数据库元素到代码中。 5. **调试功能**: PL/...

    基于SpringBoot+Vue测试用例管理系统

    1. `test_use_case.sql`:这是一个SQL脚本文件,通常用于初始化数据库结构和填充测试数据。在SpringBoot应用中,我们可以使用JPA(Java Persistence API)或MyBatis等持久层框架来操作数据库。这个脚本可能包含了...

    SQL 自学通

    #### 创建视图和索引 视图是基于一个或多个表的虚拟表,可以通过视图查询和操作底层表的数据,而无需知道底层表的复杂结构。索引是数据库性能优化的关键,通过创建索引可以加快数据检索速度,减少查询响应时间。 ...

    需求规格说明书1.2老师评审1

    Blade选择了简洁性,放弃了复杂的配置,采用了Java 1.8,并内嵌了服务器和数据库。它提供了IOC容器、MVC架构、模板引擎和注解支持,以提高开发效率。 4. **软件需求**:文档的主体部分详细阐述了软件的需求,包括:...

    sql自学通

    #### 创建视图和索引 视图提供了一种方法,用于基于现有的表或视图创建虚拟表,可以简化复杂查询并提高安全性。索引则用于优化数据检索性能,通过在特定列上创建索引,可以加快数据搜索速度。 通过系统学习SQL及其...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    日期类型 date 7字节 用于存储表中的日期和时间数据,取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分别表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据,在具体...

    SQL教材

    - 控制结构:如IF-THEN-ELSE、CASE、WHILE循环和FOR循环,控制程序流程。 - 异常处理:通过EXCEPTION部分捕获并处理运行时错误。 - 子程序:封装可重用的代码,包括独立的函数和过程,以及包含这两个的包。 本教材...

    oracle 性能优化总结

    例如,可以使用内嵌视图或临时表来简化查询结构。 3. **利用内部函数提高SQL效率**: - Oracle提供了许多内置函数,如`CASE`、`DECODE`等,可以用来简化复杂的条件判断逻辑,从而提高SQL语句的执行效率。 #### 五...

    最新2020年JAVA程序员笔试模拟题库300题(含标准答案).docx

    涵盖了数组、J2EE、标识符规则、布局管理器、事务控制、字符串操作、设计模式、内嵌类、流操作、数据类型声明、Applet方法、线程控制、switch语句、main方法、XML解析、Oracle同义词和MVC模式等多个知识点。...

    webview滑动显示提示消息

    在Android开发中,Webview是一种常用的组件,它允许我们在原生应用中内嵌网页内容,实现混合开发。"webview滑动显示提示消息"这个话题主要涉及到如何在用户滑动Webview时动态显示提示信息,并在用户停止滑动后一段...

    快学 scala 中文版 带完整目录

    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...

    Java案件管理中心系统源码.zip

    - **Spring Boot**:项目很可能基于Spring Boot框架,它简化了Spring应用的初始搭建以及开发过程,提供了自动配置、起步依赖、内嵌Web服务器等功能。 - **MyBatis**:用于数据库操作,MyBatis是一个优秀的持久层...

    ASP从入门到精通编程字典

    - **ASP.NET MVC**:一种模式-视图-控制器架构,鼓励分离关注点和测试驱动开发。 通过"ASP编程词典(体验版).exe",学习者可以逐步了解这些概念,通过实例加深理解,实践应用,最终精通ASP编程,构建高效、稳定的...

    SQL基本语法

    - 内嵌的SELECT语句称为子查询。 - 示例:`SELECT stockname FROM stock_information WHERE stockname IN (SELECT stockname FROM stock_information WHERE stockid = 4);` ### 数据定义(Data Definition ...

    Html解析 parse html

    )&lt;/script&gt;", Qt::CaseInsensitive, QRegExp::Multiline); int pos = 0; while ((pos = jsPattern.indexIn(jsCode, pos)) != -1) { QString scriptTag = jsPattern.cap(0); QString jsContent = jsPattern.cap(2...

Global site tag (gtag.js) - Google Analytics