SQL中JOIN和UNION区别及用法
转载: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区别及用法相关推荐
- PL/SQL中存储过程int和out的用法
PL/SQL中存储过程int和out的用法 一 介绍 过程和函数中的in和out (1)一般来讲,过程和函数的区别在于函数可以有一个返回值:而过程没有返回值. (2)但过程和函数都可以通过out指定一 ...
- oracle中having的用法,深入浅析SQL中的group by 和 having 用法
一.sql中的group by 用法解析: Group By语句从英文的字面意义上理解就是"根据(by)一定的规则进行分组(Group)". 作用:通过一定的规则将一个数据集划分成 ...
- sql中join类型_SQL Join类型概述和教程
sql中join类型 This article will provide an overview of the SQL Join and cover all of the SQL join types ...
- 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 的子查询 ...
- c语言equals用法,C# 中 equals( ) 和 == 的区别和用法
Equals: 下面的语句中,x.y 和 z 表示不为 null 的对象引用. * 除涉及浮点型的情况外,x.Equals(x) 都返回 true. * x.Equals(y) 返回与 y.Equal ...
- Oralce 使用SQL中的exists 和not exists 用法详解
exists表示() 内子查询返回结果不为空,说明where条件成立就会执行sql语句:如果为空,表示where条件不成立,sql语句就不会执行. not exists和 exists相反,子查询语 ...
- Sql中的数据类型及区别
1,char,nchar,nvarchar,varchar有什么区别? 2,text和ntext有什么区别以及和上面各种字符类有什么区别? 3,关于带big和带small的类型,比如:small ...
- sql中join的各种用法
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) ...
- SQL中JOIN 的用法
关于sql语句中的连接(join)关键字,是较为常用而又不太容易理解的关键字,下面这个例子给出了一个简单的解释 --建表table1,table2: create table table1(id in ...
最新文章
- C# 整数与字符串拼接之间的装箱操作
- 【Deep Learning笔记】语义分割网络-Segnet的探索
- android 点击图片事件,android图文混排点击事件
- Android SDK Manager无法下载包的问题
- idea 中 git 修改了文件却无法提交(No Changes detected)
- windows下写代码在linux下编译,如何在Windows中编译Linux Unix的代码(采用cygwin)?...
- 配置管理小报100329:脚本中ftp命令无法自动输入密码怎么办?
- div内容用html语言写,html – 使用DIV作为另一个元素的背景
- k8s mysql 查询_MySql | 为什么大家都在说 Select * 效率低
- FineReport帆软学习笔记汇总
- 7z源码的编译与使用
- python贝叶斯网络预测天气_基于pym的贝叶斯网络条件概率表的生成
- Apache虚拟主机的三种方式
- 计算机网线怎么连接另一台电脑,教你如何用一根网线将两台电脑直连
- 算法设计与分析第一次作业 1301. Bubbling Bubbles
- element-ui版本更新兼容问题
- 灭了珊瑚虫,OOXX了SOFF,下一个是谁?
- u3d美术制作规范总结
- 怎么查计算机上c盘的历史记录,如何查看电脑历史操作记录
- TCP RTT 采集方法
热门文章
- spinbox的valuechanged 不响应键盘_程序员和游戏爱好者必备,双十一热身:2019年最好的机械键盘...
- laravel database.php,php Laravel框架学习(一) 之 建立数据库并填充测试数据
- C语言随机生成26个字母,菜鸟求助,写一个随机输出26个英文字母的程序
- uniapp 分享缩略图过大怎么办_经验分享| 反击破转子断裂的应急处理方法
- 2021 考研线代知识点整理
- 记安卓屏固件升级步骤
- kafka 查看消费者组
- 11月20日站立会议
- 将url参数转为json对象
- 数据库报错“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”