oracle基础-多表关联查询

一、概述

        在实际应用系统开发中会设计多个数据表,每个表的信息不是独立存在的,而是若干个表之间的信息存在一定的关系,当用户查询某一个表的信息时,很可能需要查询关联数据表的信息,这就是多表关联查询。SELECT语句自身是支持多表关联查询的,多表关联查询要比单表查询复杂的多。在进行多表关联查询时,可能会涉及表别名、内连接、外连接、自然连接和交叉连接等概念,下面将对这些内容进行讲解。

二、表的别名

        在多表关联查询时,如果多个表之间存在同名的列,则必须使用表名来限定列的引用。例如,在SCOTT模式中,DEPT表和EMP表都有DEPTNO列,当用户使用该列关联查询两个表时,就需要通过指定表名来区分这两个列的归属。但是,随着查询变得越来越复杂,语句就会因为每次限定列必须输入表名而变得冗长。对于这种情况,SQL提供了设定表别名的机制,使用简短的表别名可以代替原有较长的表名称,这样就大大缩减语句的长度。

        【例2.1】在SCOTT模式下,通过DEPTNO(部门号)列来关联EMP表和DEPT表,并检索这两个表中相关字段的信息,代码及运行结果如下:

select e.empno 员工编号,e.ename 员工姓名,d.dname 部门 from dept d,emp e where d.deptno = e.deptno and e.job = 'MANAGER';

        在上面的SELECT语句中,FROM子句最先执行,然后才是WHERE子句和SELECT子句,这样在FROM子句中指定表的别名后,当需要限定引用列时,其他所有子句都可以使用表的别名。

        另外,还需要注意一点,一旦在FROM子句中为表指定了别名,则必须在剩余的子句中都是用表的别名,而不允许再使用原来的表名称,否则,将出现【例2.2】错误提示。

【例2.2】 

select e.empno 员工编号,e.ename 员工姓名,d.dname 部门 from dept d,emp e where d.deptno = e.deptno and emp.job = 'MANAGER';

 总结:

        1、表的别名在FROM子句中定义,别名放在表名之后,之间用空格隔开。

        2、别名一经定义,在整个查询语句中就只能使用表的别名而不能在使用表名。

        3、表的别名只在所定义的查询语句中有效。

        4、应该选择有意义的别名,表的别名最长为30个字符,但越短越好。

三、内连接

        内连接是一种常用的多表关联查询方式,一般使用关键字INNER JOIN来实现。其中INNER关键字可以省略,当只使用JOIN关键字时,语句默认表示内连接操作。在使用内连接查询多个表时,必须在FROM子句之后定义一个ON子句,ON子句指定内连接操作列与连接条件匹配的数据行,使用比较运算符比较被连接列的值。简单来说,内连接就是使用JOIN指定用于连接的两个表,使用ON指定表的连接条件。若进一步限制查询范围,则可以直接在后面添加WHERE子句。内连接的语法格式如下:

SELECT columns_list
FROM table_name1 [INNER] JOIN table_name2
ON join_condition
[WHERE]

其中:columns_list:字段列表

        table_name1 和 table_name2 :两个要实现内连接的表。

        join_condition:实现内连接的条件表达式

        WHERE :使用where子句进一步限制查询范围。

【例3.1】在scott模式下,通过deptno字段来内连接emp表和dept表,查询dept表中部门名称为 SALES,并检索这两个表中相关的字段信息。

select e.empno 员工编号,e.ename 员工姓名,d.dname 部门 
from emp e inner join dept d 
on e.deptno = d.deptno
where d.dname = 'SALES';

四、外连接

        使用外连接进行多表查询时,返回的查询结果中只包含符合查询条件和连接条件的数据。内连接消除了与另一个表中的任何数据不匹配的行,而外连接扩展了内连接的结果集,除了返回所有匹配的数据外,还会返回一部分或全部不匹配的行,这主要取决于外连接的种类。外连接通过有以下三种。

        左外连接:关键字为LEFT OUTER JOIN 或 LEFT JOIN

        右外连接:关键字为RIGHT OUTER JOIN 或 RIGHT JOIN

        完全外连接:关键字为FULL OUTER JOIN 或 FULL JOIN

与内连接不同的是,外连接不只列出与连接条件匹配的数据,还能够列出左表(左外连接时)、右表(右外连接时)、两个表(全部外连接时)中所有符合搜索条件的数据。

        4.1 左外连接

        左外连接的查询结果中不仅包含了满足连接条件的数据,还包含左表中不满足连接条件的数据。

        【例4.1.1】首先在emp表中插入一条新数据(注意没有为deptno和dname列插入值,即它们的值是null),然后实现emp表和dept表之间通过deptno列进行左外连接。

插入

insert into emp (empno,ename,job) values(9527,'EAST','SALESMAN');

查询

select e.empno,e.ename,e.job,d.deptno,d.dname 
from emp e left join dept d
on e.deptno = d.deptno;

结果

        从上面的查询结果中可以看到,虽然新插入的数据deptno值为null,但该行记录让然出现在查询结果中,说明左外连接的查询结果会包含左表中不满足“连接条件”的数据。 

        4.2   右外连接

        同样道理,右外连接的查询结果中不仅包含了满足连接条件的数据行,而且还包含右表中不满足连接条件的数据行。

         【例4.2.1】在SCOTT模式下,实现emp表和dept表之间通过deptno列进行右外连接。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e
right join dept d 
on e.deptno = d.deptno

        运行结果如下

          

 ·        从上面的查询结果中可以看到,虽然部门编号为40的数据行在emp表中还没有员工记录,但它却出现在查询结果中,这说明右外连接的查询结果会包含由表中不满足“连接条件”的数据行。

        在外连接中也可以使用外连接的连接运算符,外连接的连接运算符为“(+)”,该连接运算符可以放在等号的左边,也可以放在等号的右边,但是一定要放在缺少信息的那一边,比如放在e.deptno所在的一方。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e,dept d
where e.deptno (+)= d.deptno

运行结果

使用(+)操作符时应注意:

        1、当使用(+)操作符执行外连接时,如果在WHERE子句中包含多个条件,则必须在所有条件中都包含(+)操作符。

        2、(+)操作符只适用于列,而不能用在表达式上。

        3、(+)操作符不能与ON和IN操作符一起使用。

4.3 完全外连接

在执行完全外连接时,Oracle会执行一个完成的左外连接和右外连接查询,然后将查询结果合并,并消除重复的数据。

【例4.3.1】 在SCOTT模式下,实现emp表和dept表之间通过deptno列进行完全外连接。

select e.empno,e.ename,e.job,d.deptno,d.dname
from emp e
full join dept d 
on e.deptno = d.deptno

 

4.4 自然连接

        自然连接和内连接功能相似,自然连接是指在检索多个表时,Oracle会将第一个表中的列与第二个表中具有相同名称的列进行自动连接。在自然连接中,用户不需要明确指定进行连接的列,这个任务有Oracle自动完成,自然连接使用NATURAL JOIN 关键字。

【4.4.1】 在emp表中检索工资(sal字段)大于2000的记录,并实现emp表与dept表的自然连接。

select empno,ename,job,dname
from emp natural join dept
where sal > 2000

    由于自然连接要求表之间必须具有相同的列名称,这样容易在设计表时出现不可预知的错误,所以在实际应用中很少用到自然连接。另外需要注意的是,在使用自然连接时,不能为列指定限定词(即表名或表的别名),否则Oracle会弹出“ORA-25155:NATURAL连接中使用的列不能有限定词”的错误提示.

4.5 自连接

     在实际应用中,用户可能会拥有“自引用式”的外键。“自引用式”外键是指表中的一列可以使该表住建的一个外键。

     自连接主要用在自参考表上显示上下级关系或者层次关系。自参照表是指在同一张表的不同列之间具有参照关系活着主从关系的表。例如,emp表包含empno(雇员号)和mgr(管理员号)列,两者之间就具有参照关系。这样用户就可以通过mgr列与empno列的关系,实现查询某个管理者所管理的下属员工信息。

【例4.5.1】在SCOTT模式下,查询所有管理者所管理的下属员工信息。

select e2.ename 上层管理者,e1.ename 下属员工
from emp e1 
left join emp e2 
on e1.mgr = e2.empno
order by e1.mgr

 4.6 交叉连接

交叉连接实际上就是不需要任务连接条件的连接,它使用CROSS JOIN关键字来实现,语法格式:

select colums_list

from talble_name1 cross join table_name2

交叉连接的执行结果是一个笛卡尔积,这种查询结果是非常冗余的,但是可以通过WHERE子句来过滤出有用的记录信息。

【4.6.1】在SCOTT模式下,通过交叉连接dept表和emp表,计算出查询结果的行数。

select count(*)
from emp cross join dept

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
【完整Oracle SQL开发教程课件如下】 数据库开发 Oracle数据库 SQL开发教程 第0章 开篇概述(共14页).pdf 数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制数据和对数据排序(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第04章 单行函数(共61页).pdf 数据库开发 Oracle数据库 SQL开发教程 第05章 多表连接(共48页).pdf 数据库开发 Oracle数据库 SQL开发教程 第06章 分组函数(共41页).pdf 数据库开发 Oracle数据库 SQL开发教程 第07章 子查询(共49页).pdf 数据库开发 Oracle数据库 SQL开发教程 第08章 集合运算(共20页).pdf 数据库开发 Oracle数据库 SQL开发教程 第09章 高级子查询(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第10章 层次查询(共17页).pdf 数据库开发 Oracle数据库 SQL开发教程 第11章 数据操作与事务控制(共52页).pdf 数据库开发 Oracle数据库 SQL开发教程 第12章 Oracle数据库网络连接(共39页).pdf 数据库开发 Oracle数据库 SQL开发教程 第13章 创建和维护(共37页).pdf 数据库开发 Oracle数据库 SQL开发教程 第14章 约束(共33页).pdf 数据库开发 Oracle数据库 SQL开发教程 第15章 视图(共23页).pdf 数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf
### 回答1: Oracle是一款非常流行的关系型数据库管理系统,对于初学者来说,学习Oracle可能会感到比较困难。因此,很多人会寻找Oracle基础入门教程来帮助自己更好地学习。本文将介绍一些Oracle基础入门教程图解的内容。 首先,Oracle数据库系统的基础结构包括实例和数据库。实例是指一个运行中的Oracle进程,它负责管理和处理数据库中的事务,而数据库则是其中存储的数据。在Oracle教程图解中,通常会展示实例和数据库之间的关系,帮助学习者理解两者之间的联系。 其次,Oracle语言中的数据类型和语法是初学者最需要掌握的内容之一。Oracle教程图解通常会提供一些数据类型的可视化示例,如数字、字符串、日期等,帮助学习者更直观地理解数据类型的概念。另外,Oracle语法也是初学者必须掌握的内容,Oracle教程图解通常会以图形化的方式展示Oracle语法的结构和关键字,让学习者更好地理解Oracle语言的逻辑框架。 最后,Oracle数据库的操作是Oracle基础入门教程图解不可或缺的部分。Oracle教程图解通常会从数据库的创建、的建立、数据的插入、查询和修改等方面进行讲解,以图解的方式展示操作的步骤和注意事项。这些操作的图解化可以让学习者更好地理解Oracle数据库的操作方法,避免出现一些常见的错误。 总之,Oracle基础入门教程图解是一项非常有价值的学习资源,对于初学者来说尤其如此。通过图解方式,学习者可以更直观、实际地了解Oracle数据库系统的结构和语言,从而更好地掌握Oracle数据库系统的操作技巧。 ### 回答2: Oracle是世界上最大的数据库管理系统之一,得益于其广泛用途和功能强大的特性而成为业界标准。由于其多方面的应用,越来越多的人开始学习,但是,Oracle学习门槛比较高,需要掌握许多细节。因此,Oracle基础入门教程图解是一个非常好的学习资料,逐步向读者介绍Oracle的基本概念、架构、实用工具和基于SQL的基础知识。 首先,文章介绍了Oracle数据库的概念和理念,以及它的架构和对象。然后,它详细介绍了Oracle的常见工具和各种命令,以帮助学习者了解如何使用Oracle的各种工具和SQL语言进行基本管理和查询,如创建、插入数据、更新记录、删除记录等。 另外,Oracle基础入门教程图解还介绍了Oracle数据库的性能优化技巧,这是Oracle的一个非常重要的方面,需要掌握的知识点非常多。为了使读者更好的理解,本文通过图形化方式介绍了Oracle的慢查询优化和索引相关的知识,帮助读者理解Oracle的复杂性。 总的来说,Oracle基础入门教程图解是一个很好的Oracle学习资料。它的讲解由浅入深、内容丰富、实用性强,能够帮助那些想要了解Oracle数据库管理系统的人快速学习,以及为那些工作需要基本SQL编程技能的程序员提供了更为便捷的步骤入门。 ### 回答3: Oracle是一种完整的企业级数据库应用程序。学习Oracle基础入门知识对于想要进一步深入学习数据库管理和数据处理的人来说是非常重要的。在教学过程中,图解和实例非常有帮助。 首先,Oracle体系结构是Oracle数据库基础。它包含了三个主要的组件:物理存储结构、逻辑存储结构和实例。物理存储结构指的是实际存储在硬盘上的数据库。逻辑存储结构是根据业务逻辑组织数据的方法。实例是Oracle数据库的运行环境,它包括了应用程序、用户、数据、系统进程和内存缓存。 其次,Oracle数据库基础概念包括、字段、行、主键和外键等。是指将数据组织成行和列来存储的基本数据库对象。字段是中的每一列。行是中的每一行。主键是一种约束,用于定义中的唯一标识符。外键是一种参照完整性约束,用于确保关联格之间的数据完整性。 第三,Oracle SQL是执行各种数据库操作的语言,如插入、更新以及选择操作。学习Oracle SQL的基础知识之后,需要了解如何使用Oracle的命令行工具以及各种编程接口来与数据库进行交互。实践中编写简单的SQL语句,并通过它们来执行各种查询和操作是非常有帮助的。 综上所述,学习Oracle基础知识需要加深对Oracle体系结构、基本概念以及SQL语言的理解。图解和实例也是学习过程中不可或缺的元素,可以帮助学生更好的理解和掌握相关知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geminigoth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值