基本信息

创建两个表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;

SQL inner join, join, left join, right join, full outer join的更多相关文章

  1. SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)

    原文链接:http://www.powerxing.com/sql-join/ 总的来说,四种JOIN的使用/区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表( ...

  2. SQL中的left outer join,inner join,right outer join用法详解

    这两天,在研究SQL语法中的inner join多表查询语法的用法,通过学习,发现一个SQL命令,竟然涉及到很多线性代数方面的知识,现将这些知识系统地记录如下: 使用关系代数合并数据1 关系代数合并数 ...

  3. SQL OUTER JOIN

    When we want to select out all the record from two table, no matter it's present at second table or ...

  4. 009-Hadoop Hive sql语法详解4-DQL 操作:数据查询SQL-select、join、union、udtf

    一.基本的Select 操作 语法SELECT [ALL | DISTINCT] select_expr, select_expr, ...FROM table_reference[WHERE whe ...

  5. SQL:OUTER JOIN使用方法具体解释

    SQL--JOIN使用方法 外联接. 外联接能够是左向外联接.右向外联接或完整外部联接.  在 FROM 子句中指定外联接时,能够由下列几组keyword中的一组指定: LEFT JOIN 或 LEF ...

  6. left join 和 left outer join 的区别

    left join 和 left outer join 的区别 通俗的讲:    A   left   join   B   的连接的记录数与A表的记录数同    A   right   join   ...

  7. HIVE中join、semi join、outer join

    补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...

  8. hive 包含操作(left semi join)(left outer join = in)迪卡尔积

    目前hive不支持 in或not in 中包含查询子句的语法,所以只能通过left join实现. 假设有一个登陆表login(当天登陆记录,只有一个uid),和一个用户注册表regusers(当天注 ...

  9. inner join, left join, right join, full outer join的区别

    总的来说,四种join的区别可以描述为: left join 会从左表(shop)那里返回所有的记录,即使在右表(sale_detail)中没有匹配的行. right outer join 右连接,返 ...

  10. sqlite数据库执行full outer join

    sqlite数据库执行full outer join时提示:RIGHT and FULL OUTER JOINs are not currently supported. sqlite数据库不支持(+ ...

随机推荐

  1. tomcat报错catalina.sh: line 401: /usr/java/jdk1.7.52/bin/java: No such file or directory(转)

    原文:https://blog.csdn.net/reblue520/article/details/52588825 将生产服务器的Tomcat目录打包过来后解压后,启动Tomcat后,发现如下问题 ...

  2. Codeforces 1294D - MEX maximizing

    思维,真的很巧妙啊,看了以下博客 https://www.cnblogs.com/stelayuri/p/12230033.html

  3. 如何修改 app.config 的配置信息

    如何修改 app.config 的配置信息 收藏 最问这个问题的人有点多,其实 .Net 提供了这样的功能我们可以在 app.config 中 userSettings 节点中保存我们的应用程序设置信 ...

  4. stl_map复习

    set和map的底层模板是红黑树,可以有不同的键值和实值,关于增删改查,迭代器的使用都在代码里面,亲手尝试更方便记忆 #include <iostream>#include <map ...

  5. etcd入门

    简介 etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库. etcd内部采用raft协议作为一致性算法,基于Go语言实现. et ...

  6. 数据结构第二版之(课后题)BF算法病毒感染检测

    //vs2013下编译通过.换别的编译器自行补充头文件和修改源代码#include<iostream> #include<fstream> #include <strin ...

  7. MQTT 协议学习:004-MQTT建立通信与 CONNECT 、CONNACK 报文

    背景 上一讲 MQTT 协议学习:通信报文的构成介绍了在MQTT通信中,各报文的通信流程:从本讲开始,我们开始介绍实际中使用的报文,以及它们的组成. CONNECT - 连接请求 报文 客户端到服务端 ...

  8. 基于springboot实现Java阿里短信发送

    1.接口TestController import java.util.Random; import com.aliyuncs.DefaultAcsClient; import com.aliyunc ...

  9. 抓取屏幕并压缩生成HBITMAP

    HBITMAP GetScreenBmp() { HWND hwnd = ::GetDesktopWindow(); HDC hsrc = ::GetDC(hwnd); HDC hmemdc = :: ...

  10. java枚举类(转)

    转自: http://blog.sina.com.cn/s/blog_697b968901013ih1.html 这里主要讲解的是Java的枚举类型 什么是枚举? 以我的理解答:枚举是我们自己定义的一 ...