一、多表查询时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进行查询

 

    

   

一头扎进sql之多表操作的更多相关文章

  1. 一头扎进EasyUI3

    惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 一头扎进EasyUI第11讲 .基本下拉组件 <select id="cc" style=& ...

  2. 《一头扎进》系列之Python+Selenium框架设计篇3- 价值好几K的框架,狼来了,狼来了....,狼没来,框架真的来了

    1. 简介 前边宏哥一边一边的喊框架,就如同一边一边的喊狼来了!狼来了!.....这回是狼没有来,框架真的来了.从本文开始宏哥将会一步一步介绍,如何从无到有地创建自己的第一个自动化测试框架.这一篇,我 ...

  3. 《一头扎进》系列之Python+Selenium框架设计篇4- 价值好几K的框架,呵!这个框架有点意思啊

    1.简介 前面文章,我们实现了框架的一部分功能,包括日志类和浏览器引擎类的封装,今天我们继续封装一个基类和介绍如何实现POM.关于基类,是这样定义的:把一些常见的页面操作的selenium封装到bas ...

  4. 《一头扎进》系列之Python+Selenium框架设计篇5 - 价值好几K的框架,哎呦!这个框架还真有点料啊!!!

    1. 简介 其实,到前面这一篇文章,简单的Python+Selenium自动化测试框架就已经算实现了.接下来的主要是介绍,unittest管理脚本,如何如何加载执行脚本,再就是采用第三方插件,实现输出 ...

  5. 一头扎进EasyUI2

    惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 一头扎进EasyUI第6讲 .日历组件 <div class="easyui-calendar&quo ...

  6. 一头扎进EasyUI

    惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 一头扎进EasyUI第1讲 .加载库文件和样式 <link rel="stylesheet" ...

  7. SQL语句之表操作

    SQL语句系列 1.SQL语句之行操作 2.SQL语句之表操作 3.SQL语句之数据库操作 4.SQL语句之用户管理 写在前面 在上一篇博文里面我整理了“行”级别的操作,分别是“增(insert).删 ...

  8. 《一头扎进》系列之Python+Selenium自动化测试框架实战篇6 - 价值好几K的框架,呦!这个框架还真牛叉哦!!!

    1. 简介 本文开始介绍如何通过unittest来管理和执行测试用例,这一篇主要是介绍unittest下addTest()方法来加载测试用例到测试套件中去.用addTest()方法来加载我们测试用例到 ...

  9. 《一头扎进》系列之Python+Selenium框架实战篇7 - 年底升职加薪,年终奖全靠它!Merry Christmas

    1. 简介 截止到上一篇文章为止,框架基本完全搭建完成.那么今天我们要做什么呢????聪明如你的小伙伴或者是童鞋一定已经猜到了,都测试完了,当然是要生成一份高端大气上档次的测试报告了.没错的,今天宏哥 ...

随机推荐

  1. linux下强行umount卸载设备

    卸载NFS,结果出现无法卸载的情况 umount /mnt/umount: /mnt: device is busy使用umount -f,问题依旧umount -f /mnt/umount2: De ...

  2. web 给大家分享一个好玩的东西,也许你那块就用的到

    先看效果: 就这个效果.当你点击右上角的删除按钮,会删除掉item1. 上代码: <!DOCTYPE html> <html> <head> <meta ch ...

  3. WP8.1StoreApp(WP8.1RT)---发送邮件和短信

    在WP7/8中,发送短信是利用了EmailComposeTask和SmsComposeTask来实现的. 在WP8.1 Store App中,原来的方式已经失效,采用了新的方法:ChatMessage ...

  4. MaxScript镜像函数

    看到有网友需要写的,其实镜像就是缩放改为负数 Fn MirrorObject argObjects argAxisName = ( local axisNames = #(#x,#y,#z) do ( ...

  5. Java实现对ftp的读写文件

    这里仅仅是对ftp工具类的简单使用,很多东西还不是很了解.当然学以致用,先用到这里吧. public class FtpTest { /** * 向ftp写文件(数据) */ @Test public ...

  6. Redis数据库结构与读写原理

    此文已由作者赵计刚薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.数据库结构 每一个redis服务器内部的数据结构都是一个redisDb[],该数组的大小可以在redi ...

  7. LG的nexus5(32GB版本 - 821)-TOT-底包 可用于救砖!

    LG的nexus5(32GB版本 - 821)-TOT-底包 底层修复效果完美,通过LGflashTool1.8直接刷进去就行~ 底包下载: https://pan.baidu.com/s/1Z5WD ...

  8. wpa2破解代码思路(教你写poc)

    前言:此篇关于1.wpa2协议漏洞的产生原因:2.scapy这个数据包库的基础:3.最后讲解代码思路,让你们从伪代码可以直接写成代码展开介绍分享~ 本文作者:i春秋签约作家——kaikaix 1.大家 ...

  9. [Flex] 组件Tree系列 —— 作为PopUpButton的弹出菜单

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:Tree作为PopUpButton ...

  10. 实例的初始化由JVM装载类的时候进行,保证了线程的安全性

    在23种设计模式中,单例是最简单的设计模式,但是也是很常用的设计模式.从单例的五种实现方式中我们可以看到程序员对性能的不懈追求.下面我将分析单例的五种实现方式的优缺点,并对其在多线程环境下的性能进行测 ...