ORACLE SQL 多表查询

ORACLE SQL 多表查询

开发工具与关键技术:Oracle sql*plus  PLSQL Developer
作者:陈剑波
撰写时间:2019年01月01日

笛卡儿的产品
当连接条件无效或完全省略时,结果是一个笛卡尔积,其中显示所有行组合。第一个表中的所有行都连接到第二个表中的所有行。
不能省略查询条件,省略条件将会产生笛卡尔积的错误情况!!!当需要来自数据库中多个表的数据时,将使用连接条件。根据对应列(通常是主键列和外键列)中存在的公共值,可以将一个表中的行连接到另一个表中的行。
要将n个表连接在一起,至少需要n-1个连接条件。例如,要连接四个表,至少需要三个连接。如果表具有连接的主键,则此规则可能不适用,在这种情况下,需要多个列才能惟一标识每一行。
限定模糊列名
你需要用表名限定WHERE子句中的列名,以避免歧义。如果没有表前缀,DEPARTMENT_ID列可以来自DEPARTMENTS表或EMPLOYEES表。有必要添加表前缀来执行查询。
如果两个表之间没有公共列名,则不需要限定列。但是,使用表前缀可以提高性能,因为您可以准确地告诉Oracle服务器在哪里可以找到列。
例如,等值连接四张表查询所有数据,三个连接条件用AND连接。见实现的代码
以及输出的截图:
在这里插入图片描述

使用外部连接返回没有直接匹配的记录,如果在联接条件中使用外部联接操作符,则可以返回丢失的行。操作符是一个用圆括号(+)括起来的加号,它被放在缺乏信息的连接的“一侧”。该操作符的作用是创建一个或多个空行,可以将非缺陷表中的一个或多个行连接到这些空行。
例如,左外连接将学生表没有成绩的同学显示出来。见实现的代码
以及输出的截图:
在这里插入图片描述

自连接:连接到一个表本身,有时需要将表连接到它本身。要查找每个员工经理的名称,您需要将EMPLOYEES表连接到它本身,或者执行自连接。
例如,要查找所有拥有下属的的名称。见实现的代码
以及输出的截图:
在这里插入图片描述

自然连接:可以使用关键字NATURAL JOIN关键字,根据具有匹配数据类型和名称的两个表中的列自动完成连接。如果只是列名相同而数据类型不同,则会产生错误。
例如,使用自然连接连接学生表和成绩表, 学生表和成绩表公共列只有学号并且数据类型一致。如果有其它公共列也会进行连接。见实现的代码
以及输出的截图:
在这里插入图片描述
使用USING子句创建连接,USING子句只能指定应该用于等连接的列。USING子句中引用的列在SQL语句中的任何位置都不应该有限定符(表名或别名)。
例如,使用USING子句指定连接的条件,教师表连接课程表。见实现的代码
以及输出的截图:
在这里插入图片描述

满外连接:将连接的表所有数据都显示出来,包括表中不匹配的数据。
例如,使用满外连接将学生表和成绩表的所有数据包括两边不匹配的数据。见实现的代码
以及输出的截图:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值