假设我们有两张表。

  • Table A 是左边的表。
  • Table B 是右边的表。

其各有四条记录,其中有两条记录是相同的,如下所示:

id name       id  name

1  Pirate        1   Rutabaga

2  Monkey     2   Pirate

3  Ninja         3   Darth Vader

4  Spaghetti   4   Ninja

下面让我们来看看不同的Join会产生什么样的结果。

1、Inner join

SELECT * FROM TableA  INNER JOIN TableB   ON TableA.name = TableB.name

结果集

(TableA.)       (TableB.)

id  name       id   name

1   Pirate     2    Pirate

3   Ninja      4    Ninja

Inner join 产生的结果集中,是A和B的交集

2.FULL [OUTER] JOIN

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name

结果集
(TableA.)           (TableB.)

id    name         id       name

1     Pirate        2     Pirate

2     Monkey     null   null

3     Ninja         4      Ninja

4     Spaghetti  null   null

null  null           1     Rutabaga

null  null           3     Darth Vader

Full outer join 产生A和B的并集。但是需要注意的是,对于没有匹配的记录,则会以null做为值。可以使用IFNULL判断。
注意:产生A表和B表都没有出现的数据集
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
WHERE TableA.id IS null OR TableB.id IS null
 
3、LEFT [OUTER] JOIN
SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
结果集
(TableA.)           (TableB.)

id  name         id    name

1   Pirate        2     Pirate

2   Monkey     null  null

3   Ninja         4     Ninja

4   Spaghetti  null  null

注意:产生在A表中有而在B表中没有的集合

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name

WHERE TableB.id IS null

(TableA.)           (TableB.)

id  name       id     name

2   Monkey     null   null

4   Spaghetti  null   null

4、UNION 与 UNION ALL

UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型

UNION 只选取记录,会选取不同的值;而UNION ALL会列出所有记录,包括重复的

图解 交集(join)和 合并(union)的更多相关文章

  1. 数据库基础(子查询练习、链接查询(join on 、union)及其练习)

    子查询练习一:查询销售部里的年龄大于35岁的人的所有信息 练习二:将haha表中部门的所有数字代码转换为bumen表中的字符串显示 练习三:将haha表中部门的所有数字代码转换为bumen表中的字符串 ...

  2. 题解 合并 union

    合并 union Description 给出一个 1 ∼ N 的序列 A ( A 1 , A 2 , ..., A N ) .你每次可以将两个相邻的元素合并,合并后的元素权值即为 这两个元素的权值之 ...

  3. Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别

    转载来源 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚. ...

  4. linq 多个left join 和 sql union all -> linq union 方法

     (   from s in Base_SysMenus   join r in Base_RoleRights on s.Menu_Id equals r.Menu_Id into temp   f ...

  5. MySQL全连接(Full Join)实现,union和union all用法

    MySQL本身不支持你所说的full join(全连接),但可以通过union来实现 ,下面是一个简单测试,可以看看: mysql> CREATE TABLE a(id int,name cha ...

  6. 图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句

    对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...

  7. R语言常用函数:交集intersect、并集union、找不同setdiff、判断相同setequal

    在R语言进行数据分析时,经常需要找不同组间的相同和不同,那你应该掌握如下几个函数,让你事半功倍. 交集intersect两个向量的交集,集合可以是数字.字符串等 # 两个数值向量取交集intersec ...

  8. sql语句查询结果合并union all用法

    整理别人的sql 大概的思想是用union 和union all --合并重复行select * from Aunion select * from B --不合并重复行select * from A ...

  9. sql语句查询结果合并union all用法_数据库技巧

    --合并重复行 select * from A union select * from B --不合并重复行 select * from A union all select * from B 按某个 ...

随机推荐

  1. 添加gogs服务后 web丢失样式问题

    暂时的解决办法

  2. Android Studio IDE 主题设置

    1.界面主题设置,如下图: 2.代码字体设置,如下图:

  3. Login failed知多少

    说起Login failed我们首先会想起密码错误,但密码错误只是众多login failed中的一个,本篇将罗列各类login failed在ERRORLOG中的表现,以及如何提取这类错误信息.通过 ...

  4. vs2015 使用 visual studio on line 在线版本控制

    将visual studio on line 作为一个免费在线版本控制器还是不错的,可以支持5个免费用户共同开发, 以下作为记录,贴在此. 一  申请visual studio on line 账户. ...

  5. 又来了,SDE非直连

    现在sde都推荐直连了,没想到还是遇到了非直连. 用10.1默认是直连,但还支持非直连. 安装半天始终无法启动.系统差点崩了. 原来是sde用户密码过期锁定了,好烦. C:\Program Files ...

  6. mysql 启动服务

    http://blog.chinaunix.net/uid-13642598-id-3153537.html mysql的四种启动方式: 1.mysqld 启动mysql服务器:./mysqld -- ...

  7. App上架出现问题-ERROR ITMS-90034

    1.打开钥匙串,显示->显示已过期的证书,因为有些过期的证书会被钥匙串隐藏起来,让过期的证书都显示出来,删掉过期的证书. 2.经检查,我发现我的AppleWWDRCA.cer证书过期了,所以我就 ...

  8. python加密模块学习

    1. md5模块 md5.new([arg])     返回一个md5对象,如果给出参数,则相当于调用了update(arg) md5.update(arg)   用string参数arg更新md5对 ...

  9. 学习jsp(1)

    我的开发环境是:jdk1.7;netbean ;tomcat7. 尝试着写了第一个程序: ublic class myServlet extends HttpServlet{    @Override ...

  10. Effective C++ 5.实现

    //条款26:尽量延后变量的定义式出现的时间 // 1.不仅应该延后变量的定义,更应该直到使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初始值为止.如果这样,不仅能够避免构造和析构的非必 ...