牛客SQL练习一

2023-11-10

1.题目描述

查找最晚入职员工的所有信息

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

答案

select * from employees where hire_date = (select max(hire_date) from employees);

题解

由于date数据类型只能精确到天,即可能在最晚的当天存在一个或多个数据,该题使用limit无法获取所有的最晚当天入职的员工信息。

2.题目描述

查找入职员工时间排名倒数第三的员工的所有信息

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

答案

select * from employees where hire_date = (select distinct hire_date from employees order by hire_date desc limit 2,1)

题解

与第一题一样,区别在于需要进行去重和排序后获得排名信息。

3.查找当前薪水详情以及部门编号dept_no

题目描述

查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及对应部门编号dept_no

CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
​
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

答案

select salaries.emp_no,salary,salaries.from_date,salaries.to_date,dept_no from salaries,dept_manager where salaries.emp_no=dept_manager.emp_no and salaries.to_date='9999-01-01' and dept_manager.to_date='9999-01-01'

题解

简单的多表查询

4查找所有已经分配部门的员工的last_name和first_name

题目描述

查找所有已经分配部门的员工的last_name 和 first_name

CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

答案

select last_name,first_name,dept_no from employees inner join dept_emp de on employees.emp_no = de.emp_no

题解

inner join的用法

5查找所有员工的last_name和first_name以及对应部门编号dept_no

题目描述

查找所有员工的last_name和first_name以及对应部门编号dept_no,也包括展示没有分配具体部门的员工

CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_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的用法

6.查找所有员工入职时候的薪水情况

题目描述

查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序

CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

答案

select e.emp_no,s.salary from employees e left join salaries s on e.emp_no = s.emp_no where e.hire_date = s.from_date order by e.emp_no desc

题解

两表的简单连接,而后对数据进行排序

7.查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t

题目描述

查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

答案

select emp_no,count(emp_no) t 
from salaries 
group by emp_no 
having count(emp_no) > 15

题解

分组后过滤

8找出所有员工当前薪水salary情况

题目描述

找出所有员工当前(to_date='9999-01-01')具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

答案

select distinct salary
from salaries 
where to_date = '9999-01-01' 
order by salary desc

题解

distinct的作用

9获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'

题目描述

获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date='9999-01-01'

CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

答案

select dm.dept_no,dm.emp_no,s.salary 
from dept_manager dm 
left join salaries s 
on dm.emp_no = s.emp_no 
where s.to_date = '9999-01-01' 
and dm.to_date = '9999-01-01'

题解

连接后过滤

10.获取所有非manager的员工emp_no

题目描述

获取所有非manager的员工emp_no

CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

答案

select e.emp_no 
from employees e 
where e.emp_no 
not in (select emp_no from dept_manager)

题解

将属于manager的所有员工过滤

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

牛客SQL练习一 的相关文章

随机推荐

  • 城市C友会【官方牵头更多的线下交流的机会,你有怎样的期待?】

    文章目录 课前小差 长沙线下 C友会你也可以是组织者 线下交流提升价值 官方与抖音合作 23年动起来 写在最后 课前小差 哈喽 大家好 我是几何心凉 这是一份全新的专栏 唯一得到CSDN王总的授权 来对于我们每周四的绿萝时间 直达CSDN
  • Unity Editor绘制时分辨率减一

    复现环境 Unity 2021 3 16 SRP 在测试FXAA时发现一个挺恶心的bug Unity Editor中渲染的CameraTarget的分辨率 和camera pixelWidth并不相同 前者比后者少1 这导致了这样的问题 因
  • 3.C++ STL之分配器 allocator

    常用 1 vector 2 list 3 deque 4 set 5 map 6 unordered set 7 unordered map lt 扩充性 非标准 gt 定义在gnu cxx中 include
  • Linux虚拟机IP总是改变解决

    cd etc sysconfig network scripts vi ifcfg ens 改第一个红框为static 第二红框为自己想设定的静态ip 重启 reboot https blog csdn net weixin 4175840
  • 配置JAVA_HOME

    配置JAVA HOME 1 新建系统环境变量JAVA HOME变量值为C Program Files Java jdk 12 0 1 2 编辑Path添加 JAVA HOME bin 3 新建系统环境变量CLASSPATH 变量值为 Jav
  • 华为OD机试 - 通信误码(Java)

    题目描述 信号传播过程中会出现一些误码 不同的数字表示不同的误码ID 取值范围为1 65535 用一个数组记录误码出现的情况 每个误码出现的次数代表误码频度 请找出记录中包含频度最高误码的最小子数组长度 输入描述 误码总数目 取值范围为0
  • docker 报错:Error saving credentials: error storing credentials - err: exec: “docker-credential-desk

    原文 https blog csdn net Saintmm article details 117449183 spm 1001 2101 3001 6650 2 utm medium distribute pc relevant non
  • 给vim增加Vundle和NERDTree插件

    先给vim加了两个插件 windows下的插件应该放在 Users 用户名 vim目录下 然后clone一下vundle cd USERPROFILE git clone https github com gmarik Vundle vim
  • [管理与领导-71]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 职业情绪管理

    目录 前言 一 迟到 不积极的三种情况 二 工作动机 动力模型 2 1 兴趣 能力 价值感模型 2 2 动机模型 三 常见的负面的职业情绪 四 应对措施 4 1 职业中应对焦虑的策略 4 2 职业中应对厌倦的策略 4 3 职业中应对失落的策
  • 数组扁平化

    1 一维数组扁平化 let result for let i 0 i lt arr2 length i result result concat arr2 i console log result 1 2 3 4 5 6 2 多级数组 1
  • Java中Thread类run(),start()区别

    转自 Java中Thread类run start 区别 下文讲述Thread类中run start 方法的不同之处说明 如下所示 run start 方法功能的区别 1 start 方法用于启动线程 run方法只是Thread子类的一个普通
  • mysql数据库迁移到瀚高数据库,包含数据迁移、sql语法、服务启动、部署、tomcat问题整理

    文章目录 1 数据库迁移 2 数据库设置主键自增 2 1 数据库字段问题 2 2 存在即更新 2 3 清空数据表 2 4 瀚高数据库查询过程中显示转换 2 5 mybatis插入一条数据返回自增的主键值 2 6 瀚高数据库服务无法启动 3
  • 《数值分析》-- 雅可比迭代法、高斯—塞德尔迭代法

    文章目录 一 基本迭代法的格式及收敛性 1 1 迭代法思想 1 2 向量序列收敛的定义 二 迭代法的收敛与发散 三 雅可比迭代法和高斯赛德尔迭代法 3 1 雅可比迭代法 3 2 高斯 赛得尔 Gauss Seidel 迭代法 四 迭代法的收
  • python无法安装第三方库read time out_(python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, 'Read time...

    python pip安装第三方库超时问题 raise ReadTimeoutErrorself pool None Read timed out pip工具安装 百度经验链接 pip安装及环境变量配置 pip下载超时处理 aise Read
  • Apache Shiro 简介

    本文转载自 点击打开链接 1 1 简介 Apache Shiro是Java的一个安全框架 目前 使用Apache Shiro的人越来越多 因为它相当简单 对比Spring Security 可能没有Spring Security做的功能强大
  • ztree 修改样式_zTree样式修改

    ztree挺好用的 不过公司美工设计的行政树图稿一般都比ztree原生的样式要好看的多 所以只能自己单独对样式进行修改 目前样式倒是修改好了 只能不能根据层级动态匹配样式 每个层级的被选中样式需要对两个属性单独设置 具体修改地方下面代码中有
  • java里%是什么_java里"."是什么意思?

    展开全部 lt 数学意义 在数字没有溢出的前提下 对于正数和负数 左移一位都相当于乘以2的1次方 左移n位就相当于乘以2的n次方 计算 3 lt lt 2 3 lt lt 2 则是将数字3左移2位 1 首先把3转换为二进制数字0000 00
  • python机器学习手写算法系列——逻辑回归

    从机器学习到逻辑回归 今天 我们只关注机器学习到线性回归这条线上的概念 别的以后再说 为了让大家听懂 我这次也不查维基百科了 直接按照自己的理解用大白话说 可能不是很严谨 机器学习就是机器可以自己学习 而机器学习的方法就是利用现有的数据和算
  • SQL11 高级操作符练习(1)

    描述 题目 现在运营想要找到男性且GPA在3 5以上 不包括3 5 的用户进行调研 请你取出相关数据 示例 user profile id device id gender age university gpa 1 2138 male 21
  • 牛客SQL练习一

    1 题目描述 查找最晚入职员工的所有信息 CREATE TABLE employees emp no int 11 NOT NULL birth date date NOT NULL first name varchar 14 NOT NU