01-查找最晚入职员工的所有信息-题解

该博客介绍了如何使用SQL查询找出员工表中最后入职的员工所有信息。提供了两种方法:子查询和使用limit关键字。子查询方法通过比较所有员工的入职日期找出最大值,而limit方法则通过对入职日期降序排序后直接选取第一条记录。两种方法的运行时间和内存占用进行了对比,提示在实际应用中可以依据情况选择limit关键字的写法。
摘要由CSDN通过智能技术生成

题目描述

有一个员工employees表简况如下:

img

建表语句如下:

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL, 
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

请你查找employees里最晚入职员工的所有信息,以上例子输出如下:img

题解

方法一:子查询

按理来说这个解法才是正解,因为最后一天不一定只有一个员工入职,也有可能多个员工同时在这一天入职。但其实题目说的模棱两可,貌似只考虑了最后一天只有一个员工的情况。

select * from employees where hire_date = (select max(hire_date) from employees);

运行时间:40ms
超过25.63%用Mysql提交的代码

占用内存:5944KB
超过1.95%用Mysql提交的代码

方法二:使用limit关键字

对入职时间降序排序后直接使用limit关键字即可。

select * from employees order by hire_date desc limit 1;

运行时间:40ms
超过25.63%用Mysql提交的代码

占用内存:5368KB
超过20.71%用Mysql提交的代码

可以看出占用内存略小于子查询的写法,一般情况下优先使用关键字。

limit函数复习

mysql里分页一般用limit来实现,类似SQLserver中top的用法。

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset;
limit作用
limit(n)取前n条记录
limit(m, n)从第 m + 1 行开始取 n 条记录,n也可为负数
limit n offset m效果同上

复习过后,我们尝试用两种写法再次将这个算法实现一下(效率同上)。

-- 使用limit 与 offset关键字
select * from employees
    order by hire_date desc
    limit 1 offset 0;
 
-- 仅使用limit关键字
select * from employees
    order by hire_date desc
    limit 0,1;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值