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;

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

         

  • 相关阅读:
    fragment、ListFragment使用ListView及自定义Listview等初始化操作
    【LeetCode】 sort list 单清单归并
    HDU 1251 统计拼图 Trie解决问题的方法
    Oracle推断领域包括中国
    hust1384---The value of F[n]
    ffmpeg参数具体解释
    什么是大数据的核心价值?
    还是畅通project(杭州电1233)
    Redis源代码分析(二十七)--- rio制I/O包裹
    回想一下著名的BigTable论题
  • 原文地址:https://www.cnblogs.com/wingsless/p/2368081.html
Copyright © 2011-2022 走看看