今天听到有位童鞋说cvte面试问到数据库左联接、右联接的问题了,才发现自己不知道,所以总结了下。
如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的数据,这时我们应该考虑使用Join,因为Join具备联接表或函数进行查询的特性。
举个例子,有两个表学校表(school)和教师表(teacher)
school(num,name,leader)num:学校编号;name:学校名;leader:学校领导
teacher(name,school)name:教师名;school:教师所属学校
1、左联接(Left join)
即包含所有join左边表中的记录甚至是右边表中没有与之匹配的记录,没有与之匹配的记录用null表示。
sql语句:SELECT school.name,teacher.name
FROM school LEFT JOIN teacher ON school = num
这句话就是说查询所有学校以及其中的老师,如果一个学校中没有老师,那么就是null。
它以左表为主。
2、右联表(Right join)
即包含所有join右边表中的记录甚至是左边表中没有与之匹配的记录,没有与之匹配的记录用null表示。
sql语句:SELECT school.name,teacher.name
FROM school RIGHT JOIN teacher ON school = num
这句话就是说查询所有老师以及其所在的学校,如果老师没有学校,那么就是null。
它以右表为主。
3、内联接(Inner join)
sql语句:SELECT school.name,teacher.name
FROM teacher INNER JOIN school ON school=num
这句话就是说要列出同时存在的老师的名字和他所属的学校,内联接满足交换律:“A inner join B”和“B inner join A”是相等的。
4、全联接(full join 或者 full outer join)
是要将两个表中所有数据都列出来,有空为null
等等还有一些交叉联接等联接