zoukankan      html  css  js  c++  java
  • 基础知识系列Oracle的连接

        从今天开始我决定每周抽出一些空闲时间,记录一下Oracle的一些基础知识,也算是方便用baidu和google的人吧。

        今天介绍一个非常有数学气息的--连接。

        首先介绍我今天需要使用的两张表,test1和test2。test1是学生基本信息表,包括学生的名字和学号;test2是成绩表,有学生学号,成绩这两列。

        表的数据如下图:

        test1:

        test2:

         这两个表由stu_id进行关联。

         好了,现在介绍第一种连接形式:内连接。代码如下:

         

    SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
    FROM TEST1 T1
    INNER JOIN TEST2 T2
    ON T1.STU_ID = T2.STU_ID;

          这中查询的结果是:

          很不幸,玄烨同学没去考试。因此查不出成绩来。但是我现在很想很想得到一张完全的成绩单,包括没去考试的玄烨同学,因为我要开家长会了,怎么办呢?这个时候就可以用到外连接:

          

    SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
    FROM TEST1 T1
    LEFT OUTER JOIN TEST2 T2
    ON T1.STU_ID = T2.STU_ID;

          结果如下:

          

          这里的基本原理就是关系代数,可以参考《数据库系统概论》(王珊,萨师煊)第二章的内容。

          有左连接就有右连接。给test2增加几行,stu_id不在test1的记录。然后写这个SQL:

    SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
    FROM TEST1 T1
    RIGHT OUTER JOIN TEST2 T2
    ON T1.STU_ID = T2.STU_ID;

           这样就取到了并不满足相等条件的test2中的记录,下图红框框中的:

           

           现在我想取到所有的,也就是说test1中没成绩的和test2中没有名字的记录,这个时候就要用到全外连接

    SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE
    FROM TEST1 T1
    FULL OUTER JOIN TEST2 T2
    ON T1.STU_ID = T2.STU_ID;

           得到的结果:

           

          还有种自然连接,平时我也不用,结果嘛,自己看吧。先看SQL:

          

    SELECT STU_ID, STU_NAME, SCORE FROM TEST1 T1 NATURAL JOIN TEST2 T2;

          结果:

           

          我感觉这个和以下的SQL结果是一样的:

          

    SELECT T1.STU_ID, T1.STU_NAME, T2.SCORE FROM TEST1 T1, TEST2 T2 WHERE T1.STU_ID = T2.STU_ID;

          也和第一个内连接的一样。自然连接还有好几种写法,这里就不一一介绍了,因为我平时工作也用不到,基本上不会,也就不抄书了。

         

  • 相关阅读:
    leetcode——832. 翻转图像
    leetcode——830. 较大分组的位置
    leetcode——1089.复写零
    leetcode——86. 分隔链表
    leetcode——387. 字符串中的第一个唯一字符
    leetcode——389. 找不同
    leetcode——61. 旋转链表
    leetcode——24. 两两交换链表中的节点
    leetcode——817. 链表组件
    leetcode——234. 回文链表
  • 原文地址:https://www.cnblogs.com/wingsless/p/2368081.html
Copyright © 2011-2022 走看看