一,直连接(有两种的表达方式)
employee 员工表 dept 部门表
id name deptid id name
1 tom 1 1 研发部
2 jack 3 2 销售部
3 luck 3 财务部
直连接跟内连接是一样的,只是叫法不一样。直连接有两种表达的方式。只有满足了连接条件的数据才会显示出来.
select * from employee e ,dept d where e.deptid=d.id;
select * from employee e inner join dept d on e.deptid=d.id;
id name deptid name
1 tom 1 研发部
2 jack 3 财务部
二,左连接 left join on(左表数据全部显示,右表数据如果满足连接条件就显示,不满足就显示null)
select * from employee e left join dept d on e.deptid=d.id;
d name deptid name
1 tom 1 研发部
2 jack 3 财务部
3 luck null
左连接这里主要注意一点,left join on 后面的连接条件很重要。
select * from employee e left join dept d on e.deptid=d.id and e.id=1;
这里左表数据全部显示,右表的数据只有满足条件才显示,不然为null
d name deptid name
1 tom 1 研发部
2 jack 3 null
3 luck null
select * from employee e left join dept d on e.deptid=d.id wher e.id=1;
这里只显示满足条件的数据 ,相当于直连接了。
d name deptid name
1 tom 1 研发部
所以要认清 left join on 后面条件是直接on还是where
(3)执行的效率问题。
其实如果不添加其他的条件查询,直连接跟左连接的效率是一样的。如果是添加查询条件就不说了,因为直连接是符合条件的才显示,左连接不管符合不符合都会显示。理论上来说,用直连接会优于左连接。
总结:直连接:只有满足条件的时候才会显示,有两种的写法,效果是一样的;
左连接:左表数据全部显示,右表数据如果满足连接条件就显示,不满足就显示null。还需要注意后面加的条件