--笛卡尔积,多表查询时,n张表中的行数相乘(本例中14*4=56)
--多表查询时笛卡尔积无法消除,即使使用了限定条件(where)也只是不显示而已,实际上笛卡尔积仍存在

--只能使用合理的做法来处理多表查询。

--多表查询时,每当增加一张关联表时都需要设置一个消除笛卡儿积的条件。

select count(*) from emp;
14
select count(*) from dept;
4
select count(*) from emp,dept;

--查询员工姓名,工作,工资等级编号,工资等级范围
select e.ename,e.job,e.sal,s.grade,s.losal,s.hisal
from emp e,salgrade s
where e.sal between s.losal and s.hisal

--查询员工姓名,工作,工资等级编号,工资等级范围
--将等级用中文显示(如:<1200的为E等工资)
select e.ename,e.job,e.sal,s.grade,s.losal,s.hisal,
decode(s.grade,
1,'E等',
2,'D等',
3,'C等',
4,'B等',
5,'A等'
) 工资等级
from emp e,salgrade s
where e.sal between s.losal and s.hisal;

--内连接:等值连接,不显示不匹配的行。

--外连接:左外连接,右外连接,全外连接,通过(+)符号进行控制
--emp插入部门为null的‘中华’员工信息
insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
values('8888','中华','manager','9888',to_date('2019/1/1','yyyy-mm-dd'),'5000','1000',null);
commit;
--通过deptno关联查询时由于用户‘中华’的deptno为null,所以结果中未显示此用户的信息
select *
from emp e,dept d
where e.deptno=d.deptno;
--通过左连接,可以将没有关联的‘中华’用户的信息也显示出来
select *
from emp e,dept d
where e.deptno=d.deptno(+);

--右外连接,无用户属于dept表中deptno为40的部门,通过e.deptno=d.deptno时由于无匹配关联,所以deptno为40的行不会显示,通过右外连接显示此部门信息

-

--自连接,查询emp员工对应领导的编号和领导姓名,因为king无领导若不采用外连接(+),king的信息会不显示

select * from emp;
select e.ename,e.job,e.empno,e.mgr,m.empno,m.ename
from emp e,emp m
where e.mgr=m.empno(+);

--分析要求,逐步查出
select e.empno,e.ename,to_char(e.hiredate,'yyyy-mm-dd') hiredate,e.job,
m.ename,e.sal,nvl2(e.comm,e.sal+e.comm,e.sal)*12 income,
decode (s.grade,'1','A',2,'B',3,'C',4,'D') Slevel,d.deptno,d.dname,d.loc
from emp e,emp m,salgrade s,dept d
where /*e.hiredate like '%81%'*/ to_char(e.hiredate,'yyyy')='1981'
and e.mgr=m.empno
and e.sal between s.losal and s.hisal
and e.deptno=d.deptno
and e.sal between 1500 and 3500
order by income desc, e.job;

--SQL1999语法:

--emp 表有14行数据,dept表有4行数据

--交叉连接 cross join功能:产生笛卡儿积
select * from emp cross join dept;
--自然连接:natural join功能:消除笛卡儿积,等值字段放在查询结果的第一列
select * from emp natural join dept;
--using:没有关联的多表查询时,using将表关联并消除笛卡儿积
select * from emp join dept using(deptno)
--on:
select * from emp e join salgrade s on (e.sal between s.losal and s.hisal);
--全外连接:
--左外连接2种写法
select *
from emp e,dept d
where e.deptno=d.deptno(+);
--sql1999语法左外连接:
select * from emp e left outer join dept d on (e.deptno=d.deptno);
--sql1999语法右外连接:
select * from emp e right outer join dept d on (e.deptno=d.deptno);
--sql1999语法全外连接:
select * from emp e full outer join dept d on (e.deptno=d.deptno);

--建议使用union或union all 替代or
--集合操作时查询返回的数据结构要求一致

--数据的集合运算
--并集操作union(不显示重内容):返回若干个查询结果的全部内容,重复部分不显示
select * from dept
union
select * from dept d where d.deptno='10'

--并集操作union all(显示重复内容):返回若干个查询结果的全部内容,显示重复行
select * from dept
union all
select * from dept t where t.deptno='10';

--minus 差集:显示2个查询语句结果不同的内容
select * from dept
minus
select * from dept t where t.deptno='10';

--intersect 交集:只显示2个查询语句结果相同的内容
select * from dept
intersect
select * from dept t where t.deptno='10'

07-oracle多表查询的更多相关文章

  1. oracle系统表查询

    oracle查询用户下的所有表 select * from all_tab_comments -- 查询所有用户的表,视图等select * from user_tab_comments -- 查询本 ...

  2. Oracle锁表查询和解锁方法

    数据库操作语句的分类 DDL:数据库模式定义语言,关键字:create DML:数据操纵语言,关键字:Insert.delete.update DCL:数据库控制语言 ,关键字:grant.remov ...

  3. oracle锁表查询

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 复制代码代码如下: --锁表查 ...

  4. oracle 字典表查询

    1.oracle 字典表查询 /*显示当前用户*/ show user 在sql plus中可用,在pl sql中不可用 /*查看所有用户名*/ select username,user_id,cre ...

  5. Oracle——多表查询

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

  6. oracle锁表查询,资源占用,连接会话,低效SQL等性能检查

    查询oracle用户名,机器名,锁表对象 select l.session_id sid, s.serial#, l.locked_mode, l.oracle_username, l.os_user ...

  7. Oracle 多表查询(1)

    一.基本概念 多表查询的语法如下: SELECT [DISTINCT] * | 字段 [别名] [,字段 [别名] ,…]FROM 表名称 [别名], [表名称 [别名] ,…][WHERE 条件(S ...

  8. oracle 多表查询

    1.注意点 在查询过程中,不确定数据库表中的数据量,先查询数据量,数据量较大,则不能直接查询(select * from emp),如果数据量较大,直接查询容易造成死机或者数据读取较慢,如果较小可以查 ...

  9. oracle多表查询

    多表查询首先要避免笛卡尔集,要避免笛卡尔集,那么查询条件不得少于表的个数-1. 1.显示雇员名,雇员工资以及雇员所在的部门: 2.显示部门号为10的部门名.员工名和工资: 3.显示各个雇员的姓名,工资 ...

  10. Oracle锁表查询与解锁

    锁表查询和解锁 --查询SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv ...

随机推荐

  1. 团体程序设计天梯赛L1-027 出租 2017-03-23 23:16 40人阅读 评论(0) 收藏

    L1-027. 出租 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声, ...

  2. 团体程序设计天梯赛L2-009 抢红包 2017-03-22 19:18 131人阅读 评论(0) 收藏

    L2-009. 抢红包 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 没有人没抢过红包吧-- 这里给出N个人之间互相发红包.抢 ...

  3. C/C++ Pthread线程

    线程按照其调度者可以分为用户级线程和核心级线程两种 用户级线程主要解决的是上下文切换的问题,它的调度算法和调度过程全部由用户自行选择决定,在运行时不需要特定的内核支持: 我们常用基本就是用户级线程,所 ...

  4. java-02 JDK安装与环境变量配置&安装编程IDE

    1.JDK下载安装与环境变量的配置 1.1 官方JDK 下载地址 大家可以到Oracle中国官方网站下载JDK,也可已 通过这个链接下载 (推荐大家下载1.8版本,这个版本是当前比较流行的版本) 也可 ...

  5. word2010多级列表编号为什么会变成黑块

    把光标放置在黑块的后面 在键盘上按左方向键,则黑块变灰色(为选中状态) 然后ctrl+shift+s, 出现窗口“apply styles" 点击"reapply", 搞 ...

  6. 【架构】基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

    网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项.由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎, ...

  7. IIS 发布webservice 需要用户名和密码访问 解决

    今天,我在IIS上发布了一个自己写的webservice,然后我在远程通过浏览器来访问这个webservice的时候出现一个登录界面如下  之前我朋友发布webservice的时候也出现过一次,那次好 ...

  8. Session概述

    session即HttpContext.Session 属性,命名空间System.Web 我们都知道,Cookie信息全部存放于客户端,Session则只是将一个ID存放在客户端做为与服务端验证的标 ...

  9. Sublime text3!行首,行尾,批量编辑!

    1.Windows下的操作操作步骤 1.Ctrl + H 2.打开正则,输入^,然后Find All,查找所有的行首 3.打开正则,输入$,然后Find All,查找所有的行尾 4.光标闪动,就可以进 ...

  10. C - Maximum of Maximums of Minimums(数学)

    C - Maximum of Maximums of Minimums You are given an array a1, a2, ..., an consisting of n integers, ...