多表查询:

1.笛卡尔积
SELECT * FROM dept;
--查询员工的信息和其所在部门的信息
SELECT ename,job,dname,loc
FROM emp,dept;

--集合A中的所有元素和集合B中的所有元素组成的有序对的集合称为笛卡尔积,也叫做笛卡尔结果
--给两张表建立连接,再进行多表查询可以避免笛卡尔积
--在where字句中定义连接条件,就是两张表之间数据的对应关系
--表1.列1 = 表2.列2
--查询n张表,连接条件至少有n-1个

2.多表查询的语法规范
--多表查询时,必须使用表名对列名进行限定:表名.列名
--避免两张表中有同名的列,查询时出错;提高查询效率
SELECT emp.ename,emp.job,emp.deptno,dept.dname,dept.loc
FROM emp,dept;

--多表查询时,给表起别名,使用别名对列名进行限定
--先写from
SELECT e.ename,e.job,e.deptno,d.dname,d.loc
FROM emp e,dept d;

--如果查询的列中有相同名字,起不同的别名加以区分
SELECT e.ename,e.job,e.deptno eno,d.deptno dno,d.dname,d.loc
FROM emp e,dept d;

3.等值连接
--当两张表之间存在主键和外键的引用关系时,使用等值连接
SELECT e.ename,e.job,e.deptno eno,d.deptno dno,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno = d.deptno;

--多表查询先生成笛卡尔结果,然后在其中找到满足连接条件的数据

--查询工资高于2000的员工信息和其所在部门的信息
SELECT e.*,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno = d.deptno
AND e.sal > 2000;

4.不等连接
SELECT * FROM salgrade;
--查询所有员工的信息和其所在的工资等级
SELECT e.*,s.*
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal;

5.自连接
--当某张表中的数据内部有联系,外键引用了本张表的主键
--需要使用自连接将这样的关系体现出来
--将一张表看作两张表,取不同的别名,再进行查询和连接条件的建立
--查询员工的名字和他上级的名字
SELECT w.ename worker,w.mgr,m.empno,m.ename manager
FROM emp w,emp m
WHERE w.mgr = m.empno;

6.外连接
--当多表查询时,可能会有一些数据不满足连接条件
--如果需要显示满足连接条件的数据,使用外连接
--如果要显示某张表的所有数据,将(+)放在连接条件的另一侧
--查询员工信息和其所在部门的信息,没有员工的部门也显示
SELECT e.*,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno(+) = d.deptno;

--查询员工的名字和他上级的名字,没有上级的员工也显示
SELECT w.ename worker,m.ename manager
FROM emp w,emp m
WHERE w.mgr = m.empno(+);

【练习】

1.查询EMP、DEPT表,输出的列包含员工姓名、工资、部门编号、部门名称、部门地址.
SELECT e.ename,e.sal,e.deptno,d.dname,d.loc
FROM emp e,dept d
WHERE e.deptno = d.deptno;

2.查询工资等级为3/4/5级的员工姓名,工资,工资等级
SELECT e.ename,e.sal,s.grade
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal
AND s.grade >= 3;

3.显示职位是CLERK的员工姓名,工资,工资等级,部门名称
SELECT e.ename,e.sal,s.grade,d.dname
FROM emp e,salgrade s,dept d
WHERE e.deptno = d.deptno
AND e.sal BETWEEN s.losal AND s.hisal
AND e.job = 'CLERK';

4.查询emp表,显示员工姓名及其经理的姓名,没有经理的员工也需要显示
SELECT w.ename worker,m.ename manager
FROM emp w,emp m
WHERE w.mgr = m.empno(+);

5.列出EMP表中部门名称和这些部门的员工信息,同时列出那些没有员工的部门
SELECT d.dname,e.*
FROM emp e,dept d
WHERE e.deptno(+) = d.deptno;

Oracle-DQL 4- 多表查询的更多相关文章

  1. Oracle中的多表查询(笛卡尔积原理)

    本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查询一起完成各个复杂查询的操作: 一 ...

  2. Oracle(2)之多表查询&子查询&集合运算

    多表查询 笛卡尔积 同时查询多张表时,每张表的每条数据都要和其它表的每条数据做组合.如下栗子,我们发现产生的总记录数是 56 条,还发现 emp 表是 14 条,dept 表是 4 条,56 条正是 ...

  3. Oracle数据库之单表查询

    接着上一篇的分享,今天主要给大家分享的是关于数据中的单表查询,单表查询很基础,也很重要,但是任何一个初学者必须要掌握的姿势,单表查询就是对单个表进行操作,查询我们想要的数据.单表查询里面的内容也是比较 ...

  4. Oracle笔记_多表查询

    1 执行sql文件 @文件地址名 --执行某个sql文件: 2 多表查询 想要的数据不在同一张表,就需要多个表进行联查. 多表查询也叫做表连接查询,其中的where条件就是连接条件. 可以使用join ...

  5. Oracle数据库之七 多表查询

    七.多表查询 ​ 对于查询在之前已经学过了简单查询.限定查询.查询排序,这些都属于 SQL 的标准语句,而上一章的单行函数,主要功能是为了弥补查询的不足. ​ 而从多表查询开始就正式进入到了复杂查询部 ...

  6. oracle中的多表查询和子查询以及一些注意事项

    多表查询就是使用两张表及其以上的查询.首先需要知道几个名词,笛卡尔积,内连接,外连接,子查询. 1)笛卡尔积 所谓笛卡尔积其实就是两张表数据的条数相乘得到的最后结果,例如表1有10条数据,表2有4条数 ...

  7. Oracle中的多表查询

    多表查询 l 笛卡尔积: N*M l 使用关联字段消除笛卡尔积的多余数据: SELECT EMP.*,DEPT.DNAME,DEPT.LOC FROM EMP, DEPT WHERE EMP.DEPT ...

  8. Oracle作业5——多表查询、子查询

    一.基础练习: 1.查询和scott相同部门的员工姓名ename和雇用日期hiredate SELECT ENAME,HIREDATE FROM EMP WHERE DEPTNO=(SELECT DE ...

  9. Oracle数据库之多表查询一

    上一篇给大家介绍了数据的单表查询,相信大家对于单表的查询应该都有了一些了解.单表查询在数据库中的使用会有一些,但并不是很多,但是作为初学者,我们需要学习单表查询的思路.今天呢,我们为大家介绍一下数据库 ...

  10. oracle数据库之多表查询二

    多表查询解题思路: 1.分析题目要查询的结果涉及到那几张表 2.将每张表建立关联条件,否则会产生笛卡尔积 3.分清楚查询的条件,然后使用and将条件链接 4.涉及到分组查询的需要使用聚合函数 5.分组 ...

随机推荐

  1. 用matlab脚本语言写M文件函数时用三种方法简单实现实现DFT(离散傅里叶变换)

    %用二重循环实现DFT: function xk=dt_0(xn); %define a function N=length(xn); %caculate the length of the vari ...

  2. CoreText学习(二)之Hello world

    最后更新:2017-08-10 部分内容丢失,后续补上 相关配置: Xcode 8.3.3 Swift 3.0 macOS Sierra 一.CoreText 简介 CoreText 是用于处理文字和 ...

  3. node和npm版本引起的安装依赖和运行项目失败问题

    问题:node版本不同导致的安装依赖版本不同而无法启动 https://www.jianshu.com/p/c07293c8c6d4 实际上问题分为两个部分: 1,npm包管理器安装依赖不成功,此时需 ...

  4. spring boot 下 开启 gzip

    [参考文章]:Spring boot开启Gzip压缩 [参考文章]:Accept-Encoding Spring 版本 :5.1.2-RELEASE 1. application.yml 配置 ser ...

  5. 消息中间件RabbitMQ的使用

    原理场景 MQ在所有项目里面都很常见, 1.减少非紧急性任务对整个业务流程造成的延时: 2.减少高并发对系统所造成的性能上的影响: 举例几个场景: 1.给注册完成的用户派发优惠券.加积分.发消息等(派 ...

  6. Flutter移动电商实战 --(11)首页_屏幕适配方案和制作

    1.flutter_ScreenUtil插件简介 flutter_ScreenUtil屏幕适配方案,让你的UI在不同尺寸的屏幕上都能显示合理的布局. 插件会让你先设置一个UI稿的尺寸,他会根据这个尺寸 ...

  7. MySQL:行锁、表锁、乐观锁、悲观锁、读锁、写锁

    1.锁的分类 1.1从对数据操作的类型来分 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响. 结论1: --如果某一个会话 对A表加了read锁,则 该会话 可以对A表进行读操作 ...

  8. MySQL 如何使用show processlist进行过滤

    在使用show processlist的时候,直接使用会显示很多的内容,无法很快找到需要的信息. 如何过滤操作呢? 其实,show processlist展示的内容是从information_sche ...

  9. js-xlsx

    XLSX.read(data, {type: type}); type主要取值如下: base64: 以base64方式读取: binary: BinaryString格式(byte n is dat ...

  10. python 通过 实例方法 名字的字符串调用方法

    方式1 - 反射 hasattr 方法 判断当前实例中是否有着字符串能映射到的属性或者方法, 一般会在  getattr 之前作为判断防止报错 getattr 方法 获取到当前实例中传入字符串映射到的 ...