本篇针对sql中的连接相关概念进行一番整理
在Sql中;join;连接;存在的意义;就是将来自两个或多个表的行结合起来;返回多个表的查询结果;下面先用一张图直观地说明连接对搜索返回结果的影响
内连接包括自然连接和相等连接
运算符;=、<> 之类的比较运算符
返回结果;使用比较运算符根据每个表共有的列的值匹配两个表中的行
为了方便查看;这里用table1和table2表示原始数据
table1
table2
自然连接是一种特殊的等值连接;他要求两个关系表中进行连接的必须是 相同的属性列;名字相同;;无须添加连接条件;并且在结果中消除重复的属性列。
Select * from table1 natural join table2
返回结果如下
相等连接;相比较自然连接的不同之处在于;不同之处在于自然连接的是同名属性列的连接;而内连接则不要求两属性列同名;可以用using或on来指定某两列字段相同的连接条件;且不会消除同名属性列。
代码如下;
Select * from table1 inner join table2 on table1.A=table2.E
最终返回结果如下
但是内连接时;某些属性值不同的元组会被抛弃;要解决这样的问题;则需要引入外连接
内连接是要显示两张表的内存;而外连接不要求如此;外连接可以依据连接表保留左表;右表或全部表的行为而分为左外连接右外连接和全连接。
左外连接是在两表进行自然连接;只把左表要舍弃的保留在结果集中;右表对应的列上填null。
右外连接是在两表进行自然连接;只把右表要舍弃的保留在结果集中;左表对应的列上填null。
Select * from table1 right outer join table2 on table1.C=table2.C
全连接在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
最终结果
简单来说就是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