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
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值