问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在oracle中用查询集合运算实现:查询emp表的第2,4,6,8共四条记录?

发布网友 发布时间:2022-04-07 20:07

我来回答

2个回答

懂视网 时间:2022-04-08 00:28


  3   select * from emp where deptno=20;


     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO                                                            
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------                                                            
      7369 SMITH      CLERK           7902 17-12月-80            800                    20                                                            
      7566 JONES      MANAGER         7839 02-4月 -81           2975                    20                                                            
      7782 CLARK      MANAGER         7839 09-6月 -81           2450                    10                                                            
      7788 SCOTT      ANALYST         7566 13-7月 -87           3000                    20                                                            
      7839 KING       PRESIDENT            17-11月-81           5000                    10                                                            
      7876 ADAMS      CLERK           7788 13-7月 -87           1100                    20                                                            
      7902 FORD       ANALYST         7566 03-12月-81           3000                    20                                                            
      7934 MILLER     CLERK           7782 23-1月 -82           1300                    10                                                            


已选择8行。

若直接合并,则会出现语法错误:
SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union
  3  select deptno,sum(sal) from emp group by deptno
  4  union
  5  select sum(sal) from emp;
select deptno,sum(sal) from emp group by deptno
*
第 3 行出现错误: 
ORA-01789: 查询块具有不正确的结果列数 



集合运算

技术分享



SQL> /*
SQL> 集合运算:
SQL> 1. 参与运算的各个集合,必须列数相同,且类型一致
SQL> 2. 最终结果采用第一个集合的表头作为表头
SQL> 3. order by必须在每个集合后使用相同的order by

SQL> */

对于字符添加空列,使用to_char(null)

对于数字添加空列,使用to_number(null)



union


UNION运算符返回两个集合去掉重复元素后的所有记录 UNIONALL返回两个集合的所有记录,包括重复的

SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union
  3  select deptno,to_char(null),sum(sal) from emp group by deptno
  4  union
  5  select to_number(null),to_char(null),sum(sal) from emp;


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。

格式化:
SQL> break on deptno skip  2
SQL> /


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
           MANAGER         2450                                                                                                                       
           PRESIDENT       5000                                                                                                                       
                           8750                                                                                                                       
                                                                                                                                                      
                                                                                                                                                      
        20 ANALYST         6000                                                                                                                       
           CLERK           1900                                                                                                                       
           MANAGER         2975                                                                                                                       
                          10875                                                                                                                       
                                                                                                                                                      


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
                                                                                                                                                      
        30 CLERK            950                                                                                                                       
           MANAGER         2850                                                                                                                       
           SALESMAN        5600                                                                                                                       
                           9400                                                                                                                       
                                                                                                                                                      
                                                                                                                                                      
                          29025                                                                                                                       
                                                                                                                                                      
                                                                                                                                                      


已选择13行。


SQL> break on null
SQL> /


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。


SQL> host cls

打开SQL执行的时间

SQL> --打开SQL执行的时间
SQL> set timing on
SQL> select deptno,job,sum(sal)
  2  from emp
  3  group by rollup(deptno,job);


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。


已用时间:  00: 00: 00.00
SQL> select deptno,job,sum(sal) from emp group by deptno,job
  2  union
  3  select deptno,to_char(null),sum(sal) from emp group by deptno
  4  union
  5  select to_number(null),to_char(null),sum(sal) from emp;


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        10 CLERK           1300                                                                                                                       
        10 MANAGER         2450                                                                                                                       
        10 PRESIDENT       5000                                                                                                                       
        10                 8750                                                                                                                       
        20 ANALYST         6000                                                                                                                       
        20 CLERK           1900                                                                                                                       
        20 MANAGER         2975                                                                                                                       
        20                10875                                                                                                                       
        30 CLERK            950                                                                                                                       
        30 MANAGER         2850                                                                                                                       
        30 SALESMAN        5600                                                                                                                       


    DEPTNO JOB         SUM(SAL)                                                                                                                       
---------- --------- ----------                                                                                                                       
        30                 9400                                                                                                                       
                          29025                                                                                                                       


已选择13行。


已用时间:  00: 00: 00.00

SQL> set timing off

这儿由于数据量太少导致时间太短无法测出,在平时可以使用此种方法来检测哪一个sql语句执行时间更短,则那个sql更为好


INTERSECT语句

INTERSECT 运算符返回同时属于两个集合的记录



显示薪水同时位于级别1(700~1300)和级别2(1201~1400)的员工信息:

SQL> select ename,sal from emp

  2  where sal between 700 and 1300
  3  INTERSECT
  4  select ename,sal from emp
  5  where sal between 1201 and 1400;


ENAME             SAL                                                                                                                                 
---------- ----------                                                                                                                                 
MARTIN           1250                                                                                                                                 
MILLER           1300                                                                                                                                 
WARD             1250                                                                                                                                 

minus


MINUS返回属于第一个集合,但不属于第二个集合的记录。

显示薪水同时位于级别1(700~1300),但不属于级别2(1201~1400)的员工信息:
SQL> select ename,sal from emp   2  where sal between 700 and 1300
  3  minus
  4  select ename,sal from emp
  5  where sal between 1201 and 1400;


ENAME             SAL                                                                                                                                 
---------- ----------                                                                                                                                 
ADAMS            1100                                                                                                                                 
JAMES             950                                                                                                                                 
SMITH             800                                                                                                                                 






集合运算注意事项

lselect语句中参数类型和个数要一致。 l可以使用括号改变集合执行的顺序 l如果有order by子句,必须放到每一句查询语句后 l集合运算采用第一个语句的表头作为表头

Oracle学习(7):集合运算

标签:oracle   sql   学习笔记   数据   

热心网友 时间:2022-04-07 21:36

select语句里面where条件用in,将主键或rownum字段的值包含在里面,分别写2,4,6,8。
在oracle中用查询集合运算实现:查询emp表的第2,4,6,8共四条记录?

select语句里面where条件用in,将主键或rownum字段的值包含在里面,分别写2,4,6,8。

oracle里面更新操作能带有四则运算吗

在WHERE子句中可以用比较操作符IN(list)来取出符合列表范围中的数据。其中的参数list表示值列表,当列或表达式匹配于列表中的任何一个值时,条件为TRUE,该条记录则被显示出来。 SELECT ename, job FROM emp WHERE job IN ('MANAGER', 'CLERK');使用BETWEEN 1 AND 2 用来查询符合(1,2)值域范围之内的数据,通常...

oracle选择从m条到n条的记录

方法1:oracle的ROWNUM伪列返回查询的行序号。例如要查询表的前10条记录,可以使用 select * from tablename where ROWNUM<=10 但是要返回第11-第20条记录,尝试以下的语句 select * from tablename where ROWNUM<=20 and ROWNUM>=11;这个人报错。返回0条记录。因为ROWNUM是伪列,不能用>=条件 使用...

列举一些sql高级查询语句

MINUS 在第一个查询中,不在后面查询中,并且结果行不重复 差集所有的集合运算与等号的优先级相同,如果SQL语句包含多个集合运算并且没有圆括号明确地指定另一个顺序,Oracle服务器将以从左到右的顺序计算。你应该使用圆括号来明确地指定带另外的集合运算的INTERSECT (相交) 运算查询中的赋值顺序。Union all 效率一般比u...

如何优化SQL语句

情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询 , 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其 他表所引用的表. (2) WHERE子句中的连接顺序.: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必 须写在其他WHERE条件之前, 那些可以过...

ORACLE 中视图更新可以更新基表中数据,视图更新应该满足什么条件?

1:集合运算符 union,union all,intersect,minus 2:distinct关键字 3:group by,order by,connect by,或者start with 4:子查询 5:分组函数 6:需要更新的列不是视图定义的 7:具有连接查询(可以更新键值保存表的数据)8:违反基表的约束条件 查询视图那些列可以更新可以通过user_updatable_columns...

Linux日常维护常用命令集合整理

oracle@Station90.example.com/1211 cat 1.txt 1 4 2 5 3 6 oracle@Station90.example.com/1211 awk 'NR==2 {print $2}' 1.txt 5 每隔2s执行一次df –h watch –n 2 “df –h” ls –ltrh 人性化的显示输出 rm *删除文件报错,可通过如下方式删除文件 find ./ -type f /tmp/0110.txt for...

Java遇上SPL:架构优势和开发效率,一个不放过

解析源数据并生成序表:Orders=T("d:/Orders.csv") 按列名从原序表生成新的序表:Orders.new(OrderID, Amount, OrderDate) 计算列:Orders.new(OrderID, Amount, year(OrderDate)) 字段改名:Orders.new(OrderID:ID, SellerId, year(OrderDate):y) 按序号使用字段:Orders.groups(year(_5),_2; sum(_4)...

oracle中怎么比较2个集合是否相等

minus运算:返回在第一个查询结果中与第二个查询结果不相同的那部分行记录。比如第一个结果是第二个结果的子集,那返回的结果是0 和我需要的是不一样的,我要的是个数,值,顺序(通过order by实现)均一样才相等 A minus B union all B minus A 这样 minus运算:返回在第一个查询结果中与第...

oracle group by 性能优化

(6) 使用DECODE函数来减少处理时间:使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表.(7) 整合简单,无关联的数据库访问:如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系)(8) 删除重复记录:最高效的删除重复记录方法 ( 因为使用了ROWID)例子:DELETE FROM EMP E ...

oracle段的集合是 oracle角色是什么的集合 oracle运算符 oracle赋值运算符 oracle除法运算 oracle除法运算取整 oracle加减乘除运算 oracle三元运算符 oracle中的相加函数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...是价值工程活动的中心环节,按功能的性质分类,可将功能分为... ...自己家的win8笔记本突然找不到自己家的wifi了 上次关机前还可以的... 迪士尼动画片都有哪些 放置江湖梦境多少层 放置江湖剑阵怎么过 放置江湖落英谷重光攻略 制药工程可以考执业药师吗?本科生毕业几年可以考?有的地方查到是一年... 请问制药工程专业本科毕业的学生,在药厂工作了3年,能考些什么证书... 放置江湖赌场副本怎么打 放置江湖蹭血方法介绍_放置江湖蹭血方法是什么 每天都要敷面膜,面膜真正的作用是什么? 兰州社会保障卡怎样下载 工商银行如何下载社会保障卡手机银行工商银行 十二生肖羊是属佛肖吗? 佛肖有哪些生肖 十二生肖中有哪个属于佛肖的 12生肖佛肖的有几个?都是什么? 敷面膜的好处是什么? 十二生肖什么是佛肖 请问十二生肖那些是佛肖? 十二生肖哪肖属于佛肖 佛肖是什么生肖 佛肖是哪些生肖 十二生肖哪肖属于佛肖 十二生肖哪些属于双肖 佛肖是十二生肖里面的那个生肖啊 以旧换新的手机怎样补差价 十二生肖哪个属观音佛肖 我的华为帐号因为换号码和忘记密码登陆不了怎么办 十二生肖哪些是佛肖 华为mate98.0微博无法登录闪退怎么处理? 长期敷面膜的好处? 手机社保卡在哪儿下载 社保卡怎么下载 装满半杯冷水的杯子,拧紧杯盖过一段时间杯盖很难拧开,产生这一现象的原因 鲁迅先生作品《故乡》原文是什么? 冬天的时候,杯子会裂了怎么办? 社会保障卡下载? 鲁迅的《故乡》的小说结构模式 珍珠奶茶的塑料杯子冬天易裂怎么办 下载到手机上面的社保卡? 鲁迅的《故乡》的线索是什么 有一个特别凉的杯子,在冬天热水,杯子会炸裂的裂缝从杯子外部开始还是从内部开始?为什么? 鲁迅所写的小说《故乡》 冬天为什么玻璃杯里倒开水容易裂 鲁迅的小说《故乡》免费下载 鲁迅的小说《故乡》 鲁迅《故乡》的写作特点 请问怎么查询一个手机号码的区号? 减肥食谱一个月瘦10斤女 一个月瘦10到20斤的减肥食谱