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

2022-10-23 12:45:48

解决外连接无法查询有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 leaderfrom
    	员工表,
    	员工表 t2where
    	员工表.领导编码= t2.id;

结果:

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

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

select
	员工表.name,
	t2.name leaderfrom
	员工表leftjoin
	员工表 t2on
	员工表.领导编码= t2.id;

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

nameleader
张三李四
李四王五
王五赵六
赵六王四聪
王四聪(NULL)
  • 作者:dream in the rain
  • 原文链接:https://blog.csdn.net/weixin_47292464/article/details/107898662
    更新时间:2022-10-23 12:45:48