牛客网的实战题总共分为四个难度等级,其中简单18道,中等30道,较难16道,困难7道。
这次更新的是简单题8道,以题目+考核知识点+解题代码的内容输出,有些题目可能需要考虑多种情况来解,而且解法也不是唯一的,可以自己多多想想有没有其他的解法或者想想那种解法效率最好。
以下题目编号以牛客网编号为准,方便大家查询。
#2.查询employees中员工入职时间排名倒数第三的员工
考点:order by,limit,limit n offset m,max
#数据唯一性
解法一:
SELECT emp_no,hire_date
FROM employees
ORDER BY hire_date DESC
LIMIT 2,1
解法二:
SELECT emp_no,hire_date
FROM employees
ORDER BY hire_date DESC
LIMIT 1 OFFSET 2;
#数据存在重复值
SELECT emp_no,hire_date
FROM employees
WHERE hire_date =(SELECT hire_date
FROM employees
ORDER BY hire_date DESC
LIMIT 2,1)
#4.查找所有已分配部门员工的last_name 、first_name、dept_no
考点:join
SELECT e.last_name,
e.first_name,
d.dept_no
FROM employees e
INNER JOIN dept_emp d ON e.emp_no=d.emp_no
#7.查找薪水变动超过15次的员工号emp_no以及其对应的变动次数t
考点:group by,having,延伸count(*),count(列名)的区别
SELECT emp_no,
count(*) as t
FROM salaries
GROUP BY emp_no
HAVING t>15
#8.找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
考点:distinct
SELECT DISTINCT(salary)
FROM salaries
ORDER BY salary DESC;
#10.找出所有非部门领导的员工emp_no
考点:join,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 d.dept_no is null;
#15.查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列
考点:奇数
SELECT *
FROM employees
WHERE last_name!="Mary" AND emp_no%2=1
ORDER BY hire_date DESC;
#17.获取薪水第二多的员工的emp_no以及其对应的薪水salary
考点:数据是否唯一,order by ,limit n offset m,dense_rank,max的使用方法
#数据唯一
SELECT emp_no,salary
FROM salaries
ORDER BY salary DESC
LIMIT 1,1;
#数据重复
解法一:
SELECT emp_no,salary
FROM (SELECT emp_no,
salary,
dense_rank() OVER (ORDER BY salary DESC) AS rk
FROM salaries) salaries_1
where rk=2
解法二:
SELECT emp_no,
salary
FROM salaries
WHERE salary = (SELECT MAX(salary)
FROM salaries
WHERE salary !=(SELECT max(salary)
FROM salaries));
#32.将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
考点:concat,了解拆分substring_index
SELECT CONCAT(last_name,' ',first_name)
FROM employees;




