#数据库SQL实战#【Day2】

--------------------------------------------------
学习用,欢迎讨论。
--------------------------------------------------
查看详细题目的方法:
复制以下题目内容;
Ctrl+F查找刚刚复制的题目即可。
--------------------------------------------------
题目5:查找所有员工的last_name和first_name以及对应部门编号dept_no(也包括展示没有分配具体部门的员工)
select e.last_name, e.first_name, de.dept_no
from employees as e left join dept_emp as de
on e.emp_no = de.emp_no
题中要求展示没有分配具体部门的员工,考虑到使用的是SQLite,因此只能使用左连接。左连接会读取左边表的所有数据,即使右边的表无对应数据。
--------------------------------------------------
题目6:查找所有员工入职时候的薪水情况
select e.emp_no, s.salary
from employees as e inner join salaries as s
on e.emp_no = s.emp_no
where e.hire_date = s.from_date
order by e.emp_no desc
按照题目给出emp_no和salary,并按照emp_no逆序排列。由于题目给出了两个表,所以第一想法就是如上连接两个表。salaries表中from_date字段等于employees表hire_date字段时,就是入职时候的薪水。
但是,另一方面,完全可以只通过salaries表就完成查找。想法是:对每个员工的记录按照from_date进行升序排序,第一个就是入职时的薪水。
select emp_no, salary
from salaries as s
where from_date = (
select min(from_date) from salaries where emp_no = s.emp_no)
order by s.emp_no desc
当然“只通过salaries表进行查找”还有很多实现方法,可参见 [http://www.cnblogs.com/netserver/p/4518995.html]
--------------------------------------------------
题目7: 查找薪水涨幅超过15次的员工号emp_no以及对应的涨幅次数t
select emp_no, count(emp_no) as t
from salaries
group by emp_no
having t > 15
本题通过group by按照emp_no进行分组,通过count函数统计每组记录的个数,同时通过having筛选出涨幅次数超过15次的员工。
对于“涨幅”定义,题目没有说明。实际上应该是count(emp_no)-1。但是这样不能通过测试。
--------------------------------------------------
题目8:找出所有员工当前具体的薪水salary情况
select distinct salary from salaries
where to_date = '9999-01-01'
order by salary desc
本题的直接思路就是使用distinct关键字进行去重,得到上述语句。
但是很多人在讨论distinct和group by的效率问题,提出用group by去重更能提高效率,有如下解法:
select salary from salaries
where to_date = '9999-01-01'
group by salary
order by salary desc
在数据量小的时候,是感觉不出其中的差别的。数据量很大的时候,已有博客进行了讨论:https://www.jianshu.com/p/34800d06f63d
--------------------------------------------------
全部评论

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务