博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle中表的四种连接方式讲解
阅读量:6767 次
发布时间:2019-06-26

本文共 1974 字,大约阅读时间需要 6 分钟。

hot3.png

表的连接是指在一个SQL语句中通过表与表之间的关连,从一个或多个表中检索相关的数据,大体上表与表之间的连接主要可分四种,分别为相等连接,外连接,不等连接和自连接,本文将主要从以下几个典型的例子来分析表的四种不同连接方式:

  1. 相等连接

  通过两个表具有相同意义的列,可以建立相等连接条件。

  只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。

  例 查询员工信息以及对应的员工所在的部门信息;

 

  SELECT * FROM EMP,DEPT;
  SELECT * FROM EMP,DEPT
  WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

  REM 显示工资超过2000的员工信息以及对应的员工的部门名称。

  2. 外连接

  对于外连接,中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。除了显示匹配相等连接条件的信息之外,还显示无法匹配相等连接条件的某个表的信息。

  外连接采用(+)来识别。

  A) 左条件(+) = 右条件;

  代表除了显示匹配相等连接条件的信息之外,还显示右条件所在的表中无法匹配相等连接条件的信息。

  此时也称为"右外连接".另一种表示方法是:

  SELECT ... FROM 表1 RIGHT OUTER JOIN 表2 ON 连接条件

  B) 左条件 = 右条件(+);

  代表除了显示匹配相等连接条件的信息之外,还显示左条件所在的表中无法匹配相等连接条件的信息。

  此时也称为"左外连接".

  SELECT ... FROM 表1 LEFT OUTER JOIN 表2 ON 连接条件

  例 显示员工信息以及所对应的部门信息

  --无法显示没有部门的员工信息

  --无法显示没有员工的部门信息

 

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

 

  --直接做相等连接:

 

  SELECT * FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

 

  REM 显示员工信息以及所对应的部门信息,显示没有员工的部门信息

 

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO(+) = DEPT.DEPTNO;
  SELECT * FROM EMP RIGHT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

 

  REM 显示员工信息以及所对应的部门信息,显示没有部门的员工信息

 

  --SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO(+);
  SELECT * FROM EMP LEFT OUTER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;

 

  3. 不等连接

  两个表中的相关的两列进行不等连接,比较符号一般为>,<,...,BETWEEN.. AND..

 

  REM SALGRADE
  --DESC SALGRADE;
  --SELECT * FROM SALGRADE;

 

  REM 显示员工的编号,姓名,工资,以及工资所对应的级别。

 

  SELECT EMPNO,ENAME,SAL,SALGRADE.* FROM SALGRADE,EMP
  WHERE EMP.SAL BETWEEN LOSAL AND HISAL;

 

  REM 显示雇员的编号,姓名,工资,工资级别,所在部门的名称;

 

  SELECT EMPNO,ENAME,SAL,GRADE,DNAME FROM EMP,DEPT,SALGRADE
  WHERE EMP.DEPTNO = DEPT.DEPTNO AND EMP.SAL BETWEEN LOSAL AND HISAL;

 

  4. 自连接

  自连接是数据库中经常要用的连接方式,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。下面介绍一下自连接的方法:

  将原表复制一份作为另一个表,两表做笛卡儿相等连接。

  例 显示雇员的编号,名称,以及该雇员的经理名称

  SELECT WORKER.ENAME,WORKER.MGR,MANAGER.EMPNO,MANAGER.ENAME FROM EMP WORKER,EMP MANAGER

  WHERE WORKER.MGR = MANAGER.EMPNO;

转载于:https://my.oschina.net/deepins/blog/316348

你可能感兴趣的文章
一位老码农的分享:一线程序员该如何面对「中年危机」?
查看>>
关于ES6深度拷贝
查看>>
财会小白的办公室自救指南
查看>>
Java核心技术笔记 接口、lambda表达式与内部类
查看>>
Docker 验证 Centos7.2 离线安装 Docker 环境
查看>>
【译】你可能不需要派生状态
查看>>
自动化瓦力多渠道打包python脚本
查看>>
各类型的 toString 方法合集
查看>>
Python爬虫 --- 2.4 Scrapy之天气预报爬虫实践
查看>>
GAN是一种特殊的损失函数?
查看>>
数据告诉我们:什么样的程序员最抢手!
查看>>
javascript 正则表达式 (一)
查看>>
mac虚拟环境下linux系统搭建及系统初始化记录——使用VMWare及RHEL 7
查看>>
如何解决pip install Twisted时出错: limits.h: No such file or directory
查看>>
交互式数据可视化-D3.js(二)选择集和数据
查看>>
Logan:美团点评的开源移动端基础日志库
查看>>
怎样给一个Vue页面添加大纲导航
查看>>
ElementUI的Table组件中的renderHeader方法研究
查看>>
Apache Rewrite
查看>>
深入K8S Job(一):介绍
查看>>