牛客-Mysql实战-按热度排序(前20)

在这里插入图片描述

select *
from employees
order by hire_date desc
limit 0,1;

做题笔记:
limit关键字可以从查询结果中取部分值。首先要定义两个参数,offset,size;
offset:是开始读取的第一条记录的编号(注意:在查询结果中,第一个记录的编号是0而不是1)
size:查询记录的个数

#------------------------

在这里插入图片描述

select *
from employees
order by hire_date desc
limit 2,1;

笔记:OJ的数据应该是没有重复的

#-----------------------

在这里插入图片描述

select tb1.*,tb2.dept_no
from salaries as tb1
left join dept_manager as tb2
on tb1.emp_no=tb2.emp_no
where tb1.to_date='9999-01-01'
and tb2.to_date='9999-01-01';
#--------------------

在这里插入图片描述

select last_name,first_name,tb2.dept_no
from employees as tb1
inner join dept_emp as tb2
on tb1.emp_no=tb2.emp_no;
#----------------------

在这里插入图片描述

select last_name,first_name,dept_no
from employees as tb1
left join dept_emp as tb2
on tb1.emp_no=tb2.emp_no;

做题笔记:
查询的内容包括未分配部门的员工,所以应该以employees表为主表,则查询的部门为:交集+主表有而从表没有 的信息,故使用左外连接

#*-----------------------------

在这里插入图片描述

select tb1.emp_no,tb2.salary
from employees as tb1
inner join salaries as tb2
on tb1.emp_no=tb2.emp_no
and tb1.hire_date=tb2.from_date
order by tb1.emp_no desc;
#-------------------------------

在这里插入图片描述

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

做题笔记:
题目的存在bug,不一定是存在15条工资记录就代表涨幅15次T_T,这…

#-------------------------

在这里插入图片描述

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

在这里插入图片描述

select tb2.dept_no,tb2.emp_no,tb1.salary
from salaries as tb1
inner join dept_manager as tb2
on tb1.emp_no=tb2.emp_no
where tb1.to_date='9999-01-01'
and tb2.to_date='9999-01-01';
#-------------------------

在这里插入图片描述
解法一:

select tb1.emp_no from employees as tb1
where tb1.emp_no not in (select emp_no from dept_manager);

解法二:

select tb1.emp_no
from employees as tb1
left join dept_manager as tb2
on tb1.emp_no=tb2.emp_no
where tb2.emp_no is null;

在这里插入图片描述

select tb1.emp_no,tb2.emp_no as namager_no
from dept_emp as tb1
inner join dept_manager as tb2
on tb1.dept_no=tb2.dept_no
and tb1.emp_no<>tb2.emp_no
where tb1.to_date='9999-01-01'
and tb2.to_date='9999-01-01';
#*----------------

在这里插入图片描述

select dept_no,tb1.emp_no,max(salary) as salary
from dept_emp as tb1
inner join salaries as tb2
on tb1.emp_no=tb2.emp_no
where tb1.to_date='9999-01-01'
and tb2.to_date='9999-01-01'
group by dept_no;
#------------------

在这里插入图片描述

select title,count(*) as t
from titles
group by title;
#-------------------*

在这里插入图片描述

select title,count(distinct emp_no)
from titles
group by title;
#*-------------------------

在这里插入图片描述

select *
from employees
where emp_no%2=1 and last_name <>'Mary'
order by hire_date desc;
#*--------------------------

在这里插入图片描述

select title,avg(salary) as avg
from titles as tb1
left join salaries as tb2
on tb1.emp_no=tb2.emp_no
where tb1.to_date='9999-01-01'
and tb2.to_date='9999-01-01'
group by title;
##*--------------------

在这里插入图片描述

select emp_no,salary
from salaries
where to_date='9999-01-01'
order by salary desc
limit 1,1;
#*----------------------

在这里插入图片描述

#最高工资
select max(salary) from salaries where to_date='9999-01-01'
#除去最高工资后
select * from salaries where salary<>(select max(salary) from salaries where to_date='9999-01-01')
#当前表的最高工资
select max(salary) from 
(select * from salaries where salary<>(select max(salary) from salaries where to_date='9999-01-01'))
where to_date='9999-01-01'
#完整代码
select tb1.emp_no,salary,last_name,first_name
from employees as tb1
inner join salaries as tb2
on tb1.emp_no=tb2.emp_no
and tb2.to_date='9999-01-01'
and
salary=(select max(salary) from salaries where salary <>(select max(salary) from salaries))
#-*******************

在这里插入图片描述

#三表连接
select last_name,first_name,dept_name
from employees as tb1
left join dept_emp as tb2
on tb1.emp_no=tb2.emp_no
left join departments as tb3
on tb2.dept_no=tb3.dept_no;

笔记:
注意题干中的也**包括没有分配部门的员工*
*

#-----------------------------

在这里插入图片描述

select max(salary)-min(salary) as growth
from salaries
where emp_no=10001
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值