zoukankan      html  css  js  c++  java
  • Oracle左连接,右连接

    参考文献:http://space.itpub.net/11134237/viewspace-617951

    数据表的连接有: 
    1、内连接(自然连接): 只有两个表都相匹配的行才能在结果集中出现 
    2、外连接: 包括 
         (1)左外连接(左边的表不加限制),右表补null 
         (2)右外连接(右边的表不加限制) ,左表补null
         (3)全外连接(左右两表都不加限制) ,左右两表空缺行补null
    3、自连接(连接发生在一张基表内) 

    select a.studentno, a.studentname, b.classname from students a, classes b where a.classid(+) = b.classid;

     查询结果如下:

    STUDENTNO        STUDENTNAM           CLASSNAME
    ----------            ----------                 --------------------
                1                aa                         一年级一班
                2                bb                         一年级二班
               null              null                        一年级三班
    以上语句是右连接:
    即"(+)"所在位置的另一侧为连接的方向,右连接说明等号右侧的所有记录均会被显示,无论其在左侧是否得到匹配。也就是说上例中,无论会不会出现某个班级没有一个学生的情况,这个班级的名字都会在查询结构中出现。即"(+)"表示所在的列的值,如果没有匹配的值,则加入null值,并显示出来。

    //通常将全量集合与部分集合连接时,在部分集合的列后面带上(+),以达到没有匹配时,也要显示出一个null的效果。

    反之: 

    select a.studentno, a.studentname, b.classname from students a, classes b where a.classid = b.classid(+);

    查询结果:

    STUDENTNO                 STUDENTNAME              CLASSNAME
    ----------                     ----------                   ------------------------------
                1                             aa                        一年级一班
                2                             bb                       一年级二班
                3                             aa                         null

    则是左连接,无论这个学生有没有一个能在一个班级中得到匹配的班级号,这个学生的记录都会被显示。

    select a.studentno, a.studentname, b.classname from students a, classes b where a.classid = b.classid;

    这个则是通常用到的内连接,显示两表都符合条件的记录 
    总之, 
    左连接显示左边全部的和右边与左边相同的 
    右连接显示右边全部的和左边与右边相同的 
    内连接是只显示满足条件的!

    例子:

    左连接

    select p.*,g.state  from process_card_procedure p,group_task g where p.process_card_procedure_id=g.process_card_procedure_id(+) and  p.process_card_id=431 and p.procedure_no not like '%C%' order by cast(p.procedure_no as int)

    表示process_card_procedure表和group_task表的左连接。查询结果部分如下:


    上表中的state字段是在group_task表中,连接过程中后面三条记录没有state字段,显示为null,如果不左连接,

    内连接

    select p.*,g.state  from process_card_procedure p,group_task g where p.process_card_procedure_id=g.process_card_procedure_id and  p.process_card_id=431 and p.procedure_no not like '%C%' order by cast(p.procedure_no as int)

    查询结果如下:



    作者:xwdreamer
    欢迎任何形式的转载,但请务必注明出处。
    分享到:
  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/xwdreamer/p/2296960.html
Copyright © 2011-2022 走看看