Advertisement

牛客网刷题 SQL篇

阅读量:

牛客网SQL刷题日记

Day 1:
查询入公司时间最长的员工的数据
题目描述部分:
该数据库中详细说明了以下内容:

建表语句如下:

在这里插入图片描述

无法对给定文本进行有效的同义改写以降低重复率

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

在这里插入图片描述

题解:

复制代码
    select * from employees where hire_date = (select max(hire_date) from employees);
    //将所有元素都查询出来,再挑选其时间戳最大的一个作为提取对象,巧妙使用max函数是关键点

2.查找入职员工时间排名倒数第三的全部信息

在这里插入图片描述
复制代码
    select * from employees 
    where hire_date = (
    select distinct hire_date from employees order by hire_date desc limit 2,1
    )
    //order是排序,第二条后取出一条,就是第三条
    //distinct是去重,只要返回一个时间,就可以取出多条
    //desc跳过两行取出一行

Day2 2.24
3 查找当前薪水详情以及部门编号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题解:

复制代码
    SELECT s.*, d.dept_no FROM salaries s , dept_manager d
    WHERE s.emp_no = d.emp_no 
    AND d.to_date='9999-01-01'
    AND s.to_date='9999-01-01'
    //SQL语言也支持这种面向对象的编程方式 将表实例化为s d等
    //最后两行没有也可以通过,但是加上更加严谨

day3 2.25
4 查找所有已经分配部门的员工的xxx和xxx
题目:

在这里插入图片描述

题解

复制代码
    select last_name, first_name, dept_no from employees e, dept_emp d
    where d.emp_no = e.emp_no
    //多表联动

5 查找所有员工的xxx和xxx以及对应部门No

在这里插入图片描述
在这里插入图片描述
复制代码
    select last_name, first_name, dept_no 
    from employees e
    left join dept_emp d
    on e.emp_no = d.emp_no
    //用了left join表示不管有没有返回值,左边的都要返回
    //on是在多表联动的时候进行使用

7 查找薪水记录超过15次的员工

在这里插入图片描述
在这里插入图片描述

题解

复制代码
    SELECT emp_no, COUNT(emp_no) AS t FROM salaries 
    GROUP BY emp_no   //为其分组
    HAVING t > 15 //having是能够和聚合函数一起用的东西

8 找出所有员工当前薪水

在这里插入图片描述
在这里插入图片描述

题解

复制代码
    select distinct salary from salaries
    order by salary desc
    // distinct是查询单次
    //排序默认是升序  desc是降序

10 找出所有非部门领导的员工emp_no

在这里插入图片描述
在这里插入图片描述

题解

复制代码
    select emp_no from employees
    where emp_no not in (select emp_no from dept_manager)
    //重点是可以搜索其他表格,然后构建一个集合来做 not in

11获取所有员工当前的manager

在这里插入图片描述
在这里插入图片描述

题解

复制代码
    select a.emp_no, b.emp_no as manager
    from dept_emp as a join dept_manager as b
    on a.dept_no = b.dept_no
    and a.emp_no <> b.emp_no
    //用join来表示两个表  <>表示不等于

全部评论 (0)

还没有任何评论哟~