牛客网-在线编程-数据库实战

第一题:查找最晚入职员工的所有信息

思路:查找,肯定是用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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值