前言
本篇针对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
|