SQL:sql连接那些事儿
作者:快盘下载 人气:文章目录
前言一、Join是什么二、Join用法1.内连接自然连接相等连接 2.外连接LEFT JOIN;LEFT OUTER JOIN;RIGHT JOIN ;RIGHT OUTER JOIN;FULL JOIN;FULL OUTER JOIN;关于Join和WHERE的区别 动手实践及参考博客前言
本篇针对sql中的连接相关概念进行一番整理
一、Join是什么
在Sql中;join;连接;存在的意义;就是将来自两个或多个表的行结合起来;返回多个表的查询结果;下面先用一张图直观地说明连接对搜索返回结果的影响
二、Join用法
1.内连接
内连接包括自然连接和相等连接
运算符;=、<> 之类的比较运算符
返回结果;使用比较运算符根据每个表共有的列的值匹配两个表中的行
为了方便查看;这里用table1和table2表示原始数据
table1
table2
自然连接
自然连接是一种特殊的等值连接;他要求两个关系表中进行连接的必须是 相同的属性列;名字相同;;无须添加连接条件;并且在结果中消除重复的属性列。
Select * from table1 natural join table2
返回结果如下
相等连接
相等连接;相比较自然连接的不同之处在于;不同之处在于自然连接的是同名属性列的连接;而内连接则不要求两属性列同名;可以用using或on来指定某两列字段相同的连接条件;且不会消除同名属性列。
代码如下;
Select * from table1 inner join table2 on table1.A=table2.E
最终返回结果如下
但是内连接时;某些属性值不同的元组会被抛弃;要解决这样的问题;则需要引入外连接
2.外连接
内连接是要显示两张表的内存;而外连接不要求如此;外连接可以依据连接表保留左表;右表或全部表的行为而分为左外连接右外连接和全连接。
LEFT JOIN;LEFT OUTER JOIN;
左外连接是在两表进行自然连接;只把左表要舍弃的保留在结果集中;右表对应的列上填null。
RIGHT JOIN ;RIGHT OUTER JOIN;
右外连接是在两表进行自然连接;只把右表要舍弃的保留在结果集中;左表对应的列上填null。
Select * from table1 right outer join table2 on table1.C=table2.C
FULL JOIN;FULL OUTER JOIN;
全连接在mysql中并不直接支持;可以通过union的方式让左连接和右连接合并起来最终得到全连接
Select * from table1 left outer join table2 on table1.C=table2.C
UNION
Select * from table1 right outer join table2 on table1.C=table2.C
最终结果
关于Join和WHERE的区别
on条件是在生成临时表时使用的条件;它不管on中的条件是否为真;都会返回左边表中的记录。where条件是在临时表生成好后;再对临时表进行过滤的条件。这时已经没有left join的含义;必须返回左边表的记录;了;条件不为真的就全部过滤掉。简单来说就是on不管条件是不是真的都会进行返回;但是where的话只会返回条件为真的结果
这里拿别人的相关例子简单进行举例记录
SELECT * FROM tbl_emp a INNER JOIN tbl_dept b ON a.deptId = b.id;
返回结果
SELECT * FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id WHERE b.id IS NULL;
动手实践及参考博客
一文让你彻底理解SQL中的join
加载全部内容