牛客网 SQL 195-204

195:请你查找employees里最晚入职员工的所有信息

select * 
from employees
where hire_date = (select max(hire_date) from employees);

解题思路:使用子查询的方法,先找出所有入职时间里最大(即最晚)的时间,这样可以确保多条最晚入职时间都可以被查询出来。

196:查找入职员工时间排名倒数第三的员工所有信息

select * from employees
where hire_date  = (select distinct hire_date from employees
order by hire_date desc limit 2,1);

在查询中,经常要返回前几条或者中间某几行数据时,用到limit
如果limit后面是一个参数,就是检索前多少行。如果limit后面是2个参数,就是从offset+1行开始,检索rows行记录。

select * from table_name limit 10;//检索前10行记录
select * from table_name limit 5 ,10;//从第6行开始,检索10行记录,即:检索记录行 6-15

distinct进行去重的主要原理是通过先对要进行去重的数据进行分组操作,然后从分组后的每组数据中去一条返回给客户端

SQL197 查找当前薪水详情以及部门编号dept_no

select s.*,d.dept_no
from salaries s join dept_manager d on s.emp_no = d.emp_no
where d.to_date = '9999-01-01' and s.to_date = '9999-01-01';

解题思路:以s.emp_no = d.emp_no为联结条件联结两表,同时限制两表to_date = '9999-01-01'(原因:去重锁定)

SQL198 查找所有已经分配部门的员工的last_name和first_name

select e.last_name,e.first_name,d.dept_no
from employees e left join dept_emp d on e.emp_no = d.emp_no
where d.dept_no is not null;

解题思路:employees作为主表,使用左联结,关键是where d.dept_no is not null;题目要查找所有已经分配部门的员工,意味着必须要带有dept_no,没有dept_no的就是还未分配部门的,去除dept_no为空即可求得。

SQL199 查找所有员工的last_name和first_name以及对应部门编号dept_no

select e.last_name,e.first_name,d.dept_no
from employees e left join  dept_emp d on e.emp_no = d.emp_no;

左查看做表,右查看右表。
解题思路:employees作为主表,使用左联结。

SQL201 查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

select emp_no,count(distinct salary) t
from salaries 
group by emp_no
having t > 15;

SQL202:找出所有员工当前(to_date='9999-01-01')具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示

select salary
from salaries
where to_date='9999-01-01'
group by salary
order by salary desc;

解题思路:关键理解对于相同的薪水只显示一次,使用分组方法对salary进行分组求得,也可以使用distinct去重的方法,但是一般数据较多时使用distinct效率相比group by 要慢,所以从性能角度考虑,应该尽量使用group by。

使用distinct方法如下:

select distinct salary
from salaries
where to_date='9999-01-01'
order by salary desc;

SQL204 获取所有非manager的员工emp_no

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;

解题思路:employees作为主表,使用左联结,限定条件为d.dept_no为空,选出在employees但不在dept_manager中的emp_no记录。

参考:https://mp.weixin.qq.com/s/5vhfVJ7NW7-bq2d2EIbJwA

posted @ 2023-03-02 18:46  吃星星的大黄鸭  阅读(35)  评论(0)    收藏  举报