网站首页 > 文章中心 > 其它

oracle怎么查交集

作者:小编 更新时间:2023-09-24 13:38:49 浏览量:66人看过

Oracle查询2张表差集、交集、并集

Oracle之查询详解

查询是数据的一个重要操作.用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正的存储,每次执行查询只是从数据表中提取数据,并按照表的形式显示出来.

SELECT 列名

oracle怎么查交集-图1

FGROM 表名

[WHERE 查询条件表达式]

[GROUP BY 分组表达式]

[HAVING 分组查询表达式]

[ORDER BY 排序的列名 [ASC或DESC]]

group by 用于对查询的结果分组统计,通过对group by后面的名字进行分组后输出结果.

group by后面还可以跟多列表示 多列分组 ,在多列分组时放前面的优先分组.

group by 列名,列名

having 子句用于限制分组显示结果,其只能和group by一起连用.在where中没有办法直接使用聚合函数,即sum avg等无法使用,所以引用了having,在having中可以使用这些函数.

order by 表示排序,后跟列名和排序方式.如果什么都不加默认为升序.ASC表示升序,DESC表示降序.

在Oracle中还可以设置多列排序

前面的为主要排序,后面的为次一级排序.

注:碰到自己与自己比较的情况下,不能用having,可以创建一个新列.

注:如果select语句同时包含group by,having,order by,按group by,having,order by排序

分组和聚合一起使用,目的是为了统计信息.

where是为了from服务的,只能跟 真实的字段 ,用来筛选from子句中指定的操作所产生的行

group by 用来分组where子句的输出

having 用来从分组的结果中筛选行

order by用来对筛选的结果进行排序

(1)分组函数:max min?avg sum count

max表示该列的最大值,min表示该列的最小值,avg表示该列的平均值,sum表示该列的和,count表示该列的行数.

注:分组函数(max、min、avg、count、sum)只能出现在选择列表中having子句、order by子句、不能出现在where子句和group by子句中.

多表查询是指两个和两个以上的表或者是视图的查询,在实际应用中,当查询单个表不能满足需求时,一般使用多表查询.如:显示sales部门位置和其员工的姓名,这种情况下需要使用到(dept表和emp表).

多表查询的连接一般可以分为:内连接、左外连接、右外连接、全连接.

注:在使用多表查询的时候每个表可以设置别名,如果表指定了别名,那么语句中所有语句必须使用别名,而不能再使用实际表名.且在写属性的时候如果属性为其中一个表特有的属性则不需要写别名,如果是两个表都有则必须指定是哪一个表的哪个属性格式为:表名.属性名.

注:e是emp的别名,d是dept的别名.

但如果对表进行了操作则需要设置别名,如:查询每个部门中工资高于该部门平均工资的员工人数.在其中有一个avg表,这个表必须设置别名(提醒:如果仅有一个被修改的表,则可以不设置别名,但如果有多个表则必须设置别名).

内连接

内连接通过使用比较运算符来使每个表的通用列中的值匹配来组成一个新表,即:把两个表中间共有的那些行拿出来进行连接,如果某些行不是两个表共有的,则不进行连接.

select

from 表1

on 匹配条件

where匹配条件

左外连接

左外连接与内连接的区别是:设置左外连接的时候设置了主表和附表,主表在前,附表在后.内连接是将两个表匹配的地方输出出来,而左外连接则是主表全写,附表一一对应,附表有则加上,没有不写.

右外连接

右外连接和左外连接基本相同只是右外连接的主表写在后边.

全连接

全连接是在等值连接的基础上将左表和右表的未匹配数据都加上,使用的关键字为full outer join或者full join.

自连接

还有一种特殊情况即自连接,在Oracle中一个表无法与自己进行比较,所以当需要自己表的两个信息做比较的时候也需要使用连接来连接,即同一张表的连结查询.

子查询是指嵌套在其他sql语句中的select语句,也叫嵌套查询.sql语句执行顺序为从右到左执行,所以在执行查询时会先执行左侧的子查询后进行主查询.

子查询分为单行子查询和多行子查询,单行子查询是指返回一行数据的子查询语句,多行子查询是指返回多行数据的查询语句.子查询还可以分为多列子查询、多行子查询、多列多行子查询.

在进行子查询时如果内部查询不返回任何记录,则外部条件中字段DEPTNO与NULL比较永远为假,也就是说外部查询不返回任何结果.

总结为:

单行子查询是指子查询只返回单列、单行数据

多行子查询是指返回单列多行数据,都是针对单列而言的

多列子查询则是指查询返回多个列数据的子查询语句

单行子查询

where deptno = (单行数值)

多行子查询

where deptno in ( 多行数值 )

多列子查询:

where (job,deptno)=(select job,deptno from emp where ename='KING')

多列多行子查询

where (job,deptno) in (select job,deptno from emp where ename='KING')

在单行子查询的外部查询中可以使用=、、、=、=、等比较运算符.

内部查询返回的结果必须与外部查询条件中字段(DEPTNO)相匹配.

在WHERE子句中使用多行子查询时,可以使用多行比较运算符(IN,ALL,ANY).

IN:等于任何一个.

注:ANY运算符必须与单行比较运算符结合使用,并且返回行只要匹配子查询的任何一个结果即可.

多列子查询

多列子查询和多行子查询相同,只是使用多列子查询的时候会有多列进行匹配.

为了合并多个select语句的结果,可以使用集合操作符号union,union all,intersect,minus.

union:该操作符用于取得两个结果集的并集.当使用该操作符时,会自动去掉结果集中重复行

union all:该操作与union相似,但是它不会取消重复行,而且不会排序

intersect:使用该操作符用于取得两个结果集的交集

minus:使用该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据

总结为集合运算就是将两个或者多个结果集组合成一个结果集.

intersect ?交集 返回两个查询共有的记录

union all ?并集 返回各个查询的所有记录,包括重复的记录

union ? ? ?交集 返回各个查询的所有记录,不包括重复的记录

MINUS ? 补集 返回第一个查询检查出的记录减去第二个查询检索出来的记录之后剩余的记录

注意:当使用集合操作的时候,查询所返回的列数以及列的类型必须匹配,列名可以不同.

(1)Distinct关键字

在Oracle中,可能出现若干相同的情况,那么可以用Distinct消除重复行

查询出销售部(sales)下面的员工姓名,工作,工资

分析:

①找到所有部门的平均工资

select deptno,avg(sal) from emp group by deptno;

select ename,sal,deptno from emp;

select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno;

select * from emp,(select deptno,avg(sal) avgsal from emp group by deptno) damao where emp.deptno=damao.deptno and salavgsal;

字段? ? ? ? ? ? ? 类型? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 描述

hiredate ? ? ? DATE ? ? ? ? ? ? ? ? ? ? ? ? ? ?表示雇佣日期

oracle中交集intersect如何使用

这样就可以查询出结果集1的所以内容.

Oracle 求两个结果集的交集

CREATE TABLE a(id int ,name varchar(10))

INSERT a SELECT 1,'张三'

create table b(id int ,value varchar(10))

insert into b select 1,'张'

select a.id,a.name from a,b where charindex(b.value,a.name) 0

Oracle 10g如何实现高级查询

许多人愁不会Oracle 10g的高级查询,其实也是比较简单的.在查询数据时,为了获取完整的信息就要将多个表连接起来,这也是关系数据库的一个重要特性---表之间存在的关系.这种关系可以将表的数据联系起来.多表查询就是根据这种关系,实现从多个表中获取数据还原信息.下面这个图就是我将要操作的表结构.

工具/材料

电脑

Oracle 10g

基本连接查询

在简单查询中我们一般只使用了from字句的一个表,然而在关系数据库中,表与表之间往往是存在关系的,这就是要求从多个表中检索数据,以输出更有意义的结果.最简单的连接方式就是在select语句中,通过from子句使用多个表,并用逗号将不同的基本表隔开.下面语句将商品信息表和供应商信息表连接起来,查询其中的商品名称,产地,供应商名称.

但也要注意一个问题如果想要查询"供应商编号"应该怎么处理,因为两个表中都有"供应商编号",所以应该查询的时候限定一下,说明究竟是哪一个表中的.

join连接查询

并且join连接也可以实现两个以上的表查询,写语句的时候一个join对应一个on,看下面的例子.

自然连接查询

其实自然连接查询(natural join)就是更加方便的join连接查询,自然连接不必指定任何同等连接条件,系统将自动判断出具有相同名称的列然后形成匹配,但注意自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接将失去意义.

集合操作查询

集合操作就是将两个或多个SQL查询结合构成符合查询,集合操作符有union(并集)、intersect(交集)、minus(差集),现在以union为例,union查询必须从每个表中读取相同的列.

子查询

子查询和连接查询一样提供了使用单个查询访问多个表中的数据的方法,使用in关键字,意思是在in后面的集合中查询我们需要的,即in后面是限定条件.

特别提示

注意在Oracle 10g中的标点符号是英文状态下的

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章