(left 、right、inner ) join 一次搞懂
最近刷了一些sql题,发现连接查询用的很多,记录一下。
首先附上一张很清晰的图,通过这张图你就能很形象的理解出各种连接查询的区别。
接下来我们分别来看看各种查询的特点。
left join
左连接,返回的数据行数与左表数据一致。以左表为主。查出来的结果显示左边的所有数据,然后右边显示的是和左边有交集部分的数据。看图理解。
举个牛客网上的例子:
题目描述
有一个员工表,employees简况如下:
有一个部门表,dept_emp简况如下
问题:
请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工,以上例子如下:
sql语句:
select employees.last_name, employees.first_name, dept_emp.dept_no
from employees
left join dept_emp
on dept_emp.emp_no = employees.emp_no
right join
“右连接”,表1右连接表2,以右表为主,关联查询表1的数据,查出表2所有数据以及表1和表2有交集的数据。跟左连接相反,所以把表的位置改下,就可以改成右连接得到相同的结果
inner join (join)
join,其实就是“inner join”,为了简写才写成join,两个是表示一个的,内连接,表示以两个表的交集为主,查出来是两个表有交集的部分,其余没有关联就不额外显示出来
举例:
两张表:
使用inner join查询:
SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
结果就是A表和B表的交集。
full outer join
只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.它结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
SELECT
*
FROM
TableA
FULL OUTER JOIN
TableB
ON
TableA.name = TableB.name
结果: