SQL 牛客网刷题01——简单

目录

1、 查找最晚入职员工的所有信息

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

 3、查找所有已经分配部门的员工的last_name、first_name以及dept_no

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

 5、找出所有员工当前薪水salary情况、相同的薪水只显示一次,并按照逆序显示

6、获取所有非manager的员工emp_no,

7、查找employees表emp_no与last_name的员工信息

8、获取薪水第二多的员工的emp_no以及其对应的薪水salary,若有多个员工的薪水为第二多的薪水,全部输出并按emp_no升序排序。

9、所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

10、对于表actor批量插入数据(不能有2条insert语句)

11、删除emp_no重复的记录,只保留最小的id对应的记录

12、将所有to_date为9999-01-01的全部更新为NULL

13、将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005

14、将titles_test表名修改为titles_2017

15、查询积分表里面出现三次以及三次以上的积分

 16、找到每个人的任务

 17、牛客每个人最近的登录日期(一)

18、查询各个岗位平均数,并按分数降序,保留小数点后面3位

19、牛客的课程订单分析(一)

20、实习广场投递简历分析(一)


1、 查找最晚入职员工的所有信息

# 方法一 :limit存在争议,可能有多位入职最晚的员工
select * from employees
order by hire_date desc
limit 1;

# 方法三:使用limit 与 offset关键字  
select * from employees
order by hire_date desc
limit 1 offset 0;
 
# 方法四:使用limit关键字 从第0条记录 向后读取一个,也就是第一条记录 
select * from employees
order by hire_date desc
limit 0,1;

# 方法五:使用子查询
select * from employees
where hire_date = (select max(hire_date) from employees);

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

# 方法一:子查询
# limit和offset组合,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量
select * from employees
where hire_date = (
    select distinct hire_date from employees e
    order by hire_date desc
    limit 1 offset 2);

# 方法二:dense_rank() 窗口函数
select emp_no,birth_date,first_name,last_name,gender,hire_date
from(
select *,
dense_rank() over(order by hire_date desc )as n
from employees
) a
where n=3;

 3、查找所有已经分配部门的员工的last_name、first_name以及dept_no

# where条件
SELECT e.last_name, e.first_name, d.dept_no
FROM employees AS e, dept_emp AS d
WHERE e.emp_no = d.emp_no;

# 左联结
SELECT e.last_name, e.first_name, d.dept_no
FROM employees AS e INNER JOIN dept_emp AS d
ON e.emp_no=d.emp_no;

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

SELECT emp_no, COUNT(emp_no) AS t
FROM salaries
GROUP BY emp_no
HAVING t > 15;  -- 组筛选条件

 5、找出所有员工当前薪水salary情况、相同的薪水只显示一次,并按照逆序显示

# 方法一:distinct+order by
SELECT DISTINCT salary
FROM salaries
WHERE to_date='9999-01-01'
ORDER BY salary DESC;

# 方法二:group by
SELECT salary
FROM salaries
WHERE to_date='9999-01-01'
GROUP BY salary
ORDER BY salary DESC

6、获取所有非manager的员工emp_no,

# 方法1:NOT IN+子查询
select emp_no
from employees
where emp_no not in (select emp_no from dept_manager);

# 方法2:LEFT JOIN左连接+IS NULL 以左表为主,结果右边的结果为空,说明就没有在右表出现过
SELECT e.emp_no
FROM employees AS e
LEFT JOIN dept_manager AS d
ON e.emp_no=d.emp_no
WHERE dept_no IS NULL;

7、查找employees表emp_no与last_name的员工信息

查找employees表所有emp_no为奇数&#x

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值