搜索
首页数据库mysql教程Oracle 连接查询

Oracle 连接查询

Jun 07, 2016 pm 03:37 PM
oracle查询背景记录连接

背景: emp表中有14条记录: dept表中4条记录: salgrade表中有5条记录: 一、交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。 例如:下面的语句1和语句2的结果是相同的(均为56条

背景:

emp表中有14条记录:

Oracle 连接查询

dept表中4条记录:

Oracle 连接查询

salgrade表中有5条记录:

Oracle 连接查询

一、交叉连接(CROSS JOIN)

       交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。

       例如:下面的语句1和语句2的结果是相同的(均为56条记录)。

       语句1:隐式的交叉连接,没有CROSS JOIN。

select empno,ename,sal,dname,loc from emp,dept
   语句2:显式的交叉连接,使用CROSS JOIN

select empno,ename,sal,dname,loc from emp CROSS JOIN dept

二、内连接

       内连接是根据指定的连接条件进行连接查询,只有满足连接条件的数据才会出现在结果集中。

       当执行两个表内连接查询的时,首先在第一个表中查找到第一个记录,然后从头开始扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的的第一个记录拼接形成结果集中的第一个记录。当第二个表被扫描一遍后,再从第一个表中查询第二个记录,然后再从头扫描第二个表,逐一查找满足条件的记录,找到后将其与第一个表中的第二个记录拼接形成结果集中的一个记录。重复执行,知道第一个表中的全部记录都处理完毕为止。

1. 相等连接

       通过两个表具有相同意义的列,可以建立相等连接条件。只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中。

       例如,查询10号部门员工的员工号、员工名、工资、部门号和部门名:

SELECT empno,ename,sal,emp.deptno FROM EMP
join DEPT on EMP.DEPTNO = DEPT.DEPTNO and EMP.DEPTNO=10
       结果如下图:

Oracle 连接查询

2、不相等连接

    如果连接条件中的运算符不是等号而是其他关系的运算符,这成为不相等连接。

    例如,查询10号部门员工的工资等级:

select empno,ename,sal,grade 
from emp 
join salgrade 
on sal>losal and sal<hisal and deptno="10</pre">

<p><span><span>结果如下图:</span><br>
</span></p>
<span><img  src="/static/imghwm/default1.png" data-src="/inc/test.jsp?url=http://img.blog.csdn.net/20140208162745703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast&refer=http://blog.csdn.net/xunzaosiyecao/article/details/18988167" class="lazy" alt="Oracle 连接查询" ></span><br>
<p><span>3、自身连接</span></p>
<p>     <strong>  自身连接是指在同一个表或者视图中进行连接,相当于同一个表作为两个或多个表使用。</strong></p>
<p>       例如:查询所有员工的员工号、员工名与该员工领导的员工名、员工号:</p>

<pre class="brush:php;toolbar:false">select work.empno,work.ename,manager.empno,manager.ename 
from emp work 
join emp manager 
on work.mgr=manager.empno
结果如下图:

Oracle 连接查询

三、外连接

       外连接是指在内连接的基础上,将某个连接表中不符合连接条件的记录加入到结果集中。

       在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。 如果基表的数据在另一张表没有记录。 那么在相关联的结果集行中列显示为空值(NULL)。

1、  左外连接

       左外连接是指在内连接的基础上,将连接操作符左侧表中不符合连接条件的记录加入到结果集中,与之对应的连接操作符右侧表列用NULL填充。

       例如,查询10号部门的部门名 、员工号、员工名和所有其他部门的名称:

select dname,empno,ename 
from dept 
left join emp 
on dept.deptno=emp.deptno 
and dept.deptno=10;

        在这个例子中,首先要保证的是:我要查出10号部门的部门名称,即使10号部门中一个员工也没有,也要显示10号部门所有的部门名称,而部门名称在dept表中,故dept表放在左侧,有匹配数据的前三行就是用Join时,查出的数据,即满足On条件的数据。

结果如下图:

Oracle 连接查询

小注:关于left join的个人理解

        假如说你有两个表,资金结算单据(JSDJXX)、位信息(DWXX)
        一个表用来存放资金结算单据的信息(资金结算单据中肯定有单位嘛,但资金结算单据中得单位信息肯定是编号),另一个表用来存放单位信息(单位表里的数据比如会有:单位编号、单位名称、单位内码等等),现在我要查资金结算单据的信息,同时我又想让资金结算单据中的单位信息不显示编号,而是显示单位名称,这时候,我就需要用left join来关联单位信息表,因为我需要的数据是资金结算单据中的信息,即使在单位信息表表查不到某个单位编号对应的单位名称,这条数据我还是要显示的嘛,所以用left join而不是join。

SELECT JSDJXX_DWBH,DWXX_DWMC  
from  JSDJXX
left JOIN DWXX ON JSDJXX_DWBH = DWXX_DWBH 

        通过执行上面的SQL,获取ds,我就可以在往Gridcontrol上绑定数据的时候,绑定单位名称。

比如:

SELECT JSDJXX_DWBH,DWXX_DWMC as DWMC
from  JSDJXX
left JOIN DWXX ON JSDJXX_DWBH = DWXX_DWBH 
        在Dev  Gridcontrol上绑定列名的时候就可以用DWMC,即可。

2、  右外连接

       右外连接是指在内连接的基础上,将连接操作符右侧表中不符合连接条件的记录加入到结果集中,与之对应的连接操作符左侧表列用NULL填充。

       例如,查询20号部门的部门名称及其员工号、员工名和所有其他部门的员工号、员工名:

select empno ,ename,dname 
from dept 
right join emp 
on dept.deptno=emp.deptno 
and dept.deptno=20;
结果如下图:

Oracle 连接查询

3、  全连接

       全外连接是指在内外连接的基础上,将连接操作符两侧表中不符合的记录加入到结果集中

       例如,查询所有的部门名和员工名:

select dname,ename 
from emp 
full join dept 
on emp.deptno=dept.deptno
结果如下图:

Oracle 连接查询
小注:

1、左右外连接小结:

      左外连接(LEFT OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)左边表的不匹配行。左外连接实际上可以表示为:
      左外连接 = 内连接 + 左边表中失配的元组
      其中,缺少的右边表中的属性值用NULL表示。
      右外连接(RIGHT OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)右边表的不匹配行。右外连接实际上可以表示为:
      右外连接 = 内连接 + 右边表中失配的元组
      其中,缺少的左边表中的属性值用NULL表示。
      全外连接(FULL OUTER JOIN)告诉DBMS生成的结果表中,除了包括匹配行外,还包括JOIN关键字(FROM子句中)左边表和右边表的不匹配行。全外连接实际上可以表示为:
      全外连接 = 内连接 + 左边表中失配的元组 + 右边表中失配的元组。
      其中,缺少的左边表或者右边表中的属性值用NULL表示。

2、类似文章推荐:点击打开链接

3、小结

      下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

  • JOIN: 如果表中有至少一个匹配,则返回行。例子:点击打开链接
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行。例子:点击打开链接
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行。例子:点击打开链接
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行。例子:点击打开链接
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
解释InnoDB缓冲池及其对性能的重要性。解释InnoDB缓冲池及其对性能的重要性。Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通过缓存数据和索引页来减少磁盘I/O,提升数据库性能。其工作原理包括:1.数据读取:从BufferPool中读取数据;2.数据写入:修改数据后写入BufferPool并定期刷新到磁盘;3.缓存管理:使用LRU算法管理缓存页;4.预读机制:提前加载相邻数据页。通过调整BufferPool大小和使用多个实例,可以优化数据库性能。

MySQL与其他编程语言:一种比较MySQL与其他编程语言:一种比较Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

学习MySQL:新用户的分步指南学习MySQL:新用户的分步指南Apr 19, 2025 am 12:19 AM

MySQL值得学习,因为它是强大的开源数据库管理系统,适用于数据存储、管理和分析。1)MySQL是关系型数据库,使用SQL操作数据,适合结构化数据管理。2)SQL语言是与MySQL交互的关键,支持CRUD操作。3)MySQL的工作原理包括客户端/服务器架构、存储引擎和查询优化器。4)基本用法包括创建数据库和表,高级用法涉及使用JOIN连接表。5)常见错误包括语法错误和权限问题,调试技巧包括检查语法和使用EXPLAIN命令。6)性能优化涉及使用索引、优化SQL语句和定期维护数据库。

MySQL:初学者的基本技能MySQL:初学者的基本技能Apr 18, 2025 am 12:24 AM

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

MySQL:结构化数据和关系数据库MySQL:结构化数据和关系数据库Apr 18, 2025 am 12:22 AM

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

MySQL:解释的关键功能和功能MySQL:解释的关键功能和功能Apr 18, 2025 am 12:17 AM

MySQL是一个开源的关系型数据库管理系统,广泛应用于Web开发。它的关键特性包括:1.支持多种存储引擎,如InnoDB和MyISAM,适用于不同场景;2.提供主从复制功能,利于负载均衡和数据备份;3.通过查询优化和索引使用提高查询效率。

SQL的目的:与MySQL数据库进行交互SQL的目的:与MySQL数据库进行交互Apr 18, 2025 am 12:12 AM

SQL用于与MySQL数据库交互,实现数据的增、删、改、查及数据库设计。1)SQL通过SELECT、INSERT、UPDATE、DELETE语句进行数据操作;2)使用CREATE、ALTER、DROP语句进行数据库设计和管理;3)复杂查询和数据分析通过SQL实现,提升业务决策效率。

初学者的MySQL:开始数据库管理初学者的MySQL:开始数据库管理Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境