有谁知道oracle 集合运算 INTERSECT 和 ALL 连在一起怎么用 给举个例子谢谢了 我想求交集又不想删除重复行
发布网友
发布时间: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
在oracle的SQL语言中ALL和DISTINCT是一对选项。ALL是显示所有行,包括重复行,而DISTINCT是排除重复行。当这两个选型都不选时默认为选择了ALL选项。因此,如果没有特别指定DISTINCT选项,都认为是选择了ALL选项。
在你的问题中,不加DISTINCT选项正常做交集运算就可以了。
oracle集合运算关键字
oracle集合运算关键字是并集union,union all,交集intersect,差集minus。集合运算是数学科学中常用的词语,是一种非常有效的构造形体的方法,可以直观的减少运算难度。集合运算是实体造型系统中非常重要的模块,从一维几何元素到三维几何元素,人们针对不同的情况和应用要求,提出了不少集合运算算法。在早期的...
SQl查询中集合的并运算符是:
4、INTERSECT 运算符 INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。在下列 INTERSECT 运算符的示例中,查询返回收入超过 $21,000 有管理责任且工龄少于8年的雇员的姓名和 ID。SELECT...
SQL数据库语句大全
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left outer join: 左外连接(左连接):结果集几包括连接表的匹配行,也包...
oracle 一个结果集是否在另一结果集中存在
select decode(sign(count(*)),1,0,0,1) as fieldname from (select * from a minus select * from b)一楼的方法很好 巧秒的利用了集合相减 把B从A中减掉 如果有剩余说明两a有不在B中的记录 反之则没有
oracle里面更新操作能带有四则运算吗
Oracle数据库客户端一般需要安装在服务器上,可以在服务器端操作,一般我们可以用sql developer工具远程连接到数据库,先行建立数据库,然后对表进行增删改查。也可以使用MyEclispse的DB Broswer工具进行连接数据库并进行简单的增删改查。 2.SQL语句 Data Definition Language(DDL): 主要用于建立、修改、删除数据库对象(表)...
C#定义一个泛型集合类。要求:实现Ienumerable<T>接口,T是值类型,并T...
Concat 连接两个序列,直接首尾相连。返回结果可能存在重复数据 Except 获取两个元素集合的差集,可以指定相等比较方法 Intersect 获取两个元素集合的交集,可以指定相等比较方法 Union 获取两个元素集合的并集,可以指定相等比较方法 SequenceEqual 比较两个序列是否相等,可以指定相等比较方法 Where 根据制定条件...
列举一些sql高级查询语句
1.集合操作学习oracle中集合操作的有关语句,掌握union,union all,minus,interest的使用,能够描述结合运算,并且能够将多个查询组合到一个查询中去,能够控制行返回的顺序。包含集合运算的查询称为复合查询。见表格1-1表1-1Operator Returns contentUNION 由每个查询选择的所有不重复的行 并集不包含重复值UNION ALL 由每...
哪位专家能否推荐给我学习sql语言最基本的资料。
当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。 注:使用运算词的几个查询结果行必须是一致的。 12、说明:使用外连接 A、left outer join: 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT ...
MySQL随机查询优化问题,怎么解决
系统首先根据各个表之间的联接条件,把多个表合成一个临时表 后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里 (12) 减少对表的查询: 在含有子查询的SQL语句中,要特别注意减少对表的查询.例子: ...
利用Matlab进行交集、并集等运算
Matlab是强大的数值分析与计算的软件,本例分享使用Matlab进行两个数集的交集、并集等运算。intersect函数取交集 帮助文档: intersect Set intersection. C = intersect(A,B) for vectors A and B, returns the values common to the two vectors with no repetitions. C will be sorted. C = ...