【MySQL】牛客网数据库编程80题刷题记录

本文记录了在牛客网上刷的80道MySQL数据库编程题目,涉及员工信息查询、薪水统计、部门连接、索引创建等多个方面,通过实例解析SQL查询技巧,包括查找最晚入职员工、部门薪水最高员工、非manager员工等多个场景。
摘要由CSDN通过智能技术生成

题库:https://www.nowcoder.com/activity/oj?tab=1

题目不写了,直接写代码和解题思路。

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

可以利用分页,但是最晚的记录不一定只有一个,所以用子查询先查到最晚的时间,外查询找到入职时间是最晚时间的所有员工。

SELECT * FROM employees
WHERE hire_date = (SELECT MAX(hire_date) FROM employees)

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

利用分页。其实同理可能有多个,那就把分页作子查询。但是这个也AC了= =

SELECT * FROM employees
ORDER BY hire_date DESC
LIMIT 2,1;

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

考察内连接-等值连接、排序

SELECT s.*,d.dept_no
FROM dept_manager d, salaries s
WHERE d.emp_no = s.emp_no
ORDER BY s.emp_no;

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

考察内连接-等值连接

SELECT e.last_name, e.first_name, d.dept_no FROM employees e, dept_emp d
WHERE e.emp_no = d.emp_no;

SQL5 查找所有员工的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;

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

……怎么没有第6题啊

SELECT		emp_no, COUNT(emp_no) t
FROM			salaries
GROUP BY	emp_no
HAVING		t > 15;

SQL8 找出所有员工当前薪水salary情况

SELECT DISTINCT salary FROM salaries
ORDER BY salary DESC;

SQL10 获取所有非manager的员工emp_no

子查询 not in

SELECT	emp_no
FROM 	employees
WHERE	emp_no NOT IN(SELECT emp_no FROM dept_manager);

也可以用左外连接做,根据员工编号左外连接后:

SELECT	e.emp_no
FROM 	employees e LEFT JOIN dept_manager d
ON		e.emp_no = d.emp_no
WHERE	dept_no IS NULL;

 SQL11 获取所有员工当前的manager

SELECT 	e.emp_no, m.emp_no manager
FROM	dept_emp e,dept_manager m
WHERE	e.dept_no = m.dept_no
AND		e.emp_no != m.emp_no;

SQL12 获取每个部门中当前员工薪水最高的相关信息

首先看题干想到:

SELECT 		d.emp_no, d.dept_no, max(salary)
FROM		dept_emp d, salaries s
WHERE		d.emp_no = s.emp_no
GROUP BY	d.dept_no;

但是报错,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值