基本信息

创建两个表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. 51nod 1416:两点 深搜

    1416 两点 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 福克斯在玩一款手机解迷游戏,这个游戏叫做" ...

  2. 冰蝎动态二进制加密WebShell基于流量侧检测方案

    概述 冰蝎是一款新型动态二进制加密网站工具.目前已经有6个版本.对于webshell的网络流量侧检测,主要有三个思路.一:webshell上传过程中文件还原进行样本分析,检测静态文件是否报毒.二:we ...

  3. 解题报告:luogu P2678 跳石头

    题目链接:P2678 跳石头 很简单的二分查找,可悲的是我并不会. 不过题解贴心的写得很清楚(学会了套路) 二分一次判断一次,复杂度是\(O(nlogl)\),可以通过此题. \(Code:\) #i ...

  4. tools.windows.bat#批处理

    关于%~ %~I - 删除任何引号("),扩展 %I %~fI - 将 %I 扩展到一个完全合格的路径名 %~dI - 仅将 %I 扩展到一个驱动器号 %~pI - 仅将 %I 扩展到一个路 ...

  5. lsof(查看端口)

    简介 简介 lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如 ...

  6. kali下的截图工具scrot、flameshot和deepin-scrot

    对于这几个截图工具,精简好用的应该是deepin-scrot了,这是个和QQ截图有类似功能的Linux截图工具.flameshot的功能是最多的,也很好用,虽然有的功能用不上. 1.scrot安装和使 ...

  7. 关于安装openfiler

    简介 Openfiler 由rPath Linux驱动,它是一个基于浏览器的免费网络存储管理实用程序,可以在单一框架中提供基于文件的网络连接存储 (NAS) 和基于块的存储区域网 (SAN).Open ...

  8. eclipse中svn重新设置账户

    查看svn版本:windows > preference > Team > SVN 1.如果svn插件是svnkit版 只需找到.keyring文件,一般目录是:eclipse安装目 ...

  9. 通过request获得全路径

     <% String test = request.getScheme()+"://"+request.getServerName()+":"+reque ...

  10. Day 17:缓冲输出字符流和用缓冲输入输出实现登录、装饰者设计模式

    输出字符流 Writer  所有输出字符流的基类,  抽象类. FileWriter 向文件输出字符数据的输出字符流. BufferedWriter 缓冲输出字符流        缓冲输出字符流作用: ...