Oracle多表连接查询
多个表之间关系:一对多|(多对一) 多对多 一对一 3种
关系的完整性约束:实体完整性、参照完整性、用于定义的完整性。 必须满足实体完整性和参照完整性.
实体完整性:规定了字段|属性的约束
参照完整性:关系与关系之间的引用 某个字段的约束 外键
一.笛卡尔集
笛卡尔集会在下面条件下产生:
• 省略连接条件
• 连接条件无效
• 所有表中的所有行互相连接
为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
//查询员工及部门的详细信息 但是会产生一个笛卡尔积的效果
SQL> select * from emp,dept;
二. Oracle连接
使用来接在多个表中查询数据
//别名查询 为表起别名 采用别名查询
SQL> select * from emp e,dept d where e.deptno=d.deptno;
综上所述 创建连接查询时应遵循如下规则:
1、 from子句应当包括所有的表名
2、 where子句应定义连接条件 两个表1一个等值条件 三个表 2个等值条件…依次类推。
l 备注:连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。
3、 当列名为多个表共有时,列名必须被限制。
非等值连接
SELECT e.last_name, e.salary, j.grade_level FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
三 内连接和外连接
1、内连接:
内连接根据所使用的比较方式不同,把内连接分为了:
1) 等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
SQL> select * from emp e inner join dept d on e.deptno = d.deptno;
2) 不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
SQL> select * from emp e inner join dept d on e.deptno>d.deptno;
3) 自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
SQL> select * from emp natural join dept;
SQL> select e.*,d.dname,d.loc from emp e inner join dept d on e.deptno = d.deptno;
SQL> select d.*,e.ename,e.empno,e.job,e.mgr,e.hiredate,e.sal,e.comm from emp e inner join dept d on e.deptno=d.deptno;
备注:Distinct是去掉重复的行,而自然连接是去掉重复的列。
2、外连接
内连接的查询结果都是满足连接条件的记录。但是,有时我们也希望输出那些不满足连接条件的记录的信息。比如,我们想知道这个部门中所有员工的情况,也包括没有员工的部门,这时就需要使用外连接。外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式。3种外连接:
1) 左外连接(LEFT OUTER JOIN)
如果在连接查询中,连接表左端的表中所有的记录都列出来,并且能在右端的表中找到匹配的记录,那么连接成功。如果在右端的表中,没能找到匹配的记录,那么对应的记录是空值(NULL)。这时,查询语句使用关键字 LEFT OUTER JOIN,也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不关左端的表中的数据是否满足连接条件,均输出左端表中的内容。
例如:要查询所有部门的员工信息查询语句为
SQL> select * from dept d left outer join emp e on e.deptno=d.deptno order by d.deptno; 左外连接查询中左端表中的所有记录的信息都得到了保留。
备注:部门表中记录保留,如果部门中没有员工,部门显示 员工记录用null补充。
2)右外连接(RIGHT OUTER JOIN)
右外连接与左外连接类似,只是右端表中的所有元组都列出,限制左端表的数据必须满足连接条件,而不管右端表中的数据是否满足连接条件,均输出表中的内容。
例如:同上例内容,查询语句为
SQL> select * from emp e right outer join dept d on e.deptno=d.deptno order by d.deptno;
右外连接查询中右端表中的所有元组的信息都得到了保留。
3)全外连接(FULL OUTER JOIN)
全外连接查询的特点是左、右两端表中的记录都输出,如果没能找到匹配的记录,就使用NULL来代替。
例如:同左外连接例子内容,查询语句为
SQL> select * from emp e full outer join dept d on e.deptno=d.deptno order by d.deptno;
全外连接查询中所有表中的元组信息都得到了保留。
备注:一定分清:左与右 在join后边的是右
3、 交叉联接
交叉连接即笛卡儿乘积,是指两个关系中所有记录的任意组合。一般情况下,交叉查询是没有实际意义的。
SQL> select * from emp e cross join dept d;
备注:可以添加where子句筛选出有意义的数据。建议不使用。
4、 自连接查询
如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询。同一张表在FROM字句中多次出现,为了区别该表的每一次出现,需要为表定义一个别名。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。
例如:要求检索出员工编号为7369的上司的详细信息,查询语句为
SQL> select e1.* from emp e inner join emp e1 on e.mgr=e1.empno where e.empno=7369;
注意:对于连接查询中使用到的 inner outer是可以省略的。但为规范最好不要省略。
提高部分:
SQL> select * from emp e inner join dept d on e.deptno(+)=d.deptno;的理解?
l 使用外连接可以查询不满足连接条件的数据。
l 外连接的符号是 (+)。
另外:
l 在NATURAL JOIN 子句创建等值连接时,可以使用 USING 子句指定等值连接中需要用到的列。
l 使用 USING 可以在有多个列满足条件时进行选择。
l 不要给选中的列中加上表名前缀或别名。
l NATURAL JOIN 和 USING 子句经常同时使用。
原文:http://blog.csdn.net/java958199586/article/details/7350647
转载于:https://www.cnblogs.com/puresoul/archive/2010/07/08/1773871.html
Oracle多表连接查询相关推荐
- Oracle数据库表连接查询并分页SQL语句提示未明确定义列
Oracle数据库表连接查询并分页SQL语句提示未明确定义列 两张表中的字段: t_product t_category product_id category_id product_name cat ...
- oracle表连接查询逗号隔开_Oracle多表连接查询
连接:将一张表中的行按照某种条件和另一张表中的行连接起来形成一个新行的的过程. 根据连接查询返回的结果,分为3类: 内连接(inner join) 外连接(outer join) 交叉连接(cross ...
- Oracle数据库多表连接查询操作以及查询操作的补充
文章目录 一.查询语句概述 1.查询语句基本语法格式 2.伪表和伪劣 二.单表查询 1.select子句 2.FROM子句 3.WHERE子句 4.DISTINCT关键字 5.GROUP BY子句与聚 ...
- 318分组聚合,关联查询(多表连接查询)(连接查询),连接查询oracle写法,集合运算ld
----------分组聚合:对表里面的数据进行各个维度/角度的统计 -------------统计:需要用 聚合函数 max(目标字段):求最大值 min(目标字段) :求最小值 avg(目标字段) ...
- oracle多表关联查询报表,oracle多表关联查询和子查询
oracle多表关联查询和子查询 一.多表关联查询 例子: sql> create table student1 ( sid varchar(3), sname varchar(6), sage ...
- oracle 内部表连接方式,ORACLE 表连接方式
一表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的.如果一 ...
- 详解oracle多种表连接方式,详解Oracle多种表连接方式
ORACLE 多表连接与子查询 连接的类型 Oracle8i之前的表连接: 等值连接(Equijoin) 非等值连接(Non-Equijoin) 外连接(Outer join):-->左外连接- ...
- oracle 内部表连接方式,oracle表连接方式
ORACLE表连接方式及常见用法(二) /2010-12-22 13:30:13 /个人分类: 一 引言 数据仓库是目前已知的比较成熟和被广泛采用的解决方案,用于整合电信运营内部所有分散的原始业务数据 ...
- 表连接查询(多表查询,内连接,左外连接,右外连接)
什么是表连接:同时对多张表进行查询操作,表与表之间要通过连接条件来连接.一般这个连接条件是主键列是否等于外键列.表连接的主要三种方式是: 连接方式 概念说明 内连接 分为显示内连接和隐式内连接,查询的 ...
最新文章
- API网关是否真的起到了它该有的作用?
- [转]C++函数模板与模板函数
- 找工作面试经历——校招、秋招、图像算法、求职面试之路
- win7倒计时桌面小工具_iOS 14系统面板截图曝光,新增桌面小工具,越来越像安卓了...
- linux7自带haprox版本,CentOS7.4—构建最新版haproxy高可用群集
- 重点客户销售数据分析python_药品销售数据分析--python
- 6.11python 作业
- 一半的一半(51Nod-2382)
- 2018云计算开源产业大会将发布四大报告、三项评估结果
- mt4交易软件云服务器_MT4软件使用教程1常见货币对交易图表类型
- 知方可补不足~UPDLOCK更新锁的使用
- mysql查询php输出表格_MySql数据库查询结果用表格输出PHP代码示例_PHP教程
- spring boot RESTFul API拦截 以及Filter和interceptor 、Aspect区别
- Java语言基础41-44--泛型与集合
- 实现子元素在父元素中水平垂直都居中笔记
- educoder平台答案Java_不会吧!不会还有人没有《java程序设计》学堂在线答案吧...
- 夏普电视账号服务器异常,夏普电视故障通病维修案例,你中了几个?
- uni-app打开第三方APP
- js制作flash文件进度条
- 第三届“传智杯”全国大学生IT技能大赛(初赛B组)题解