一、关联查询基础
    1.意义:有时候所需要的数据需要依赖多个表,可能会在两个表或多个表中这个时候需要操作多个表,才可以得到需要的数据,而这种查询 就叫做关联查询。

--练习:查看部门表和员工表的信息select * from emp,dept;                              --连接查询,会出现笛卡尔积,没有意义select * from emp,dept where emp.deptno=dept.deptno; --等值连接

2.连接查询:from子句中含有多个表,显示出来表中的所有数据
    3.笛卡尔积:当做多个表的连接查询时,没有where子句进行条件限制,比如表A和表B进行连接查询,那么就会出现rowA*rowB条数据组合。通常笛卡尔查询是没有意义的,需要避免。
    4.等值连接:通常两个表中某些字段是有关系的。而在查询的时候,我们使用这些有关系的字段进行等值查询,也就是相等的组合成一条记录。

二、关联查询详解
1.内连接:两张表使用 join on 进行关联查询,进行条件限制,显示出来的数据都是符合条件的          

--格式:table_A join  table_B on (条件)
--练习:使用内连接查询员工表和部门表的信息select * from emp inner join dept on (emp.deptno=dept.deptno);

2.外连接:当需求为要查询一张表中的所有数据,另外一张表满足条件的数据时,表A全部显示,表B满足条件显示这种情况要使用外连接
     驱动表(主):要显示全部数据的那张表, 从动表(副):满足条件数据的那张表
(1)左外连接:

--格式:table_A left [outer] join table_B on 条件
--A是驱动表,B是从表
--练习:查询所有员工信息及员工所在部门信息select emp.empno,emp.ename,emp.job,dept.deptno,dept.dname,dept.loc from emp left join dept on emp.deptno=dept.deptno;orselect emp.empno,emp.ename,emp.job,dept.deptno,dept.dname,dept.loc from emp,dept where emp.deptno=dept.deptno(+);

(2)右外连接:

--格式:table_A right [outer] join table_B on 条件
--B是驱动表,A是从表
--练习:查询所有的部门信息以及部门所包含的员工信息
select emp.empno,emp.ename,emp.job,dept.deptno,dept.dname,dept.loc from emp right join dept on emp.deptno=dept.deptno;
or
select emp.empno,emp.ename,emp.job,dept.deptno,dept.dname,dept.loc from emp,dept where emp.deptno(+)=dept.deptno;

(3)全外连接:两张表中满足条件的数据显示,不满足条件的数据也都显示

--格式:table_A full [outer] join table_B on 条件select emp.empno,emp.ename,emp.job,dept.deptno,dept.dname,dept.loc from emp full join dept on emp.deptno=dept.deptno;

3.自连接查询:多个表是同一张表时,就叫自连接,此时表内的某些字段一定会有关系       

--格式:table_A a join table_A b on 条件
--练习:查询员工姓名和职位,以及其领导的姓名和工资select p.ename,p.job,e.ename,e.sal from emp e join emp p on e.empno=p.mgr;       

4.子查询:当某一个查询语句中所需要的数据,表中没有直接体现,而是通过先执行另外一个查询语句查询出来的结果。先执行的查询语句就是子查询,被嵌入的查询语句是父查询

(1)子查询在where子句中,作为条件的数据需要一次子查询  

--返回的数据一行一列,where 返回的数据 '='连接
--返回的数据多行一列,where 返回的数据用 'in' 连接
--返回的数据多行多列。
--练习:查询工资大于jones这个人工资的所有员工信息select * from emp where sal>(select sal from emp where ename='JONES');
--练习:查询与jones同部门的其他员工信息select * from emp where deptno=(select deptno from emp where lower(ename)='jones') and ename!='JONES';
--练习:查询SMITH和ALLEN这两个人同部门的其他员工信息select * from emp where deptno in (select deptno from emp where ename in('SMITH','ALLEN')) and ename not in('SMITH','ALLEN');   

(2)子查询在having子句中

--练习:查询部门平均工资大于10号部门平均工资的部门号及其平均工资select deptno,avg(sal) from emp group by deptno having avg(sal)>(select avg(nvl(sal,0)) from emp where deptno=10);
--练习:查询职位人数大于'CLERK'这个职位人数的职位select job,max(sal),sum(sal) from emp group by job having count(*)<(select count(*) from emp where job='CLERK');

(3)子查询在from子句中, 一个查询语句后,还想查询出来的数据的基础上再查询

--注意:当子查询在from子句中,相当于一张没有名字的表,这样的表叫行内视图(view)也叫匿名视图
--练习:查询部门的平均工资大于2000的部门信息和员工信息select * from dept,emp where dept.deptno=emp.deptno and dept.deptno in (select deptno from emp group by deptno having avg(sal)>2000));select e.*,d.* from emp e,dept d,(select deptno from emp group by deptno having avg(sal)>2000) f where e.deptno=d.deptno and d.deptno=f.deptno;
--练习:查询员工工资大于本部门的平均工资的员工信息select * from emp a where sal>(select avg(sal) from emp b where a.deptno=b.deptno);select * from emp e,(select deptno,avg(sal) avg_sal from emp group by deptno) f where e.deptno=f.deptno and e.sal>f.avg_sal;
--练习:查询部门的平均工资其员工的信息select e.*,avg_sal from emp e,(select deptno,avg(sal) avg_sal from emp group by deptno) f where e.deptno=f.deptno order by e.deptno;

(4)子查询在select子句中(相当于外连接的一种写法)

  select e.ename,e.job,(select d.dname from dept d where d.deptno=e.deptno) 部门名称 from emp e;

三、练习

--1:查询和JONES同职位的员工select * from emp where job=(select job from emp where upper(ename)='JONES');
--2:查询月薪比整个公司的平均月薪高的员工select * from emp where sal>(select avg(nvl(sal,0)) from emp);
--3:查询部门中有SALESMAN但是职位不是SALESMAN的员工信息select * from emp where deptno in (select distinct deptno from emp where job='SALESMAN') and job!='SALESMAN';
--4:查询有员工的部门信息及其员工信息(内连接)select dept.*,emp.* from emp join dept on dept.deptno=emp.deptno;
--5:查询所有部门以及员工的信息select dept.*,emp.* from emp right join dept on dept.deptno=emp.deptno;
--6:查询公司的部门和员工信息select dept.*,emp.* from emp full join dept on dept.deptno=emp.deptno;
--7:查询工资大于10部门的所有员工工资的员工信息select * from emp where sal>all(select sal from emp where deptno=10);
--8:查询工资大于10部门中任意一个员工工资的其他部门员工信息select * from emp where sal>any(select sal from emp where deptno=10) and deptno!=10;

十一、Oracle学习笔记:高级关联查询相关推荐

  1. oracle 5表关联查询,Oracle学习笔记5 - 表查询

    Oracle学习笔记五 --- 表查询  下面使用scott用户,用到的表见底部 1.查看表结构 desc [表名] desc emp 2.distinct命令,去除重复行 3.练习 查找SMIT ...

  2. Oracle学习笔记(七)——分组统计查询

    Oracle学习笔记(七)--分组统计查询 基础统计函数的使用 分组统计操作的实现,结合多表查询使用分组统计 常用统计函数 COUNT(*|[DISTINCT]字段) MAX(字段,日期或数字) MI ...

  3. Oracle学习笔记 字符集概述

    Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...

  4. oracle学习笔记 参数文件及数据库的启动和关闭

    oracle学习笔记 参数文件及数据库的启动和关闭 我们这节课把oracle的参数文件以及oracle的启动关闭讲一下 一)参数文件作用 先看oracle的参数文件 它由来已久了 我们知道oracle ...

  5. Postgresql学习笔记-高级语法篇

    Postgresql学习笔记-高级语法篇 Postgresql 约束 Postgresql约束用于规定表中的数据规则. 如果存在违反约束的数据行为,行为会被约束终止. 约束可以在创建表的时候就规定(通 ...

  6. 数据库MySQL学习笔记高级篇(周阳)

    数据库MySQL学习笔记高级篇 1. mysql的架构介绍 mysql简介 高级Mysql mysqlLinux版的安装 mysql配置文件 mysql逻辑架构介绍 mysql存储引擎 2. 索引优化 ...

  7. oracle update单引号,Oracle学习笔记:update的字段中包括单引号

    平时update的时候直接更改字段内的值,例如: update table_temp set name = 'Hider' where id = 100; 但更新后的值中包括单引号,则不能按以上方式进 ...

  8. oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型

    oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...

  9. Oracle学习笔记---(一)

    Oracle学习笔记---(一) 一 1.Oracle简介     Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库:是一个对象关系数据库管理系统(ORDBMS).它提供了关系数据库 ...

  10. 在大量数据迁移期间oracle学习笔记

    在数据迁移期间oracle学习笔记 0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态 需求分析: 1.根据上述 ...

最新文章

  1. java 数据结构 无向图_数据结构-无向图
  2. 使用 Pytorch 实现 skip-gram 的 word2vec
  3. 卷积神经网络鼻祖LeNet网络分析
  4. Qt中rcc工具简介
  5. Eclipse新建Maven项目web.xml is missing and failOnMissingWebXml is set to true错误 pox.xml编译错误
  6. 人人商城小程序用户授权问题
  7. jakarta ee_Jakarta EE 8状态
  8. C/C++开发工具大比拼【转】
  9. 【高并发】ThreadLocal、InheritableThreadLocal
  10. 通过编译php为httpd的模块实现lamp
  11. 密码保护(2017.12.22)
  12. 2018杭电多校第六场1009(DFS,思维)
  13. 项目管理的九大知识领域
  14. 微信公众号项目笔记 二
  15. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化(异步图书出品)》([美]Al Sweigart(斯维加特))【摘要 书评 试读】- 京东图书...
  16. Flowable工作流引擎技术方案
  17. 崋佬论币;从哪里跌倒,就从哪里爬起来
  18. ThinkingInJava_吸血鬼数
  19. linux服务器崩,linux – 我的服务器崩溃了.这是日志.什么可能发生?
  20. ART/Dalvik,JVM/Dalvik 虚拟机的区别

热门文章

  1. iOS-集成支付宝支付、微信支付简单总结
  2. 拓端tecdat|R语言用相关网络图可视化分析汽车配置和饮酒习惯
  3. 拓端tecdat|R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测
  4. 拓端tecdat|R语言进行相关矩阵分析及其网络可视化
  5. shell脚本语言和java_shell脚本学习与总结
  6. jupyter notebook安装后无法连接到ubuntu gpu环境
  7. tensorflow:卷积函数----tf.nn.conv2d
  8. Caffe学习-手写数字识别
  9. python数字图像处理(6):图像的批量处理
  10. python获取本机IP、探测指定URL的IP等信息、生成格式化时间