牛客网SQL语句试题

1.

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

2.

select * from employees 
where hire_date = (-- 注意这里是()
    select distinct hire_date 
    from employees 
    order by hire_date desc
    limit 2,1 -- LIMIT m,n : 表示从第m+1条开始,取n条数据;
)

题解:(1)首先需要加distinct去重。
假设 5-23(入职最晚日期)入职的有a,b,c 3人;
        5-22(入职第二晚日期)入职的有d,e 2人;
        5-21(入职倒数第三晚)入职的有f,g,h 3人;
        5-21前入职的若干...
若不加distinct去重,那么按照日期倒序,limit 2,1(从倒数第2行开始,取一条数据)的查询结果为 5-23
加了distinct去重,会按入职日期进行分组,多个相同入职日期会分为一组,这样limit 2,1的结果即为 5-21。
(2)外层的where条件中根据子查询查出的倒数第三晚入职的日期,就能查询出符合条件的员工信息。

3.

select salaries.* , dept_manager.dept_no
from salaries inner join dept_manager
on salaries.emp_no = dept_manager.emp_no
where salaries.to_date = '9999-01-01' and dept_manager.to_date='9999-01-01';

这样也行:

select salaries.* , dept_manager.dept_no
from salaries inner join dept_manager
on salaries.emp_no = dept_manager.emp_no and salaries.to_date = '9999-01-01' and dept_manager.to_date='9999-01-01'

4.

select last_name, first_name, dept_emp.dept_no 
from employees inner join dept_emp 
on employees.emp_no = dept_emp.emp_no
where dept_emp.dept_no is not null;

/*
查询已分配部门的员工,即查询dept_no不为空的对应员工。
此处所要查询的数据在不同的表,因而用多表连接查询。
*/

5.

select ep.last_name, ep.first_name, dp.dept_no 
from employees ep 
left join dept_emp dp
on ep.emp_no = dp.emp_no;

7.

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

/*
此题应注意以下3点:
1、用COUNT()函数和GROUP BY语句可以统计同一emp_no值的记录条数
2、根据题意,输出的变动次数为t,故用AS语句将COUNT(emp_no)的值转换为t
3、由于COUNT()函数不可用于WHERE语句中,故使用HAVING语句来限定t>15的
*/

8.

 

 

 

 


分割线,下面列表是为了防止找不到顺序。。。


 SQL1

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

 

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

 

简单38.86%
 SQL3查找各个部门当前领导当前薪水详情以及其对应部门编号dept_no 

 

中等23.70%
 SQL4查找所有已经分配部门的员工的last_name和first_name简单39.59%
 SQL5查找所有员工的last_name和first_name以及对应部门编号dept_no中等39.18%
 SQL7查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t简单40.41%
 SQL8找出所有员工当前具体的薪水salary情况简单48.21%
 SQL10获取所有非manager的员工emp_no简单39.41%
 SQL11获取所有员工当前的manager中等31.15%
 SQL12获取所有部门中当前员工薪水最高的相关信息困难19.67%
 SQL15查找employees表所有emp_no为奇数简单45.17%
 SQL16统计出当前各个title类型对应的员工当前薪水对应的平均工资中等34.32%
 SQL17获取当前薪水第二多的员工的emp_no以及其对应的薪水salary简单42.95%
 SQL18查找当前薪水排名第二多的员工编号emp_no较难24.93%
 SQL19查找所有员工的last_name和first_name以及对应的dept_name中等30.52%
 SQL21查找所有员工自入职以来的薪水涨幅情况困难20.29%
 SQL22统计各个部门的工资记录数中等28.84%
 SQL23对所有员工的当前薪水按照salary进行按照1-N的排名较难26.13%
 SQL24获取所有非manager员工当前的薪水情况较难26.97%
 SQL25获取员工其当前的薪水比其manager当前薪水还高的相关信息困难26.18%
 SQL26汇总各个部门当前员工的title类型的分配数目困难23.73%
 SQL28查找描述信息中包括robot的电影对应的分类名称以及电影数目较难18.63%
 SQL29使用join查询方式找出没有分类的电影id以及名称中等37.94%
 SQL30使用子查询的方式找出属于Action分类的所有电影对应的title,description中等44.60%
 SQL32将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分简单36.46%
 SQL33创建一个actor表,包含如下列信息中等28.07%
 SQL34批量插入数据简单41.10%
 SQL35批量插入数据,如果数据已经存在,请忽略,不使用replace操作中等43.91%
 SQL36创建一个actor_name表,将actor表中的所有first_name以及last_name导入改表中等43.06%
 SQL37对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname中等46.10%
 SQL38针对actor表创建视图actor_name_view中等41.51%
 SQL39针对上面的salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005,中等36.73%
 SQL40在last_update后面新增加一列名字为create_date中等40.10%
 SQL41构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中中等34.98%
 SQL42删除emp_no重复的记录,只保留最小的id对应的记录。简单37.36%
 SQL43将所有to_date为9999-01-01的全部更新为NULL,且简单48.79%
 SQL44将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现。简单53.95%
 SQL45将titles_test表名修改为titles_2017简单56.38%
 SQL46在audit表上创建外键约束,其emp_no对应employees_test表的主键id中等29.82%
 SQL48将所有获取奖金的员工当前的薪水增加10%中等36.53%
 SQL50将employees表中的所有员工的last_name和first_name通过(')连接起来。中等45.44%
 SQL51查找字符串'10,A,B'中等56.48%
 SQL52获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列中等56.22%
 SQL53按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees中等47.52%
 SQL54查找排除当前最大、最小salary之后的员工的平均工资avg_salary中等25.04%
 SQL55分页查询employees表,每5行一页,返回第2页的数据中等67.02%
 SQL57使用含有关键字exists查找未分配具体部门的员工的所有信息。中等36.93%
 SQL59获取有奖金的员工相关信息。较难27.59%
 SQL60统计salary的累计和running_total较难34.98%
 SQL61对于employees表中,给出奇数行的first_name较难24.26%
 SQL62出现三次以上相同积分的情况简单44.97%
 SQL63刷题通过的题目排名中等31.00%
 SQL64找到每个人的任务简单34.19%
 SQL65异常的邮件概率较难19.09%
 SQL66牛客每个人最近的登录日期(一)简单40.84%
 SQL67牛客每个人最近的登录日期(二)较难20.59%
 SQL68牛客每个人最近的登录日期(三)较难21.97%
 SQL69牛客每个人最近的登录日期(四)较难22.81%
 SQL70牛客每个人最近的登录日期(五)困难13.33%
 SQL71牛客每个人最近的登录日期(六)较难24.44%
 SQL72考试分数(一)简单39.99%
 SQL73考试分数(二)中等28.60%
 SQL74考试分数(三)较难18.35%
 SQL75考试分数(四)较难25.52%
 SQL76考试分数(五)困难17.79%
 SQL77牛客的课程订单分析(一)简单33.28%
 SQL78牛客的课程订单分析(二)中等27.32%
 SQL79牛客的课程订单分析(三)中等20.97%
 SQL80牛客的课程订单分析(四)较难28.62%
 SQL81牛客的课程订单分析(五)困难17.00%
 SQL82牛客的课程订单分析(六)中等17.67%
 SQL83牛客的课程订单分析(七)较难18.84%
 SQL84实习广场投递简历分析(一)简单31.42%
 SQL85实习广场投递简历分析(二)中等26.33%
 SQL86实习广场投递简历分析(三)困难15.33%
 SQL87最差是第几名(一)中等45.00%
 SQL88最差是第几名(二)较难16.36%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值