10道常考的SQL笔试题,附答案解析!
上次说的⾯试知识点⼤家都学会了嘛,今天来讲⼏道常考的SQL笔试题,练习练习,建议先⾃⼰做⼀下再看答案解析哦(左右滑动查看代码)~
吕氏春秋经典语录
有⼀个员⼯表,employees简况如下:
1、查最晚⼊职员⼯的所有信息。
【问题解析】查符合条件员⼯所有信息,条件是⼊职时间最晚
•查询结果:员⼯所有信息
•查询条件:最晚⼊职
•
•
•
--【知识点】关联⼦查询select* fromemployees asa wherehire_date = ( selectmax(hire_date) fromemployees);
2、查⼊职员⼯时间排名倒数第三的员⼯所有信息。
【问题解析】查符合条件的员⼯所有信息,条件是⼊职时间排名倒数第三
•查询结果:员⼯所有信息
•查询条件:⼊职时间排名倒数第三,注意时间需要去重
•
•
•
•
变量名和函数名的命名规则•
--【知识点】关联⼦查询select* fromemployees wherehire_date = ( selectdistincthire_date fromemployees orderbyhire_date desclimit1offset2);java方法类型
有⼀个全部员⼯的薪⽔表salaries简况如下:
有⼀个各个部门的领导表dept_manager简况如下:
3、查各个部门当前(to_date='9999-01-01')领导当前薪⽔详情以及其对应部门编号dept_no。
mysql面试题笔试>mybatispls使用开源协议【问题解析】把dept_manager和salaries两个表交叉连接(内连接),显⽰薪⽔表所有信息和部门编号;
定义条件:时间为当前to_date
•
•
•
•
•
•
--【知识点】多表查询(内连接)selecta.* ,b.dept_no fromsalaries asa innerjoindept_manager p_no =
4、查所有已经分配部门的员⼯的last_name和first_name以及dept_no
【问题解析】对demp_emp和employees表交叉连接(内连接),显⽰last_name和first_name以及dept_no;
•
•
•
•
--【知识点】多表查询(内连接)selecta.last_name,a.first_name,b.dept_no fromemployees asa innerjoindept_emp asb p_no = b.emp_no;
5、查所有员⼯的last_name和first_name以及对应部门编号dept_no,也包括展⽰没有分配具体部门的员⼯。
【问题解析】对demp_emp和employees表交叉连接(左连接),显⽰last_name和first_name以及dept_no
•
•
•
•
--【知识点】多表查询(左连接)selecta.last_name,a.first_name,b.dept_no fromemployees asa leftjoindept_emp asb p_no = b.emp_no;
undergraduate students6、查所有员⼯⼊职时候的薪⽔情况,给出emp_no以及salary,并按照emp_no进⾏逆序。
【问题解析】对employees和salaries交叉连接(内连接),显⽰emp_no以及salary;
•定义条件,为employees的hire_date与salaries的from_date⼀致
•并按照emp_no逆序排列
•
•
•
•
•
•
--【知识点】多表连接(内连接),及order by 逆序排列;p_no,b.salary fromemployees asa innerjoinsalaries p_no = b.emp_no wherea.hire_date = b.from_p_no desc;
7、查薪⽔涨幅超过15次的员⼯号emp_no以及其对应的涨幅次数t。
【问题解析】
•查salaries表中,按员⼯编号分组
•对分组结果中员⼯编号出现超过(⼤于)15次
•并记录该编号薪⽔涨幅次数
•
•
•
•
•
•
--【知识点】分组group by 以及having⼦句;selectemp_no, count(emp_no) ast fromsalaries groupbyemp_no havingcount(emp_no)> 15;
8、出所有员⼯当前(to_date='9999-01-01')具体的薪⽔salary情况,对于相同的薪⽔只显⽰⼀次,并按照逆序显⽰。
【问题解析】
•按照员⼯分组,对分组结果查询当前⽇期(to_date='9999-01-01)的薪⽔salary,
•对查询结果去掉重复值汇总,逆序显⽰;
•
•
•
•
•
•
--【知识点】分组group by 以及排序order by;selectdistinctsalary fromsalaries whereto_date= '9999-01-
01'groupbyemp_no orderbysalary desc;
9、获取所有部门当前manager的当前薪⽔情况,给出dept_no, emp_no以及salary,当前表⽰to_date='9999-01-01'。【问题解析】
•dept_manager表与salaries表交叉连接(内连接),显⽰dept_no, emp_no以及salary;
•按照部门进⾏分组,对分组结果查询条件为to_date='9999-01-01'的部门领导
•对符合条件的领导,连接薪⽔
•
•
•
•
•
•
--【知识点】多表连接、分组、条件查询selecta.dept_p_no,b.salary fromdept_manager asa innerjoinsalaries p_no = b.emp__date = '_date = b.to_date groupbydept_no;
10、获取所有⾮manager的员⼯emp_no。
【问题解析】
•对employees表和dept_manager表交叉连接(左连接),条件为左列名为null部分
•对于符合条件的员⼯编号,汇总显⽰
•
•
•
•
•
--【知识点】多表连接,考察左连接不含交集部分;p_no fromemployees asa leftjoindept_manager p_no = b.emp_no whereb.dept_no isnull;
后续会持续更新,⼀定要多多练习才能掌握喔~
福利时间到!
【⼩⼩的SQL学习笔记】,后台回复【50】即可领取《MySQL经典50题》~
《MySQL经典50题》部分内容
- END -
嘿!⼩伙伴
加⼊爱数据职场知识分享社
⾏业动态早知道
⼤咖直播周周有
与5000+数分⼈⼀起
⾼效精准的学习
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论