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
  
   为了说明原理,例子比较简单,但在实际中,你会发现这两项功能非常受用!

Centos7搭建OpenStack+创建iaas云主机 主要说明在控制节点和计算节点上,通过脚本的形式,安装OpenStack的iaas安装步骤和创建可运行的云主机。提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。 阅读详情

相关推荐

【Clickhouse从入门到精通】第60篇:ClickHouse生态总结与未来展望

ClickHouse系列收官总结 本文作为《ClickHouse从入门到精通》系列的第60篇收官之作,系统回顾了整个系列的知识体系。文章从基础概念到高级应用,全面梳理了ClickHouse的核心技术: 知识体系:完整回顾了60篇文章的知识图谱,包括列式存储原理、MergeTree引擎家族、分布式架构等核心内容 生态工具:详细盘点了ClickHouse的企业版工具、运维监控、数据集成和可视化方案 版本演进:分析了从21.x到24.x的主要版本特性升级 未来趋势:展望了向量化引擎、湖仓一体、AI集成等发展方向

xyghehehehe的专栏 442

MySQL视图中使用IF和CASE语句

在创建视图时,经常需要使用到MySQL的流程控制语句,如:IF语句和CASE语句。 示例:创建MySQL视图中使用IF和CASE语句。 (1)创建员工信息表。 -- 判断数据表是否存在,存在则删除 DROP TABLE IF EXISTS tb_staff; -- 创建数据表 CREATE TABLE IF NOT EXISTS tb_staff ( id INT AUTO_INC...

pan_junbiao的博客 4515

基于分数阶傅里叶变换的chirp信号检测与参数估计(原理附代码)

线性调频信号(chirp信号) 顾名思义,该信号的频率随着时间线性变换,其复数表达形式如下: s(t)=e2jπ(f0t+0.5μt2)s(t)=e^{2j\pi(f_0 t+ 0.5\mu t^2)}s(t)=e2jπ(f0​t+0.5μt2) 根据欧拉公式,其相位项为2π(f0t+0.5μt2))2\pi(f_0 t+ 0.5\mu t^2))2π(f0​t+0.5μt2))。信号的角频率是相位对时间的导数。对相位求导后有2π(f0+μt)2\pi(f_0+\mu t)2π(f0​+μt),显然,f0f

weixin_42845306的博客 1万+

【数据库】oracle数据库----内嵌视图

关系视图是数据库对象,创建关系视图实际是对查询定义可重用的需求。但有时,查询定义并不会被重用。此时,创建关系视图便不再适宜------过多的关系视图势必增加数据库的维护成本。oracle提供了内嵌视图来解决这一问题。 1、内嵌视图简介 如同关系视图,内嵌视图也是查询定义。内嵌的意义在于,视图定义嵌入在复杂查询语句中,其角色与普通数据表或关系视图相同。内嵌视图不必使用creat...

weixin_30780221的博客 347

从OFED到rdma-core:手把手带你搞定Linux下RDMA开发环境的选型与搭建

本文详细介绍了在Linux系统下搭建RDMA开发环境的完整流程,涵盖OFED与rdma-core的选型对比及分步安装指南。针对高性能计算和分布式存储需求,解析RDMA技术栈的核心组件,提供环境验证与性能测试方法,帮助开发者快速构建稳定高效的开发环境。特别适合需要优化网络性能的工程师参考。

weixin_26905487的博客 226

rk3568 OpenHarmony4.0如何使用中文输入法

问题:rk3568开发板 OpenHarmony4.0release系统自带输入法kikaInput软件只有英文输入,不含中文输入,不方便。本文基于rk3568开发板 OpenHarmony4.0release移植了laval社区发布的开发者手机中的搜狗输入法(测试版),实现了中文输入,为OpenHarmony4.0release的其他开发板中文输入提供参考。

Devlin_的博客 2918

Oracle学习笔记day07——视图

一、概述 视图(View)是从一个或多个表(其他视图)中导出的表,其结构和数据是建立在对表的查询基础之上的。所以视图不是真实存在的基础表,而是一张虚表。视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。 视图一经定义便存储在数据库中,与其相对应的数据并没有像表一样在数据库中另外存储一份,通过视图看到的数据只是存放在基表中的数据。对视图的操作与对表的操作

hjl815的博客 680

具身智能端到端大模型VLA (Vision Language Action)

在语言为条件的机器人任务中,策略必须具备理解语言指令、视觉感知环境并生成适当动作的能力,这就需要VLA的。例如,在自动驾驶领域,传统的做法是将感知、预测、规划等步骤分开处理,而VLA则试图用一个统一的框架来替代这种分立的方法。另外,VLA的模型对于算力的需求很大,单片AI算力1000Tops的Thor大概率会延期发布,加上英伟达芯片的量产时间与成本挑战,以及在国内的应用情况,对车企而言是个大问题。以谷歌DeepMind推出的RT-2为例,该模型可以在新的物体、背景和环境中表现出显著改善的性能。

具身智能机器人 1万+

oracle 内嵌视图,关于inline view内嵌视图的学习

看一篇的时候碰巧看到有关inline view的概念,不太熟悉,查了下。所谓inline view,也叫内前视图,说白了,就是执行的时候才建立的视图。例如select ... from (select ... from (select ...)),这里作为from表来使用的select语句创建的就是一个内嵌视图,个人理解,之所以叫内嵌,就是因为它是放在一个语句中的,而且可以多次嵌套,但这种内嵌视图...

weixin_34237700的博客 478

QT+Halcon实现螺纹检测

工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 7052

Cadence virtuos安装教程

本文详细介绍了在Ubuntu 18.04系统上安装Cadence Virtuoso IC617及MMSIM的完整流程。主要内容包括:1)系统环境准备(安装JDK及相关依赖包);2)通过创建软链接和修改系统文件实现RedHat环境兼容;3)共享目录文件操作与分卷压缩包合并解压技巧;4)使用InstallScape工具的安装步骤详解,包括权限处理和配置选项。特别提醒需注意系统兼容性处理(如创建redhat-release文件)和分卷压缩包的特殊解压方法(cat合并)。整个安装过程涉及大量Linux命令操作,需特

wangjie36的博客 300

vue前台错误

TypeError: Cannot read property ‘validate’ of undefined 错误 TypeError: Cannot read property ‘validate’ of undefined <el-button type=“primary” @click=“addStock”>新增 method...

lyu12345的博客 1049

★教程1:matlab学习教程入门100例目录

★基础入门 1.为什么要学习MATLAB 2.MATLAB安装 持续更新....... ★MATLAB基础编程语言熟悉

FPGA/MATLAB学习教程/源码/项目合作开发 4万+

oracle 学会怎么样分解复杂的问题

//问题    表TEST:   ID 姓名 消费 日期 退休标志(1-在岗,2-退休)   004 张三 20 2010-05-11 1   007 李四 50 2010-06-23 1   002 王五 10 2010-06-23 2   004 张三 100 2010-07-20 2   //按退休标志分组,统计消费人次和金额,结果为:    退休标志 消费人次 消费

TongYu2009的专栏 469

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

oracle计算相差的小事,oracle 学会怎么样分解复杂的问题

//问题表TEST:ID 姓名 消费 日期 退休标志(1-在岗,2-退休)004 张三 20 2010-05-11 1007 李四 50 2010-06-23 1002 王五 10 2010-06-23 2004 张三 100 2010-07-20 2//按退休标志分组,统计消费人次和金额,结果为:退休标志 消费人次 消费1 1 502 3 130//注:张三在2010-07-20已退休,之前的在...

weixin_39792472的博客 121

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

oracle为什么那么复杂,Oracle 学会怎么样分解复杂的问题

//问题表TEST:ID 姓名 消费 日期 退休标志(1-在岗,2-退休)004 张三 20 2010-05-11 1007 李四 50 2010-06-23 1002 王五 10 2010-06-23 2004 张三 100 2010-07-20 2//按退休标志分组,统计消费人次和金额,结果为:退休标志 消费人次 消费1 1 502 3 130//注:张三在2010-07-20已退休,之前的在...

weixin_32831131的博客 189

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SQL 复杂查询

一、子查询 1.相关子查询 相关子查询是指需要引用主查询列表的子查询语句,相关子查询是通过EXISTS谓词来实现的。下面以显示工作在"new york"的所有雇员为例,说明相关子查询的使用方法,示例如下: SQL> select ename,job,sal,deptno from emp where exists (select 1 from dept...

weixin_30345577的博客 98

sql简单回顾

在使用sql的select语句时,尽量选必要的数据列,这样节省了网络开销;而且arraysize也要设置恰当: SQL> show arraysizearraysize 15 这个参数是指定一次网络传输的数据行数...

congse5854的博客 170

五种提高 SQL 性能的方法

Five Ways to Rev up Your SQL Performance 本文节选自MSDN的文章《五种提高 SQL 性能的方法》,提出如何提高基于SQL Server应用程序的运行效率,非常值得推荐。对一些Traffic很高的应用系统而言,如何提高和改进SQL指令,是非常重要的,也是一个很好的突破点。*文章主要包括如下一些内容(如感兴趣,请直接访问下面的URL阅读完整的中英文文档):...

技术代码资料库 101

Five Ways to Rev up Your SQL Performance

本文节选自MSDN的文章《五种提高 SQL 性能的方法》,提出如何提高基于SQL Server应用程序的运行效率,非常值得推荐。对一些Traffic很高的应用系统而言,如何提高和改进SQL指令,是非常重要的,也是一个很好的突破点...

160

oracle里Modle里[Any],SQL 使用Oracle的MODEL子句变换结果集

SQL 使用Oracle的MODEL子句变换结果集,就像本章第一个实例一样,你希望于熟知的常规变换技巧之外另辟蹊径。你想尝试一下 Oracle 的 MODEL 子句。不同于 SQL Server 的 PIVOT 操作符,Oracle 的 MODEL 子句并不是用来做结果集变换的。说得准确一些,用 MODEL 子句做结果集变换其实算是误用,它并不符合 MODEL 子句的设计意图。SQL 使用Orac...

weixin_35755640的博客 251

1-5 外连接的用法

行列转换1 实现这种效果 外连接形式 select a.`name`, case when b.name is not null then 'o' ELSE null end as 'SQL入门', case when c.name is not null then 'o' ELSE null end as 'UNIX基础', case when d.name is not null then '...

Myzoneliver的博客 936
上一篇: jsp用jdbc连接db2 v7.2数据库的方法
下一篇: 《Web开发敏捷之道》2版 9.4勘误(取消)
dearsuper
博客等级 码龄21年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值