ORACLE SQL 多表查询

连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。只有真正了解它们之间的区别,才能正确使用,下面是常见的几种连接方式:

  1. INNER JOIN(内连接)
    INNER JOIN(内连接),也成为自然连接
    作用:根据两个或多个表中的列之间的关系,从这些表中查询数据。
    注意: 内连接是从结果中删除其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。
    重点:内连接,只查匹配行。
    语法:(INNER可省略)
  1. SELECT * FROM SCORE SC,STUDENT ST WHERE SC.SNO=ST.SNO;
  2. SELECT * FROM SCORE SC INNER JOIN STUDENT ST ON SC.SNO=ST.SNO;
    在这里插入图片描述
  1. LEFT OUTER JOIN,简称LEFT JOIN,左外连接(左连接)
    结果集保留左表的所有行,但只包含第二个表与第一表匹配的行。第二个表相应的空行被放入NULL值。
    语法:
    SELECT * FROM COURSE CO LEFT JOIN SCORE SC ON SC.CNO=CO.CNO;
    在这里插入图片描述
    结论:通过结果,我们可以看到左连接包含了第一张表的所有信息,在第二张表中如果没有匹配项,则用NULL代替。
  2. RIGHT JOIN(right outer join)右外连接(右连接)
    右外连接保留了第二个表的所有行,但只包含第一个表与第二个表匹配的行。第一个表相应空行被入NULL值。右连接与左连接思想类似。只是第二张保留全集,如果第一张表中没有匹配项,用NULL代替
    语法:
    SELECT * FROM SCORE SC RIGHT JOIN COURSE CO ON CO.CNO=SC.CNO;
    在这里插入图片描述
  3. FULL JOIN (FULL OUTER JOIN,全外连接)
    全外连接,简称:全连接。会把两个表所有的行都显示在结果表中,包含了两张表的所有记录,没有记录丢失,没有匹配的行用NULL代替。
    在这里插入图片描述
  4. CROSS JOIN (交叉连接)
    交叉连接。交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。 简单查询两张表组合,这是求笛卡儿积,效率最低。
    笛卡儿积:笛卡尔乘积,也叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
    语法:
    SELECT * FROM SCORE CROSS JOIN COURSE
    在这里插入图片描述
    查询多表,其实也是笛卡儿积,与CROSS JOIN等价,以下查询同上述结果一样。这个可能很常见,但是大家一定要注意了,这样就查询了两张表中所有组合的全集。
  5. UNION(合并)
    UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。注意:使用UNION时,两张表查询的结果有相同数量的列、列类型相似。
  1. UNION语法
    SELECT SNAME FROM STUDENT UNION SELECT TNAME FROM TEACHER
    在这里插入图片描述

  2. UNION ALL 语法
    SELECT SNAME FROM STUDENT UNION ALL SELECT TNAME FROM TEACHER
    在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值