【面试必刷】Mysql编程题:第一期

208 阅读2分钟

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战」。

Test 1

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

考察知识点

ORDER BYLIMIT,子查询。

LIMIT用法

首先我们要知道LIMIT 共两种常见用法:

SELECT * FROM table  LIMIT [offset], rows    -- LIMIT 单独使用
SELECT * FROM table  LIMIT rows OFFSET [offset]    -- 配合 OFFSET 使用    

offset:行开始的行的索引。0表示从第1行 开始显示(包括第1行),以此类推。

rows:数据显示的条数。

举几个栗子:

SELECT * FROM table1 LIMIT 5;    //检索前5条数据(1-5)
--相当于
SELECT * from table1 LIMIT 0,5;    // 从第0行开始检索5条数据
--相当于
SELECT * FROM table1 LIMIT 5 OFFSET 0;    //从第0行开始检索5条数据,注意这里的LIMIT的5指代的是数量

解题思路

1️⃣ 如果只是按照题目的要求来做的话,因为数据里员工入职的日期都不是同一天,那么只需要对hire_date列进行降序排列,取第一行数据即可。

SELECT * 
FROM employees
ORDER BY hire_date DESC 
LIMIT 1;

2️⃣ 上面的解法只能应用在日期都不是同一天的情况下,如果最晚入职的有很多人,那么数据必然不准确,因此,我们可以根据子查询来筛选hire_date等于最晚日期的那些数据。

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

Test 2

有一个员工 employees 表简况如下: 请你查找 employees 里入职员工时间排名倒数第三的员工所有信息,以上例子输出如下: 在这里插入图片描述

解题思路

考察知识点
DISTINCTLIMITORDER BY、子查询。

1️⃣ 按照题目中的描述,员工入职日期都不是同一天,那么直接按照hire_date列降序排列的结果,从第三行开始取出一行数据即可。

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

2️⃣ 解法一有它的局限性,当员工的入职日期有重复时,获取的结果不一定是正确的。这时可以先筛选出入职时间第三晚的日期,然后找出日期等于该日期的员工信息。

SELECT *
FROM employees
WHERE hire_date = (
    SELECT DISTINCT hire_date
    FROM employees
    ORDER BY hire_date DESC       -- 倒序排列
    LIMIT 1 OFFSET 2              -- 从索引2(第三行)开始取
);

这就是今天要分享的内容,微信搜 Python新视野,每天带你了解更多有用的知识。更有整理的近千套简历模板,几百册电子书等你来领取哦!另外还有Python小白交流群,如果有兴趣可以通过上面的方式联系我哦!