【SQL209】题解 | 获取所有非manager的员工emp_no

获取所有非manager的员工emp_no

https://www.nowcoder.com/practice/32c53d06443346f4a2f2ca733c19660c

# select e.emp_no from employees e left join dept_manager d on e.emp_no = d.emp_no where dept_no is NULL;
select e.emp_no from employees e left join dept_manager d on e.emp_no = d.emp_no where d.dept_no is NULL;
# 注意点:判断某一个值是否为NULL,用is NULL进行判断,而非= NULL判断
# 疑问:为什么d.dept_no也能实现一样的
# SQL的规则是:如果某个字段名在查询涉及的所有表中只存在于一张表,那么可以不写表别名。
# 如果两个表中都有同名字段,就必须写别名,否则SQL不知道你指的是哪个。
# 虽然可以不写表别名,但强烈建议写:where d.dept_no is NULL
# 原因:①可读性更好②防止以后表结构变化③防止字段冲突,所以企业SQL通常都会写完整。
# LEFT JOIN + IS NULL 用来查 employees 表中没有在 dept_manager 表里的员工。

这道题是查找所有非部门领导的员工emp_no

两个关键点:

1.通过员工编号emp_no将employees表和dept_manager表左连接left join,保留左表employees的全部记录,右表dept_manager没匹配上的记录为NULL:

from employees e left join dept_manager d on e.emp_no = d.emp_no

2.实现非部门领导,注意要用is NULL语句:

where d.dept_no is NULL

完结

SQL学习专栏 文章被收录于专栏

发个sql学习和实践的小记录

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务