一头扎进sql之多表操作
一、多表查询时NULL值处理
- 要求返回比"allen"工资低的所有员工
select a.ename,a.conn from emp a where a.conn < (select b.conn from emp b where b.ename = 'allen') ;
- 正确的写法应该是
select a.ename,a.conn from emp a where coalesce(a.conn,0) < (select b.conn from emp b from b.ename = 'allen');
- 注意点
NULL值比较结果还是NULL,所以这里需要进行NULL值的一个转化才行
二、聚集和外链接
- 要求返回所有部门的工资和奖金
select e.deptno,
sum(e.sal) as total_sal,
sum(e.sal*eb2.rount) as total_bonus,
from emp
left join (select eb.empno,
sum(case when type =1 then 0.1
when type =2 then 0.2
when type =3 then 0.3 end ) as tote
from emp_bonux eb
group by eb.empno) eb2 on eb2.empno = e.deptno
group by e.deptno
oder by 1;
- 多个表返回丢失的数据用FULL JOIN
三、聚集和内连接
- 要求返回部门为10的所有的员工的工资和奖金
select e.deptno
e.empno,
e.ename,
(e.sal * CASE WHEN type =1 THEN 0.1
WHEN type =2 THEN 0.2
WHEN type =3 THEN 0.3 end ) as bonus
from emp e
inner join emp_bonus eb on eb.empno = eb.empno
where d.deptno = 10
order by 1,2
如果聚合的话必须先把奖金按照员工汇总然后在进行聚集
select e.deptno
sum(e.sal) as total_sal,
sum(e.sal*eb.bonus) as total_bonus
from emp e
inner join (select eb.empno,
case when type =1 then 0.1
when type =1 then 0.2
when type =1 then 0.3 end) as bonus
group by eb.empno) eb2 on eb2.empno = e.empno
where e.deptno = 10;
group by e.deptno;
四、UNION ALL 、UNION 、和空字符串
select ename as 部门名称 ,denpno 部门编号, evl(mgr,deptno) as 上级编码
NNION ALL
select ename as 部门名称 ,denpno 部门编号, NULL as 上级编码 (应该用‘’空字符串)
- 当有重复数据时必须加上唯一标识
74990 30 74990 30
7521 30 7521 30
7654 30 7654 30
7844 30 7844 30
7900 30
这两条数据坐聚合操作就会出现 OR就是有5条数据 而用 UNION就会只出现一条数据 解决办法就是加入唯一字段
select empno,deptno from emp where mgr = 7684
UNION
select empno,deptno from emp where job = 'SALEMAN' 就可以保证正确的去重数据
select disdintc deptno from (
select empno,deptno from emp where mgr = 7684
UNION ALL
select empno,deptno from emp where job = 'SALEMAN'
)
order by deptno;
五、组合相关的行
- 显示部门为10的员工编码、姓名、部门名称和工作地址
select e.deptno,e.ename,e.dname,e.loc
from emp e
inner join dept d on (e.deptno = d.deptno)
where e.deptno = 10
select e.empno,e.ename,d.dname,d.loc
from emp e,dept d
e.deptno = d.deptno and e.deptno = 10
六、组合相关的行
(LEFT JOIN) ( RIGHT JOIN) (INNER JOIN ) ( FULL JOIN )
自关联可以采用 left join进行查询
转载于:https://www.cnblogs.com/hanxue112253/p/9504836.html
一头扎进sql之多表操作相关推荐
- 放弃考研一头扎进春招,却磕得“头破血流”,这么拼值吗?
放弃考研一头扎进春招,却磕得"头破血流",这么拼值吗? 一.在校情况 二.遇见拼客 三.相关面经 L同学-广东工业大学16级电子信息工程专业-拼客学院第20期<全栈Linux ...
- 一头扎进Shiro-自定义Realm
在一头扎进Shiro-集成Web之前的博客,我们都是用shiro.ini保存用户.角色.权限信息,本篇文章我们将这些信息保存到数据库,通过自定义Realm完成身份验证和权限验证. 去掉用户.角色.权限 ...
- 【activityMQ】一头扎进activeMQ学习
ActiveMQ操作: 1: 下载 ActiveMQ http://www.apache.org/index.html#projects-list apache 所有项目列表 2: 在配置后jd ...
- python自动化框架2019_《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!...
1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...
- 一头扎进Node系列 - 目录
前言 本系列是属于初级教程.博主我也还只是一个node的新兵蛋子,想通过学习官网的API文档,慢慢的打好Node基础.当然后期这系列文档会慢慢完善,并且会添加一些项目实战中遇到的一些问题以及解决方案! ...
- 一头扎进Mysql视频教程 + 源码
[@2015-4-8] 记录一下自己的脚印:看到一个一头扎进Mysql视频教程 + 源码果断下载下来,看了看比较到位, 下载地址:http://www.xiaomengku.com/topic?id= ...
- 一头扎进SpringBoot视频教程(附源码与文档)
目录:/099 一头扎进SpringBoot视频教程(附源码与文档) ┣━━<一头扎进SpringBoot>第八讲.mp4 ┣━━<一头扎进SpringBoot>第八讲源码及文 ...
- 一头扎进Maven3 (一)
本系列博客将学习Maven项目管理工具,使用Maven管理jar包 一头扎进Maven3 (一):Maven安装与配置 文档结构 Maven简介 Maven安装与配置 Maven Hello Worl ...
- 一头扎进Maven3 (二)
本系列博客将学习Maven项目管理工具,使用Maven管理jar包 一头扎进Maven3 (二):在 Eclipse 中使用 Maven 文档结构 m2eclipse 插件安装 在 Eclipse 中 ...
最新文章
- 在div中显示html_HTML基础知识之DIV
- (转) C#如何使用异步编程
- java conterller_java后台controller能否直接接收list
- 软件测试:测试一个网站
- SAP License:如何利用DEBUG强力修改表
- [C#源码] 微信跳一跳POST修改分数漏洞
- python序列类型唯一的映射类型_什么是python中唯一的映射类型
- linux 自动安装脚步,linux自动安装lnmp脚步
- 从开锁到中年危机的杂谈
- Django表单系统
- 七牛云 PHP SDK服务器鉴权失败!参数解释
- LabVIEW编程LabVIEW控制cRIO-9043例程与相关资料
- 什么是CDN及CDN加速原理
- 【luogu3403】跳楼机 [同余最短路]
- 记zabbix正常启动,但是没有监听任何端口问题
- 无插件使用Eclipse和Resin调试WEB应用(Debug Web App In Ecli...
- 腾讯云、阿里云都“服”了,云容灾你还迟疑什么?
- java方法后面throw的作用_Java异常处理中throw与throws的用法区别
- MYSQL给表或者字段写注释
- 【103】W3School-实用计算机技能在线学习
热门文章
- STM32F7xx —— 输入
- Datawhale-零基础入门NLP-新闻文本分类Task04
- oracle基本的查询语句,Oracle基本查询语句
- Anaconda 镜像源操作(查看配置删除)
- Django之验证码的实现,简单快捷的方法
- 非大学生学计算机,浅谈非计算机专业大学生的计算机教学
- LeetCode 2074. 反转偶数长度组的节点(链表)
- LeetCode 317. 离建筑物最近的距离(逆向BFS)*
- axure选中后横线切换_Axure8.0|动态面板内容简单切换技巧
- 怎么样才能更高效的学习区块链