【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学习和实践的小记录
