第八章集合运算课堂笔记和练习

– 集合运算
所有的集合运算符与等号的优先级相同,如果 SQL 语句包含多个集合运算符并且没有圆括号明确地指定另一个顺序,Oracle 服务器将以从左到右的顺序计算。

  • 准备工作
  • 此项操作为练习而作,可先不管直接执行

     --  1.创建员工历史岗位表 emp_jobhistory:
          create table emp_jobhistory(
            id number,--流水号
            empno number,--员工编号
            job varchar2(9),--岗位
            begindate date,--开始日期
            sal number(7,2)--在该岗位时工资
        )
      --  2.插入如下数据:
          insert into  emp_jobhistory  values (1,7839,'TRAINEE','17-11月-81',500);
          insert into  emp_jobhistory  values (2,7839,'SALESMAN','17-2月-82',1800);
          insert into  emp_jobhistory  values (3,7839,'CLERK','17-2月-83',2000);
          insert into  emp_jobhistory  values (4,7839,'SALESMAN','17-2月-85',1800);
          insert into  emp_jobhistory  values (5,7839, 'MANAGER','17-2月-87',3000);
    

    – sql 标准

    • union联合运算
      – 1.去重
      – 2.默认第一列升序排序
      – 3.使用第一个语句的列名定义查询的列名
      – 4.多个sql语句列个数一致、类型一致、名称可以不一致
      – 5.每个查询不能包含自己的Order by子句,只能在联合之后使用Order by子句

        --  查询编号为7839的员工当前工资、岗位及历史工资、岗位
            select sal 工资, job 岗位
              from emp
             where empno = 7839
            union
            select sal, job
              from emp_jobhistory
             where empno = 7839;
      
    • union all 完全联合运算
      – 1.不去重
      – 2.默认不排序
      – 3.使用第一个语句的列名定义查询的列名
      – 4.多个sql语句列个数一致、类型一致、名称可以不一致
      – 5.每个查询不能包含自己的Order by子句,只能在联合之后使用Order by子句

        --  查询编号为7839的员工当前工资、岗位及历史工资、岗位,重复行记录不要求被去掉。
            select sal, job
              from emp
             where empno = 7839
            union all
            select sal, job
              from emp_jobhistory
             where empno = 7839;
      

    – oracle 自有

    • 相交运算(intersect):获取多个SQL语句之间的共有的数据(取交集)

        --  查询哪些员工做过岗位调动?
            select empno from emp intersect select empno from emp_jobhistory;
      
    • 相减运算 (minus) :保留第一个SQL语句有的,第二个没有的数据

        --  查询哪些员工没做过岗位调动?
            select empno from emp
            minus
            select empno from emp_jobhistory;
      
        --  1.用集合运算,列出不包含job为SALESMAN 的部门的部门号。
            select deptno from dept 
            minus
            select deptno from emp 
             where job = 'SALESMAN';
      
【完整Oracle SQL开发教程课件如下】 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建维护表(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限角色(共28页).pdf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值