
༺ 个人主页 · 纪念229 ༻
༒专栏目录:《算法》༒
༒专栏目录:《MySQL数据库》༒
༺世上本没有路,走的人多了自然就有了༻
这篇文章讲述的是我在LeetCode和牛客网做的一些MySQL的题,个人见解感谢观看。
以下是网址链接:
批量插入数据
找出所有员工当前薪水salary情况
查找最晚入职员工的所有信息
查找入职员工时间排名倒数第三的员工所有信息
查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t
牛客:获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示
to_date=‘9999-01-01’
从titles表获取按照title进行分组
Duplicate Emails
大国
第N高的薪水
接下来将是MySQL题的讲解环节
1.批量插入数据
题目如下:

由图可知题目要求我们向表里插入数据
语法如下:
insert into actor values(1, 'PENELOPE', 'GUINESS', '2006-02-15 12:34:33'), (2, 'NICK', 'WAHLBERG', '2006-02-15 12:34:33');
题目简单就是要插入表里的内容
语法构成:
insert into + 表名(可加列名字可不加)+ values(加对应列名字类型的数据(有几个列名字就加几个数据));
2.找出所有员工当前薪水salary情况
题目如下:


语法如下:
select distinct salary from salaries order by salary desc;
我们知道请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
讲解一下:
select + 列名(*)+ from +表名;
这样就可以展示该表里的内容(这里列名可以用星号代替表示所有列名)
select + distinct + 列名(*)+ from +表名;
这里distinct的意思是只展示该列名不同的数据
distinct salary,xxxx, xxxx from 表名
select + distinct + 列名(*)+ from +表名 + order by 列名 asc/desc;
order by 列名 asc(desc)的意思是将该列升序排序(降序排序)(同一行的跟着走)
如果不加asc(desc) 就默认是asc(升序排序)
接下来我将讲述有关selec …的优先级问题
比如这个
select distinct salary from salaries order by salary desc;
第一步先执行 from salaries说明先用这个表
然后select distinct salary 然后展示salary这一列(salary中不会有相同的数据)
之后执行by salary desc再将表中该列的数据去进行降序排序
简洁来讲:from> select > order by
3.查找最晚入职员工的所有信息
题目如下:




具体题目在链接上看这里我就不展示全了
题目要求:请你查找employees里最晚入职员工的所有信息
语法展示:
select * from employees order by hire_date desc limit 1;
简单讲一下执行顺序 from > order by > select > limit
讲解limit
select * from employees order by hire_date desc + limit 数字;
limit + 数字 意思就是只展示第几行数据 (数字为几就展示几行数据)
limit 数字,数字(跳过第几行读取几行)
列如:
limit 6,3 跳过第六行读取3行
题目要的是 所有信息
则 select * from
最晚入职员工
则 降序排序 第一个就是最大的数据及最晚入职员工
则有 by hire_date desc limit 1;
4.查找入职员工时间排名倒数第三的员工所有信息
题目如图:

其它图与第三题无异就不说了
题目要求:请你查找employees里入职员工时间升序排名的情况下倒数第三的员工所有信息
语法展示
select * from employees
where hire_date=(select distinct hire_date from employees order by hire_date desc limit 2,1);
这里先讲一下为什么这么写 :
我们写语法时要有分行写执行顺序的习惯,这样看得明白也容易OJ
个人观点仅供参考
题目讲解
先讲一下where
它是一种限制条件
列如
where + 列名=xxxxx(数字)/‘xxxxxx’(字符或日期或时间)
如果这样那展示的数据在该列只会有该数据(当然该列没选中的数据也会影响其它列数据的展示)
再补充一点distinct
这里我就感到疑惑了,这个 distinct 如果把重复的数据只保留一个的话,就是这一行嘛,那肯定会有两个重复的数据,就是这一列。然后但是它其他列不同,它会保留哪一一行的数据?
- SELECT DISTINCT hire_date
你只查询了 hire_date 单独这一列!
只拿一列出来,数据库根本不会管其他列!
语句含义:
只提取 hire_date 这一列,去掉这一列内部重复的值,只返回去重后的 hire_date
👉 其他列不会被查询、不会出现在结果里,不存在“保留哪一行”这个问
题目里用的是
where + 表名
这里我们用了临时建表的方法
select distinct hire_date from employees order by hire_date desc limit 2,1
这里只解释下临时表其它就不解释了
employees里入职员工时间升序排名的情况下倒数第三的员工所有信息
正常来说升序排名的情况下倒数第三 看到升序排序我们会想到asc 可是求的是倒数第三入职员工时间的员工信息
第一我们不知道一共有几行所以我们找不到
可是我们可以逆序(desc) 取第三位的 就是 limit 2,1就可以找到
第三倒数第三入职时间的员工可能不止一个不能用limit 要用where 找的话,还有第一…的入职员工也不止一个可能要distinct 排序其它元素干扰
题目讲到这里就告以段落了,其它的题都差不多,希望看到这里对你有所帮助,谢谢观看!
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2503_94479566/article/details/163397296




