oracle数据库(四)
子查询与高级查询
我们在检索数据库的时候,需要将多个表关联起来进行查询,最常用的有子查询、连接查询和集合查询,子查询可以从另外一个表获取数据,连接查询可以指定多个表的连接方式,集合查询可以将两个或者多个查询返回的行组合起来。
一.子查询
1.1在where字句中使用子查询
select * from scott.emp where deptno = (
select deptno from scott.emp where empno =7782;
);
1.2在having字句中使用子查询
哪些部门的平均工资小于全体人员的平均工资
select deptno , avg(sal) from scott.emp group by deptno
having avg(sal)<(
select avg(sal) from scott.emp;
);
1.3使用in操作符实现指定匹配查询
已知部门名称为sales和accounting,那么需要获得这两个部门的所有员工信息
select * from scott.emp where deptno in (
select deptno from scott.dept where dname in(sales,accounting)
);
1.4使用any操作符实现任意匹配查询
对scott用户的emp表进行操作,获得工资大于任意一个部门的平均工资的员工信息
select * from scott.emp where sal >any(
select avg(sal) from scott.emp group by deptno
);
1.5使用all操作符实现全部匹配查询
对scott用户的emp表进行操作,获得工资大于所有部门的平均工资的员工信息
select * from scott.emp where sal >all(select avg(sal) from scott.emp group by deptno);
1.6实现关联子查询
关联子查询会引用外部的一列或者多列,因为它确实与外部语句有关,具体实现时,外部查询的每一行都传递给子查询,子查询以此读取传递过来的每一行的值,将其应用到子查询上,直到外部查询的所有行都处理完为止。
查询各个部门中,哪些员工的工资低于其所在部门的平均工资
select * from scott.emp outer where sal<(select avg(sal) from scott.emp inner where inner.deptno=outer.deptno);
二、高级查询
检索数据时,通过各个表之间共同列的关联性,可以查询存放在多个表中的不同实体的信息,如果在多个表中进行查询操作,并且指定多个表的连接关系,则该查询就是高级查询。
2.1使用=实现多个表的简单连接
连接查询中,如果仅仅通过select字句和from字句连接多个表,那么查询的结果将是一个通过笛卡尔积所生成的表。
select empno,ename,sal,scott.emp.deptno,scott.emp.deptno,dname from scott.emp ,scott.dept;
这个简单连接语句结果集就是一个笛卡尔积。
2.2内连接
2.2.1等值连接
使用INNER JOIN连接两个不同的表scott.emp和scott.dept,ON用来设置连接条件,使用where自句限制查询范围,检索accoutning部门的员工信息
select empno ename,sal,d.deptno,dname
from scott.emp e inner join scott.dept
on e.deptno=d.deptno
where dname = 'ACCOUNTING';
2.2.2不等值连接
通过scott用户的emp表和salgrade表,查询员工的工资等级。使用between运算符,建立不等连接
select empno,ename,sal,grade from scott.emp e inner join scott.salgrade s on e.sal between s.losal and s.hisal;
2.2.3自然连接
通过相同的字段将两个表连接在一起,并返回所有符合条件的结果
select e.empno,e.ename,e.sal,deptno ,d.dname
from scott.emp e natural join scott.dept d where d.dname= 'ACCOUNTING';
2.3外连接
外连接又分为左外连接、右外连接、全外连接三种
2.3.1左外连接
select e.empno ,e.name,e.sal,d.grade from scott.emp e left outer jion scott.dept on e.sal between d.losal and d.hisal;
左外连接在检索结果中除了显示满足连接条件的行外,还要显示join关键字左侧表中所有满足检索条件的表。
2.3.2右外连接
select e.deptno,d.deptno from scott.emp e right outer jion scott.dept on e.deptno=d.deptno;
右外连接在检索结果中除了显示满足连接条件的行外,还要显示join关键字右侧表中所有满足检索条件的表。
2.3.3全外连接
全外连接在检索结果中除了显示满足连接条件的行外,还要显示join关键字两侧表中所有满足检索条件的表。
2.4使用UNION操作符获取两个结果集的并集
UNION[ALL] 将多个查询结果集合合并,形成一个性的结果集,如果指定ALL,则包括重复的行,反之不包括。
对scott用户的emp表进行操作,获得员工编号大于7800或者所在部门编号为10的员工信息,使用ORDER BY语句将结果集按照deptno列升序排序输出
select * from scott.emp where empno >7800
union all select * from scott.emp where deptno = 10 order by deptno asc;
2.5使用INTERSECT进行结果集的and运算
select * from scott.emp where empno >7800 intersect select * from scott.emp where deptno = 10;
2.6使用MINUS操作符获得结果集的差集
select * from scott.emp where empno > 7800 minus select * from scott.emp where deptno =10;
oracle数据库(四)的更多相关文章
- Oracle数据库四种数据完整性约束
Oracle数据库四种数据完整性约束 1.实体完整性 同样的数据不能重复插入(1)采取什么措施保证实体完整性?我们可以给表创建主键约束吗,主键保证了数据的唯一性,主键可以保证同一条记录只能插入一次. ...
- 一个小时学会Oracle数据库
一.数据库概要 二.Oracle简介 三.安装运行Oracle数据库 四.使用GUI操作MySQL 五.使用SQL访问Oracle数据库 六.下载程序.帮助.视频 Oracle视频下载(111班):h ...
- Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
[转] SYS.SYSTEM.DBSNMP. Oracle 数据库中 SYS.SYSTEM.DBSNMP.SYSMAN 四用户的区别 用户: SYS 用户: SYS,默认密码为 CHANGE_ON ...
- Oracle数据库学习(四):学习中的遇到的问题
一.xhost图形化界面安装问题 问题1:运行xhost +命令,出现命令没有找到错误 原因:Linux系统没有安装xhost图形化包. 解决办法:安装xhost图形化包,命令如下: yum what ...
- Oracle 数据库语句大全
Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...
- 将Oracle数据库中的数据写入Excel
将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
- Oracle数据库基础知识
oracle数据库plsql developer 目录(?)[-] 一 SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...
- oracle数据库表的导入导出cmd命令大全
在实际的项目开发中经常会遇到导入导出oracle数据库中的表,以下是常用的一些cmd命令: 一.数据表的导出 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daoch ...
- ORACLE数据库汉字占几个字节问题
一同事由于系统需求关系,将SQL SERVER数据库的一个表导入ORACLE数据库时,发现居然报错:ORA-12899: value too large for column xxxx (actual ...
随机推荐
- GetComponentsInChildren<Transform>(true)
GetComponentsInChildren<Transform>(true);//游戏对象下的子物体激活的没激活的都会被拿到,包括游戏对象本身GetComponentsInChildr ...
- Java设计模式--观察者模式到监听器
观察者模式是对象的行为模式.又叫做发布-订阅模式.模型-视图模式.源-监听器模式. 抽象主题角色:主题角色将所有对观察者对象的引用到保存在一个集合里,每个主题都可以拥有任意数量的观察者.抽象主题提供一 ...
- OpenLayers加载高德地图离线瓦片地图
本文使用OpenLayers最新版本V5.3.0演示:如何使用OpenLayer加载谷歌地球离线瓦片地图.OpenLayers 5.3.0下载地址为:https://github.com/openla ...
- 找出二进制数中bit为1的最(高/低)索引
题1. 给定一个无符号整型数据(unsigned int),找出其对应二进制数据中bit位为1的最高/低索引. 比如:对于数据0,返回0:数据1,返回1:数据0x80000000,返回32: 题2. ...
- day12——生成器、推导式、简单内置函数
day12 生成器 迭代器:python中内置的一种节省空间的工具 生成器的本质就是一个迭代器 迭代器和生成器的区别:一个是pyhton自带的,一个是程序员自己写的 写一个生成器 基于函数 在函数中将 ...
- 【基于onenet-edp的文件传输】1、调试上报数据点和端对端透传
onenet-edp上报数据点和端对端透传 一.前言 edp是onenet用于tcp设备定制的一套协议,能够灵活地实现数据上报和透传: 二.准备工作 1.找到edp页面 进入工作台后,找到多协议接入, ...
- python_三目运算
首先确定三目运算的使用条件, if只有两个才能用三目 只有 if:else: 先写个if else的小例子: if push == "lpush": self.conn.l ...
- Spring Security 解析(一) —— 授权过程
Spring Security 解析(一) -- 授权过程 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring Security .S ...
- React Native 开发豆瓣评分(七)首页组件开发
首页内容拆分 看效果图,首页由热门影院.豆瓣热门.热门影视等列表组成,每个列表又由头加横向滑动的 电影海报列表构成. 所以可以先把页面的电影海报.评分.列表头做成组件,然后在使用 ScrollView ...
- ABAP-System Functions
ABAP_CALLSTACK ABAP_CRC64 ABAP_PRECOMPILED_HEADER_USAGE ABSTOR_TEST AB_CALL_LITL_CHECK AB_CALL_STACK ...