sql语句真实场景

gitee地址
https://gitee.com/xuthus5/Database-SQL-Actual-Combat/blob/master/README.md#https://gitee.com/link?target=https%3A%2F%2Flaunchpad.net%2Ftest-db%2Femployees-db-1%2F1.0.6
结合sql练习来看https://wwu.lanzouq.com/itJrv04wtveb

员工表与部门管理者表

员工表包含所有的员工(包括姓名字段),部门管理表是只有dept_no,emo_no,from_date(入职日期),to_data(在职日期)

获取所有非manager的员工emp_no
1.使用两表查询

select e.emp_no from employees e where e.emp_no not in (select emp_no from dept_manager) # 0.232秒

2.使用查询内连接查询

待续

3.使用外键关联查询

SELECT
	dm.emp_no  # 员工表;加个命名字段就变成了6秒
	
FROM
	dept_manager de
	LEFT JOIN employees dm ON de.emp_no != dm.emp_no # 返回两表中no并不相等的字段值

获取所有员工当前的manager

部门员工和部门领导表
一个部门员工可有多个部门领导表
利用dept_no 关联两表之间的数据,

SELECT
	de.emp_no,
	dm.emp_no manager_no 
FROM
	dept_emp de
	LEFT JOIN dept_manager dm ON de.dept_no = dm.dept_no 
WHERE
	de.to_date = '9999-01-01' 
	AND dm.to_date = '9999-01-01' 
	AND de.emp_no != dm.emp_no

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉

获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary

报错
1054 - Unknown column 's.salary' in 'having clause'、

posted @ 2022-05-16 11:41  索匣  阅读(73)  评论(0编辑  收藏  举报