多表查询之内外连接查询的区别

解决外连接无法查询有NULL的数据

起因是学习sql语句时做练习题:

– 6.查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询

发现前面几道题目用where语句都可以解决,这一题目不行,经过回忆发现是前面视频刚讲的内外连接根本没记住,所以在此整理一下相关知识点。

多表查询的分类

内连接
1. 隐式内连接: 即用含where的语句消除无用数据

语法格式:

select * from 表单1名称,表单2名称 where 条件

2. 显示内连接:用含on的语句消除,但功效一样,所以记一个就好了

语法格式:

select * from 表单1名称 jion 表单2名称 on 条件

外连接
左外连接:可以查询左表包括NULL在内的值(右外连接因为只是逻辑上的调转,所以略去)

语法格式:

select * from 左表名称 left join 右表名称 on 条件

此题用左外连接就可以解决。题目及解决代码如下:

– 6.查询所有员工的姓名及其直接上级的姓名,没有领导的员工也需要查询

员工表

idname领导编码
001张三002
002李四003
003王五004
004赵六005
005王四聪(NULL)

因为王四聪最大,所以没有领导,这题如果用外连接来做,则无法显示王四聪,因为外连接认为NULL的为非法语句,在条件判断时会排除在外。

错误示例:
    select
    	员工表.name,
    	t2.name leader
    from
    	员工表,
    	员工表 t2
    where
    	员工表.领导编码 = t2.id;

结果:

nameleader
张三李四
李四王五
王五赵六
赵六王四聪

从结果可以发现没有王四聪的行,因为王四聪领导为NULL,所以此方法不能使用,要想显示王四聪,则需要使用左外连接

select
	员工表.name,
	t2.name leader
from
	员工表
left join
	员工表 t2
on
	员工表.领导编码 = t2.id;

则此时结果就可以显示王四聪一栏了。

nameleader
张三李四
李四王五
王五赵六
赵六王四聪
王四聪(NULL)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值