你们好,最近小活发现有诸多的小伙伴们对于join的用法及短语,join的用法这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、首先join基本是满足类似于以下需求的:
2、1.所有的员工都有员工信息表,但是只有部分员工有标识,比如高级开发工程师之类的,这个标识存在另外一个表中,且表中是没有任何关于无标识员工的信息的,我现在需要连表查询,需求是显示所有员工信息,并且有标识的员工会多一条标识属性,无标识的员工这一条就是空,那么我们应该如何查询?很显然直接使用下图的数据库语句是无法查询出结果的:
3、很显然会出现的一个问题就是,只能查找出在EMPLOYEE_INFO以及EMPLOYEE_FLAG中同时存在数据的员工,根本没有办法达到我们之前所说的要求。也就是说能查找出来的都是在EMPLOYEE_FLAG中存在数据的员工,就是有标识的,但是我们的需求则是首先,无论这个员工id在或者不在EMPLOYEE_FLAG中出现,这位员工的基本数据都应当给我正确的显示出来。也就是如下图逻辑关系所示:
4、而不是我们通过where 和 = 的方案,获取到的部分,也就是两个圆的相交部分,如下图所示:
5、1.第二个情况就是等于我们要查询的范围为多个表的全部的部分,还是举个例子吧,高中文理分科以后,文科班学语文、数学、外语、历史、政治,所有文科班的学生成绩表按照学号为主码放在这个表中。但是理科班学的是语文、数学、外语、物理、化学,也同样按照学号主码制表。然后现在我们有了一个需求,要求将所有学生的成绩显示在一起,只是文科生的物理化学显示为空,理科生也同理,这么显示出来,那么和上面的例子一样,很多初学者都会一下子想到下图的这个语句:
6、这个方法说真的,结果会令你大失所望,它不仅无法区分两个表中数据的联系,而且会胡乱的显示这两张表的笛卡儿积,也就是如果Liberal_Arts表中有10条数据,science表中也有10条数据,那么这个查询显示的结果就是10*10=100条数据,全部都是杂乱无章的排列组合。每一行,前半部分是Liberal_Arts,后半部分是science,根本不是我们想要的,而我们想要的,其实是类似于下图的结果:
7、也就是“我全都要”的效果,而且是能保证两个的相同属性列是可以重叠的。两个表相同的列是可以被识别为同一种类型的数据,而不是分开。
以上就是join的用法这篇文章的一些介绍,希望对大家有所帮助。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!