转载:http://chengheng1984.blog.163.com/blog/static/17947412201012215738844/

JOIN用于按照ON条件联接两个表,主要有四种:

INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。我理解的是只要记录不符合ON条件,就不会显示在结果集内。

LEFT JOIN / LEFT OUTER JOIN:外部联接两个表中的记录,并包含左表中的全部记录。如果左表的某记录在右表中没有匹配记录,则在相关联的结果集中右表的所有选择列表列均为空值。理解为即使不符合ON条件,左表中的记录也全部显示出来,且结果集中该类记录的右表字段为空值。

RIGHT JOIN / RIGHT OUTER JOIN:外部联接两个表中的记录,并包含右表中的全部记录。简单说就是和LEFT JOIN反过来。

FULL JOIN / FULL OUTER JOIN: 完整外部联接返回左表和右表中的所有行。就是LEFT JOIN和RIGHT JOIN和合并,左右两表的数据都全部显示。

JOIN的基本语法:

Select table1.* FROM table1 JOIN table2 ON table1.id=table2.id

UNION运算符

将两个或更多查询的结果集组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同。另一个Select语句的结果集列名将被忽略。

其中两种不同的用法是UNION和UNION ALL,区别在于UNION从结果集中删除重复的行。如果使用UNION ALL 将包含所有行并且将不删除重复的行。

(ZZ)

1.交集

Inner Join, 等价于select * from a b where a.id=b.id ,*表示a.*,b.*,一笔纪录你可以取出a,b的栏位

left join 或right join 可以表示差集 ,一笔纪录你可以取出a,b的栏位

full join才是表示并集,select * from a full join b on a.id=b.id

,a.id=b.id 为一笔纪录,其他不等的纪录都可以显示,例如a的栏位和null栏位组合,或者null栏位和a组合~

另外一个cross join,如果不加上where条件,就是a的纪录和b的纪录任一组合,加入a有15笔,b有15笔,那么 a cross join b就有225笔,不会有null栏位(当然原来表有另当别论)

cross join加上where 就是inner join

select * from a crossjoin b where a.id = b.id等价于select * from a full join b on a.id=b.id

P.S. not in-->select * from a where a.id in (select b.id from b),*表示a你只可以取出a,b的栏位,not exists,也是如此,这些其实不算是交集或者差集的讨论的范围,每次只是对一个表的纪录进行选取而已,看这句select * from a where a.id not in ('1','2')这个算就不能算是差集

2.UNION表示并集,我觉得不可以完全这样讲

union 和join不一样,union这个运算子是将资料列合并,而join是将栏位合并(我前面所讲)!

如果从栏位合并来讲,full join 算是并集,inner join 算是交集!left join 或right join 不完全是差集,也包括交集的结果,具体你的语句的查询结果如何还是要看实际的语句,就如cross join,加上where就变成inner join,前后的结果相差甚远

网上找了一遍,发现一些新东西:

并集 :union: select × from a union (all) select × from b aUb

交集: intersect: select × from a intersect select × from b anb

差集: minus: select × from a minus select × from b a-b

转载于:https://www.cnblogs.com/bian1314yuan/p/4397573.html

SQL中JOIN和UNION区别及用法相关推荐

  1. PL/SQL中存储过程int和out的用法

    PL/SQL中存储过程int和out的用法 一 介绍 过程和函数中的in和out (1)一般来讲,过程和函数的区别在于函数可以有一个返回值:而过程没有返回值. (2)但过程和函数都可以通过out指定一 ...

  2. oracle中having的用法,深入浅析SQL中的group by 和 having 用法

    一.sql中的group by 用法解析: Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)". 作用:通过一定的规则将一个数据集划分成 ...

  3. sql中join类型_SQL Join类型概述和教程

    sql中join类型 This article will provide an overview of the SQL Join and cover all of the SQL join types ...

  4. PostgreSQL SQL中的ALL,ANY,SOME的用法,sql查询速度优化,sql运行优化

    PostgreSQL SQL中的ALL,ANY,SOME的用法,sql查询速度优化,sql运行优化 准备两个表: --T1(2,3) --T2(1,2,3,4)--ALL,ANY,SOME 的子查询 ...

  5. c语言equals用法,C# 中 equals( ) 和 == 的区别和用法

    Equals: 下面的语句中,x.y 和 z 表示不为 null 的对象引用. * 除涉及浮点型的情况外,x.Equals(x) 都返回 true. * x.Equals(y) 返回与 y.Equal ...

  6. Oralce 使用SQL中的exists 和not exists 用法详解

    exists表示() 内子查询返回结果不为空,说明where条件成立就会执行sql语句:如果为空,表示where条件不成立,sql语句就不会执行. not exists和  exists相反,子查询语 ...

  7. Sql中的数据类型及区别

    1,char,nchar,nvarchar,varchar有什么区别?   2,text和ntext有什么区别以及和上面各种字符类有什么区别?  3,关于带big和带small的类型,比如:small ...

  8. sql中join的各种用法

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) ...

  9. SQL中JOIN 的用法

    关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2: create table table1(id in ...

最新文章

  1. C# 整数与字符串拼接之间的装箱操作
  2. 【Deep Learning笔记】语义分割网络-Segnet的探索
  3. android 点击图片事件,android图文混排点击事件
  4. Android SDK Manager无法下载包的问题
  5. idea 中 git 修改了文件却无法提交(No Changes detected)
  6. windows下写代码在linux下编译,如何在Windows中编译Linux Unix的代码(采用cygwin)?...
  7. 配置管理小报100329:脚本中ftp命令无法自动输入密码怎么办?
  8. div内容用html语言写,html – 使用DIV作为另一个元素的背景
  9. k8s mysql 查询_MySql | 为什么大家都在说 Select * 效率低
  10. FineReport帆软学习笔记汇总
  11. 7z源码的编译与使用
  12. python贝叶斯网络预测天气_基于pym的贝叶斯网络条件概率表的生成
  13. Apache虚拟主机的三种方式
  14. 计算机网线怎么连接另一台电脑,教你如何用一根网线将两台电脑直连
  15. 算法设计与分析第一次作业 1301. Bubbling Bubbles
  16. element-ui版本更新兼容问题
  17. 灭了珊瑚虫,OOXX了SOFF,下一个是谁?
  18. u3d美术制作规范总结
  19. 怎么查计算机上c盘的历史记录,如何查看电脑历史操作记录
  20. TCP RTT 采集方法

热门文章

  1. spinbox的valuechanged 不响应键盘_程序员和游戏爱好者必备,双十一热身:2019年最好的机械键盘...
  2. laravel database.php,php Laravel框架学习(一) 之 建立数据库并填充测试数据
  3. C语言随机生成26个字母,菜鸟求助,写一个随机输出26个英文字母的程序
  4. uniapp 分享缩略图过大怎么办_经验分享| 反击破转子断裂的应急处理方法
  5. 2021 考研线代知识点整理
  6. 记安卓屏固件升级步骤
  7. kafka 查看消费者组
  8. 11月20日站立会议
  9. 将url参数转为json对象
  10. 数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”