第一题:查找最晚入职员工的所有信息
思路:查找,肯定是用SELECT;所有信息,通配符 *;
最晚入职:(1)可以使用WHERE子句来选择,汇聚函数Max(),对日期可用YEAR(),MONTH(),DATE(),进行分割比较,但是我想了一下,子查询太复杂。
(2)可以对日期进行降序排序,然后输出第一行。可以使用ORDER BY和LIMIT;
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 1
通过!开心!
(3)但是第一种方法还是具有可行性,时间不分割也可以使用max来获得最大值。
SELECT * FROM employees WHERE hire_date=(SELECT Max(hire_date) FROM employees)
第二题:查找入职员工时间排名倒数第三的员工所有信息
思路:可以利用第一题的第二种思路,LIMIT可以限制从第几行输出几行。
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1
第三题:查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no
注意:题目中给出了两个表,不同的输出列在不同的表里,所以要考虑如何输出两个表里的信息。内联结,内连接,好像还不一样
SELECT s.*,d.dept_no FROM salaries s, dept_manager d WHERE d.to_date='9999-01-01' AND s.to_date='9999-01-01' AND d.emp_no=s.emp_no
后一项可以换成任意两个表中的公共项
内连接:
SELECT salaries.emp_no,salaries.salary,salaries.from_date,salaries.to_date,dept_no
From salaries INNER JOIN dept_manager
on salaries.to_date='9999-01-01' AND dept_manager.to_date='9999-01-01' AND salaries.emp_no=dept_manager.emp_no
前面的输出在两个表中都包含的一定要写完全名,另外名字一定要写对(真的),匹配的时候字符串要加单引号,
第四题:查找所有已经分配部门的员工的last_name和first_name
第一个表就是已分配部门的,根据第一个表中的emp_no找出第二个表中的员工的last_name和first_name
SELECT last_name, first_name,dept_no FROM employees, dept_emp WHERE employees.emp_no=dept_emp.emp_no
第五题:查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工
根据题目分析可知是典型的左连接
SELECT last_name, first_name, dept_no FROM employees LEFT JOIN dept_emp ON employees.emp_no=dept_emp.emp_no