zoukankan      html  css  js  c++  java
  • SQL inner join, join, left join, right join, full outer join

    基本信息

    创建两个表a1, a2

    两个表的重要差别是:a1 中有5,'wu'a2中没有。 a2中有 4,'li',而a1中没有。

    创建表和插入数据的代码如下:

    -- 创建a1表
    create table a1(
    	userid integer PRIMARY KEY,
    	username varchar(20)
    );
    -- 创建a2表
    create table a2(
    	userid integer primary key,
    	username varchar(20)
    );
    insert into a1 values(1,'he');
    insert into a1 values(2,'xiao');
    insert into a1 values(3,'zhang');
    insert into a1 values(5,'wu');
    insert into a2 values(3,'zhang');
    insert into a2 values(2,'xiao');
    insert into a2 values(1,'he');
    insert into a2 values(4,'li');
    

    left join, right join

    left join 是左外联,完整的写法是left outer join。 这种连接,会把左表的一切保留,用右侧去匹配,匹配不了的为null。如:

    select a1.userid, a2.userid from a1 left join a2 on a1.userid=a2.userid;
    

    得到的结果是:

    注意到最后一行,左表a15被保留,而右表a2没有与之对应的,因此为空。

    右连接也一样,只不过把右表中的保留,左表去匹配,对不上的为null。

    select a1.userid, a2.userid from a1 right join a2 on a1.userid=a2.userid;
    

    full outer join

    全外连接是把左右两边匹配,并且两边都保留,匹配不上就是null。

    select a1.userid, a2.userid from a1 full outer join a2 on a1.userid=a2.userid;
    

    得到的结果是:

    注意后两行,都被保留了。这是与接下来inner join 最大的不同,inner join 会把这些匹配不上的都去掉。

    inner join

    注意如果不写任何left, rigth, full, inner, 只写一个join, 那么等同于Inner join. 即: join 全等于 inner join。 另外得到笛卡尔集再用where筛选,也可以获取到和inner join 一样的效果。详看最后一节。

    inner join 会把左右匹配不上的都去掉,只保留那些匹配得上的。

    select a1.userid, a2.userid from a1 inner join a2 on a1.userid=a2.userid;
    

    笛卡尔集

    以下代码,由于没有匹配和相等的列,因此会把所有可能的序列都列出来。

    select a1.userid, a2.userid from a1,a2;
    

    如果添加上where的条件筛选,就跟 inner join等同。

    select a1.userid, a2.userid from a1,a2 where a1.userid=a2.userid;
    

  • 相关阅读:
    QQ空间爬虫--获取好友信息
    分层最短路-2018南京网赛L
    安装SSH,配置SSH无密码登陆
    树形DP--求树上任意两点间距离和
    JTS基本概念和使用
    odps编写UDF的实现
    oozie安装总结
    同步工具的选择
    转:hive面试题
    转:hive-列转行和行转列
  • 原文地址:https://www.cnblogs.com/heenhui2016/p/11625188.html
Copyright © 2011-2022 走看看