子查询与高级查询

我们在检索数据库的时候,需要将多个表关联起来进行查询,最常用的有子查询、连接查询和集合查询,子查询可以从另外一个表获取数据,连接查询可以指定多个表的连接方式,集合查询可以将两个或者多个查询返回的行组合起来。

一.子查询

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数据库(四)的更多相关文章

  1. Oracle数据库四种数据完整性约束

     Oracle数据库四种数据完整性约束 1.实体完整性 同样的数据不能重复插入(1)采取什么措施保证实体完整性?我们可以给表创建主键约束吗,主键保证了数据的唯一性,主键可以保证同一条记录只能插入一次. ...

  2. 一个小时学会Oracle数据库

    一.数据库概要 二.Oracle简介 三.安装运行Oracle数据库 四.使用GUI操作MySQL 五.使用SQL访问Oracle数据库 六.下载程序.帮助.视频 Oracle视频下载(111班):h ...

  3. Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别

    [转]   SYS.SYSTEM.DBSNMP. Oracle 数据库中 SYS.SYSTEM.DBSNMP.SYSMAN 四用户的区别 用户: SYS 用户: SYS,默认密码为 CHANGE_ON ...

  4. Oracle数据库学习(四):学习中的遇到的问题

    一.xhost图形化界面安装问题 问题1:运行xhost +命令,出现命令没有找到错误 原因:Linux系统没有安装xhost图形化包. 解决办法:安装xhost图形化包,命令如下: yum what ...

  5. Oracle 数据库语句大全

    Oracle数据库语句大全 ORACLE支持五种类型的完整性约束 NOT NULL (非空)--防止NULL值进入指定的列,在单列基础上定义,默认情况下,ORACLE允许在任何列中有NULL值. CH ...

  6. 将Oracle数据库中的数据写入Excel

    将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...

  7. Oracle数据库基础知识

    oracle数据库plsql developer   目录(?)[-] 一     SQL基础知识 创建删除数据库 创建删除修改表 添加修改删除列 oracle cascade用法 添加删除约束主键外 ...

  8. oracle数据库表的导入导出cmd命令大全

    在实际的项目开发中经常会遇到导入导出oracle数据库中的表,以下是常用的一些cmd命令: 一.数据表的导出 1 将数据库TEST完全导出,用户名system 密码manager 导出到D:daoch ...

  9. ORACLE数据库汉字占几个字节问题

    一同事由于系统需求关系,将SQL SERVER数据库的一个表导入ORACLE数据库时,发现居然报错:ORA-12899: value too large for column xxxx (actual ...

随机推荐

  1. sizeof(类名字)

    析构函数,跟构造函数这些成员函数,是跟sizeof无关的,因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小. ...

  2. C++ 智能指针 boost::scoped_ptr分析

    1.scoped_ptr的实现原理及特性 特性:scoped_ptr和auto_ptr类似,但最大的区别就是不能转让管理权限,也就是说scoped_ptr禁止用户进行拷贝和赋值 实现原理:如何才能禁止 ...

  3. VMware Workstation 15 Player使用centos页面版本如何查看ip

    首先运行要使用的centos镜像,输入密码登陆进去 因为是界面版,所以就不需要再镜像中输入命令,但是因为这样又找不到没法用ifconfig查看ip怎么办?  这个就是类似于一个系统页面版本的linux ...

  4. [Atcoder AGC030C]Coloring Torus

    题目大意:有$k$种颜色,要求构造出一个$n\times n$的矩阵,填入这$k$种颜色,满足对于每一种颜色,其中填充这种颜色的每一个方格,满足其相连的四个格子的颜色的个数和种类相同(对于每一种颜色而 ...

  5. 【爬坑笔记】c# 如何通过EF Core读写sql server的类似double型字段

    =============================================== 2019/8/31_第1次修改                       ccb_warlock == ...

  6. (转)数据库_不懂数据库索引的底层原理?那是因为你心里没点BTree

    原文地址:https://www.cnblogs.com/sujing/p/11110292.html 要了解数据库索引的底层原理,我们就得先了解一种叫树的数据结构,而树中很经典的一种数据结构就是二叉 ...

  7. 2019 前程无忧java面试笔试题 (含面试题解析)

    本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.前程无忧等公司offer,岗位是Java后端开发,最终选择去了前程无忧. 面试了很多家公司,感觉大部分公司考察的点 ...

  8. Java自学-数组 排序

    Java 数组选择法,冒泡法排序 步骤 1 : 选择法排序 选择法排序的思路: 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来 比较完后,第一位就是最小的 然后再从第二位和剩余的其 ...

  9. MySQL语法顺序及执行顺序

    一.书写顺序 select[distinct] from join on where group by having union order by limit 二.执行顺序 from on join ...

  10. 【转载】PC端微信设置操作快捷键方法

    在电脑上使用微信的时候,有时候我们需要自定义PC版微信快捷键操作,支持自定义微信快捷键设置的有:发送消息快捷键.截屏快捷键.打开微信快捷键以及检测快捷键热键是否与其他软件设置冲突.并且自定义设置PC微 ...