牛客网刷题 SQL篇
发布时间
阅读量:
阅读量
牛客网SQL刷题日记
Day 1:
查询入公司时间最长的员工的数据
题目描述部分:
该数据库中详细说明了以下内容:
建表语句如下:

无法对给定文本进行有效的同义改写以降低重复率
请你查找employees里最晚入职员工的所有信息,以上例子输出如下:

题解:
select * from employees where hire_date = (select max(hire_date) from employees);
//将所有元素都查询出来,再挑选其时间戳最大的一个作为提取对象,巧妙使用max函数是关键点
2.查找入职员工时间排名倒数第三的全部信息

select * from employees
where hire_date = (
select distinct hire_date from employees order by hire_date desc limit 2,1
)
//order是排序,第二条后取出一条,就是第三条
//distinct是去重,只要返回一个时间,就可以取出多条
//desc跳过两行取出一行
Day2 2.24
3 查找当前薪水详情以及部门编号



题解:
SELECT s.*, d.dept_no FROM salaries s , dept_manager d
WHERE s.emp_no = d.emp_no
AND d.to_date='9999-01-01'
AND s.to_date='9999-01-01'
//SQL语言也支持这种面向对象的编程方式 将表实例化为s d等
//最后两行没有也可以通过,但是加上更加严谨
day3 2.25
4 查找所有已经分配部门的员工的xxx和xxx
题目:

题解
select last_name, first_name, dept_no from employees e, dept_emp d
where d.emp_no = e.emp_no
//多表联动
5 查找所有员工的xxx和xxx以及对应部门No


select last_name, first_name, dept_no
from employees e
left join dept_emp d
on e.emp_no = d.emp_no
//用了left join表示不管有没有返回值,左边的都要返回
//on是在多表联动的时候进行使用
7 查找薪水记录超过15次的员工


题解
SELECT emp_no, COUNT(emp_no) AS t FROM salaries
GROUP BY emp_no //为其分组
HAVING t > 15 //having是能够和聚合函数一起用的东西
8 找出所有员工当前薪水


题解
select distinct salary from salaries
order by salary desc
// distinct是查询单次
//排序默认是升序 desc是降序
10 找出所有非部门领导的员工emp_no


题解
select emp_no from employees
where emp_no not in (select emp_no from dept_manager)
//重点是可以搜索其他表格,然后构建一个集合来做 not in
11获取所有员工当前的manager


题解
select a.emp_no, b.emp_no as manager
from dept_emp as a join dept_manager as b
on a.dept_no = b.dept_no
and a.emp_no <> b.emp_no
//用join来表示两个表 <>表示不等于
全部评论 (0)
还没有任何评论哟~
