zoukankan      html  css  js  c++  java
  • 最常用SQL joins:内连接(交集)、左外连接、右外连接、左连接、右连接、全连接(并集),全外连接

    1、内连接。两个表的公共部分用Inner join,Inner join是交集的部分。

    Select * from TableA A inner join TableB B on A.key=B.key

     

    2、左外连接A表和B表的共有,加上A的独有,简称全A。

    Select * from TableA A left join TableB B on A.key=B.key

    红色部分是两表的公有部分,此时8号记录是A表的独有,右边的部门表并没有满足的就用null补齐

    3、右外连接A表和B表的共有,加上B的独有,简称全B。

    Select * from TableA A right join TableB B on A.key=B.key

    红色部分是两表的公有部分,右表全部查出来,左表没有满足的就用null补齐。

    不管是左连接还是右连接,连接之后表格的高度要一样,不匹配的表全部用null对齐。

    4、左连接A的独有,把公有的去掉,A独占就没B什么事了。

    On是join条件。

    Select * from TabelA A left join TableB B on A.key=B.key where B.key is null

    A表的独占,即B表的Id必定等于null

    5、右连接B的独有,把公有的去掉,B独占就没A什么事了。

    Select * from TableA A right join TableB B on A.key=B.key where A.key is null

    B表的独占,即A表的id肯定为null、

    6、全连接。Full outer join是全连接。

     

    Mysql不支持这种语法,但是oracle支持。

    但是!MySQL中并不支持这种写法,所以只能通过别的方法。A、B的所有也就是A的独有、B的独有 和A、B的共同拥有的数据,Mysql中可以使用:

    select * from Table A left join Table B on A.Key = B.Key  (找出A的所有)

     union  (去重)

     select * from Table A right join Table B on A.Key = B.Key(找出B的所有)

    7、全外连接(Mysql中不支持下图写法)左右表的共有数据之外的数据查询 。各自独有之和,偏偏没有中间部分。

    筛选出对于A表而言B为空,对于B表而言A为空的。MySQL中也不支持这种写法,所以只能通过别的方法。其实全外连接也就是A的独有+B的独有。

    Mysql语法:

    select * from Table A left join Table B on A.Key = B.Key  where B.Key is null  (找出A的独有)

     union (去重)

    select * from Table A right join Table B on A.Key = B.Key where A.Key is null (找出B的独有)

  • 相关阅读:
    C#中对DatagridView部分常用操作
    IIS6架设网站常见问题及症状答疑[转]
    最小化到托盘
    IIS常见问题和错误及其解决方案[转]
    .Net 2.0框架安装失败的解决方案
    Runtime类中Memory
    JVM垃圾回收2
    JVM垃圾回收3——参数详解(转载)
    JVM参数选项(转载)
    MapInfo之格式说明(转载)
  • 原文地址:https://www.cnblogs.com/zwh0910/p/14393683.html
Copyright © 2011-2022 走看看