1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > left join right join用法

left join right join用法

时间:2018-11-15 15:33:59

相关推荐

left join right join用法

一个sql自学网站的整理笔记

LEFT JOIN保留A的所有行,不管有没有能匹配上B(元组记录不匹配连接条件上在输出时表现为null)

反过来 RIGHT JOIN则保留所有B里的行。

最后FULL JOIN 不管有没有匹配上,同时保留A和B里的所有行

运用题目理解一下:

用两个新的表雇员表 Employees 和 办公室表 Buildings.

注意:有一些办公室是新的,还没有雇员.

题目:找到所有办公室里的所有角色(包含没有雇员的),并做唯一输出(DISTINCT)

分析:题目中,主表是办公室,要求输出符合条件的角色

主表是哪个很关键,因为这对应left join,right join用法

SELECT distinct role ,Building_name FROM //要求包含没有雇员,employees中的building都是有雇员的不能用,因此这里用Building_nameBuildings left join employees//这里employees 中的元组若符合连接条件则输出记录,同时要保留主表Buildings的所有行ON building_name =building//连接条件

总结:从题目中,辨别出查询要求后,要明确查询的字段,不同字段对应不同查询要求。

例如:此题包含没有雇员的,那么employees中的building都是有雇员的,不能用来当作查询字段,所以用SELECT distinct role ,Building_name FROM Buildings

查询结果:

题目2:找到还没有雇员的办公室

分析:确定主表办公室,可以先连接起来,再从输出要求出发一步步修改

思考过程:

1、先连接两个表

SELECT *FROM Buildings left join employeeson Building_name = Building

输出结果

2、先连接两个表后,从上图分析,根据连接条件Building_name = Building,Buildings 表中有些办公室的Building_name 连接不到employees表的Building(即有些办公室没雇员),存在两种办公室无雇员的记录。

由于主表是办公室Buildings,要保留办公室的所有行,所以employees表仍然与这两种办公室记录相连,但这两条数据的building 就会显示为null了

SELECT *FROM Buildings left join employeeson Building_name = Buildingwhere building is null

输出结果

3、再使用distinct 去重,按题目要求输出Building_name字段

SELECT distinct Building_nameFROM Buildings left join employeeson Building_name = Buildingwhere building is null

结果:

最后:

欢迎大家阅读,本人萌新还在学数据库,写的博客难免有错误或者疏忽的地方,还望各位同志在评论区多多指点,欢迎各位在评论区的留言或指导,在此表示感激不尽。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。