牛客SQL实战题目
徐周
这个作者很懒,什么都没留下…
展开
-
数据库SQL实战-1.查找最晚入职员工的所有信息
select * from employeesorder by hire_date desclimit 1原创 2019-07-09 08:37:35 · 374 阅读 · 0 评论 -
数据库SQL实战-14.从titles表获取按照title进行分组, 注意对于重复的emp_no进行忽略
select title,count(distinct(emp_no)) as tfrom titlesgroup by titlehaving t>=2;和上一题的唯一区别就是加了distinct去重。原创 2019-07-16 14:13:44 · 173 阅读 · 0 评论 -
数据库SQL实战-15.查找employees表
select *from employeeswhere emp_no%2==1and last_name !='Mary'order by hire_date desc;原创 2019-07-16 14:17:14 · 410 阅读 · 0 评论 -
数据库SQL实战-16.统计出当前各个title类型对应的员工当前薪水对应的平均工资
select t.title,avg(salary) as avgfrom salaries as s join titles as ton s.emp_no = t.emp_noand s.to_date = '9999-01-01'and t.to_date = '9999-01-01'group by title考察join连接和分组统计原创 2019-07-16 14:21:31 · 361 阅读 · 0 评论 -
数据库SQL实战-17.获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
这种题目有两种解法,方法1,采用limit实现,如下:select emp_no,salaryfrom salariesorder by salary desclimit 1,1;方法2,如果不允许使用limit的话,可以换个思路思考,第二高也就是除了最高的之外,薪水最高的了,具体实现如下:select e.emp_no,MAX(s.salary),e.last_nam...原创 2019-07-16 14:23:15 · 352 阅读 · 0 评论 -
数据库SQL实战-18.查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth
思路是查找出日期最大的薪水以及入职时候(日期最小)的薪水就是薪水的涨幅值,日期最大和最小通过对日期排序即可实现。select ((select salary from salaries where emp_no=10001 order by to_date desc limit 1)- (select salary from salaries where emp_no=10001 ...原创 2019-07-16 14:36:46 · 515 阅读 · 0 评论 -
数据库SQL实战-19. 对所有员工的当前薪水按照salary进行按照1-N的排名
本题的主要思想是复用salaries表进行比较排名,具体思路如下:1、从两张相同的salaries表(分别为s1与s2)进行对比分析,先将两表限定条件设为to_date = '9999-01-01',挑选出当前所有员工的薪水情况。2、本题的精髓在于s1.salary <= s2.salary,意思是在输出s1.salary的情况下,有多少个s2.salary大于等于s1.salar...原创 2019-07-16 14:50:09 · 526 阅读 · 0 评论 -
数据库SQL实战-20.将employees表的所有员工的last_name和first_name拼接起来作为Name
select last_name ||" "||first_name as Namefrom employees考察的是拼接用法,不同数据库连接字符串的方法不完全相同,MySQL、SQL Server、Oracle等数据库支持CONCAT方法,而本题所用的SQLite数据库只支持用连接符号"||"来连接字符串。...原创 2019-07-16 15:05:09 · 731 阅读 · 0 评论 -
数据库SQL实战-11.获取所有员工当前的manager
SELECT de.emp_no,dm.emp_no AS manager_noFROM dept_manager AS dm,dept_emp AS deWHERE de.emp_no != dm.emp_noAND de.dept_no = dm.dept_noAND dm.to_date='9999-01-01';原创 2019-07-16 14:09:36 · 208 阅读 · 0 评论 -
数据库SQL实战-13.从titles表获取按照title进行分组
select title,count(emp_no) as tfrom titlesgroup by titlehaving t>=2;考查having的用法,本地后面比较t>=2,t是中间变量,因此需要实用having限定条件,不可以用where。...原创 2019-07-16 14:09:01 · 193 阅读 · 0 评论 -
数据库SQL实战-12.获取所有部门中当前员工薪水最高的相关信息
select d.dept_no,d.emp_no,MAX(s.salary)from dept_emp as d join salaries as son d.emp_no = s.emp_nowhere d.to_date = '9999-01-01' and s.to_date = '9999-01-01'group by d.dept_no考查group by以及join操作...原创 2019-07-16 14:04:30 · 570 阅读 · 0 评论 -
数据库SQL实战-2. 查找入职员工时间排名倒数第三的员工所有信息
select * from employeesorder by hire_date desclimit 2,1主要考察limit的用法,用法limit m,n。m是输出记录的初始位置(从0开始),n是偏移量,偏移多少,即输出的条目就是多少。...原创 2019-07-09 08:41:43 · 328 阅读 · 0 评论 -
数据库SQL实战-3.查找各个部门当前薪水详情以及其对应部门编号dept_no
select s.*,d.dept_nofrom salaries as sjoin dept_manager as don s.emp_no=d.emp_nowhere s.to_date='9999-01-01' and d.to_date='9999-01-01';考查的是join的用法。原创 2019-07-09 08:49:17 · 363 阅读 · 0 评论 -
数据库SQL实战-4. 查找所有已经分配部门的员工的last_name和first_name
select last_name,first_name,dept_nofrom employees left join dept_empon employees.emp_no = dept_emp.emp_nowhere dept_emp.dept_no <> '';本题考察的是left join的使用以及<>不等于的使用。...原创 2019-07-09 08:56:58 · 227 阅读 · 0 评论 -
数据库SQL实战-5.查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工
select last_name,first_name,dept_nofrom employees left join dept_empon employees.emp_no = dept_emp.emp_no;本题和第4题的区别是,本题包括没有分配具体部门的员工,因此直接left join即可,不需要过滤。...原创 2019-07-09 09:02:34 · 362 阅读 · 0 评论 -
数据库SQL实战-6. 查找所有员工入职时候的薪水情况
select e.emp_no,s.salaryfrom employees as e,salaries as swhere e.emp_no = s.emp_noand e.hire_date = s.from_dateorder by e.emp_no desc;原创 2019-07-09 09:08:23 · 498 阅读 · 0 评论 -
数据库SQL实战-7. 查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
select emp_no,count(salary) as tfrom salariesgroup by emp_nohaving t>15;本题考察的是group by和having用法,其中having和where的区别是,如果使用到中间结果(像本题中的t)只能有having。此外,感觉本题有些不严谨,严格来说,下一条salary高于本条才算涨幅,但本题只要出现了一条记录就...原创 2019-07-09 09:15:59 · 219 阅读 · 0 评论 -
数据库SQL实战-8.找出所有员工当前具体的薪水salary情况
select distinct(salary)from salarieswhere to_date = '9999-01-01'order by salary desc;本题考察的是distinct关键字的用法,即去重。原创 2019-07-09 09:19:33 · 795 阅读 · 1 评论 -
数据库SQL实战-9. 获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'
select d.dept_no,d.emp_no,s.salaryfrom salaries as s join dept_manager as don s.emp_no = d.emp_nowhere s.to_date = '9999-01-01' and d.to_date = '9999-01-01';本题考察的是Join连接操作。...原创 2019-07-09 09:24:18 · 249 阅读 · 0 评论 -
数据库SQL实战-10.获取所有非manager的员工emp_no
方法1:使用left join连接两张表,employees放在左边,然后选出dept_no为null的即可。select e.emp_nofrom employees as e left join dept_manager as don e.emp_no = d.emp_nowhere dept_no is null;方法2:使用not in直接过滤掉manager即可。...原创 2019-07-09 09:32:30 · 213 阅读 · 0 评论