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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作393-注册小程序

每个小程序都需要在 app.js 中调用 App 方法注册小程序实例&#xff0c;绑定生命周期回调函数、错误监听和页面不存在监听函数等。详细的参数含义和使用请参考 App 参考文档 。// app.js App({onLaunch (options) {// Do something initial when launch.},onShow (options) {//…

java工作台无法显示_【Eclipse】使用指南(18)搜索工作台

Searching the workbench搜索工作台In this section, you will search the workbench for Java elements.本小节&#xff0c;你将在工作台中搜索Java元素。In the Search dialog, you can perform file, text or Java searches. Java searches operate on the structure of the…

Gridview 鼠标悬浮光棒效果

代码 1 protectedvoidGridView1_RowDataBound(objectsender, GridViewRowEventArgs e)2 {3 4 //如果是绑定数据行 5 6 if(e.Row.RowType DataControlRowType.DataRow)7 {8 9 //鼠标经过时&#xff0c;行背景色变 10 e.Row.Attributes.Add("onmouseover",11 "cu…

神策埋点

首先进入后台管理点击生成导入代码&#xff1a; 选好选项后点生成&#xff1a; 以下是生成的代码&#xff1a; (function(para) {var p para.sdk_url, n para.name, w window, d document, s script,x null,y null;if(typeof(w[sensorsDataAnalytic201505]) ! undefined…

java 抽象类语法_JAVA基础语法8--多态/抽象类/抽象方法

多态继承、封装、多态、抽象是面向对象编程的四大基本特征。封装隐藏了类的内部实现机制&#xff0c;从而可以在不影响使用者的前提条件下&#xff0c;改变类的内部结构&#xff0c;同时保护了数据。继承是为了重用父类代码&#xff0c;同时为多态做准备。那么&#xff0c;什么…

01-几种应用上下文区别

第一次写博客&#xff0c;有点小激动&#xff0c;写的东西很水&#xff0c;仅供自己加深印象??&#xff0c;有人不介意想参考&#xff1f;那我也不介意&#xff0c;??。。。。 Spring中几种常用的应用上下文有&#xff1a; 1. ClassPathXmlApplicationContext 2. FileSyste…

工作394-注册页面学习

注册页面对于小程序中的每个页面&#xff0c;都需要在页面对应的 js 文件中进行注册&#xff0c;指定页面的初始数据、生命周期回调、事件处理函数等。 使用 Page 构造器注册页面简单的页面可以使用 Page() 进行构造。代码示例&#xff1a;//index.js Page({data: {text: "…

(搬家文) c++引用深入探讨

(偶然翻起自己的旧博,忽然发现大三的时候写的这篇文章,仔细看看觉得写的还是那么回事,所以赶紧搭救出来) 引用的声明: 基本格式&#xff1a;引用类型 &引用名被引用对象 &运算符&#xff1a;声明运算符& 跟取地址运算符&和位异或运算符&没有任何关系ext…

参数作用域实践

auto参数&#xff0c;申明时可以忽略auto void fun(){int p 1;cout<<"p:"<<p<<endl;for(int i0;i<5;i){int p 10;cout<<"p:"<<p<<endl;}// 此处输出的还是外围作用域定义的p值1cout<<"p:"<<…

工作395-路由选择

初始化 新页面入栈 打开新页面 新页面入栈 页面重定向 当前页面出栈&#xff0c;新页面入栈 页面返回 页面不断出栈&#xff0c;直到目标返回页 Tab 切换 页面全部出栈&#xff0c;只留下新的 Tab 页面 重加载 页面全部出栈&#xff0c;只留下新的页面

phpstudy2018修改php版本,phpstudy的php版本自由修改的方法

作为PHP开发的常用工具&#xff0c;phpstudy具有许多强大的功能&#xff0c;它可以连接到MySQL并检查服务器状态&#xff0c;感兴趣的话就随爱站技术频道小编一起来了解phpstudy的php版本自由修改的方法吧&#xff01;网上有着许多的网站集成搭建软件&#xff0c;比较出名的就有…

Sql字符串函数(1)

--1.截取已知长度的函数 Select S1http://www.163.com-- A.截取从字符串左边开始N个字符 Declare S1 varchar(100) 显示结果: http Select Left(S1,4) Select S1http://www.163.com -- B.截取从字符串右边开始N个字符(例如取字符http://www.163.com/) Declare S1 varchar(100) …

工作397-Wxml

WXMLWXML&#xff08;WeiXin Markup Language&#xff09;是框架设计的一套标签语言&#xff0c;结合基础组件、事件系统&#xff0c;可以构建出页面的结构。要完整了解 WXML 语法&#xff0c;请参考WXML 语法参考。用以下一些简单的例子来看看 WXML 具有什么能力&#xff1a; …

php格式的种子,php读取torrent种子文件内容的方法(测试可用)

本文实例讲述了php读取torrent种子文件内容的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;/*** Class xBEncoder* Author: Angus.Fenying* Version: 0.1* Date: 2014-06-03** This class helps stringify or parse BENC* codes.** All Copyrights 2007 - 2014 …

API网关从入门到放弃

前言 假设你正在开发一个电商网站&#xff0c;那么这里会涉及到很多后端的微服务&#xff0c;比如会员、商品、推荐服务等等。 那么这里就会遇到一个问题&#xff0c;APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话&#xff0c;可以给每个业务都分配一个独立的域…

BarTender操作遇到OLE DB遇到了错误0x80004005”的问题

在使用BarTender打印条码时操作遇到"OLE DB遇到了错误0x80004005”的问题 在打印时关掉数据库所连接的Excel文件即可转载于:https://www.cnblogs.com/edrp/archive/2010/07/18/1780122.html

工作397-Wx

WXSSWXSS (WeiXin Style Sheets)是一套样式语言&#xff0c;用于描述 WXML 的组件样式。WXSS 用来决定 WXML 的组件应该怎么显示。为了适应广大的前端开发者&#xff0c;WXSS 具有 CSS 大部分特性。同时为了更适合开发微信小程序&#xff0c;WXSS 对 CSS 进行了扩充以及修改。与…

震惊!垃圾分类居然能用Python搞定!

目录 0 引言 1 环境 2 需求分析 3 代码实现 4 后记 0 引言 纸巾再湿也是干垃圾&#xff1f;瓜子皮再干也是湿垃圾&#xff1f;&#xff1f;最近大家都被垃圾分类折磨的不行&#xff0c;傻傻的你是否拎得清&#xff1f;???自2019.07.01开始&#xff0c;上海已率先实施垃圾分类…

java中 try用法,Java里try catch的简单用法

优质回答 回答者&#xff1a;temps1991Java里try catch的简单用法&#xff1a;1、trycatch程序的流程是&#xff1a;运行到try块中&#xff0c;如果有异常抛出&#xff0c;则转到catch块去处理。然后执行catch块后面的语句扩展部分&#xff1a;1、trycatchfinally程序的流程是&…

免费试用 Mobile Me

曾经尝试着注册过Mobile me&#xff0c;发现居然试用也要提供信用卡&#xff0c;而且地区选项里根本就没有中国&#xff0c;故愤然弃之。 今天忽然想再尝试一把&#xff0c;毕竟把mac、iphone&#xff0c;和即将到来的ipad连在一起是挺有意思的事情。 打开http://www.apple.com…