题目描述
1.查找最晚入职员工的所有信息

create database practice;
use practice;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`)
);insert into employees values(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15');
insert into employees values(10007,'1958-03-29','Linda','Brown','M','1992-09-10');
insert into employees values(10006,'1960-05-03','Lili','Brown','M','1994-10-10');
insert into employees values(10005,'1962-04-04','Nancy','Brown','M','1993-04-23');
insert into employees values(10004,'1966-08-18','Mike','Smith','F','1996-02-10');


答案:

select * from employees order by hire_date desc limit 1;
/* 使用limit与offset关键字。offset是跳过几行元素,
例如找第二位入职的员工:select * from employees order by hire_date limit 1 offset 1;
按入职时间排序后,跳过第一行。  */
select * from employees order by hire_date desc limit 1 offset 0;
/* 使用limit关键字 从第0条记录 向后读取一个,也就是第一条记录 。左开右闭!
例如找最后两位入职的员工:select * from employees order by hire_date desc limit 0,2;
*/
select * from employees order by hire_date desc limit 0,1;
/* 使用子查询,最后一天的时间有多个员工信息 */
select * from employees where hire_date=(select max(hire_date) from employees);

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

/* LIMIT m,n : 表示从第m+1条开始,取n条数据;LIMIT n :表示从第0条开始,取n条数据,是limit(0,n)的缩写。*/
select * from employees order by hire_date desc limit 2,1;
/*使用limit与offset关键字。offset是跳过几行元素,*/
select * from employees order by hire_date desc limit 1 offset 2;
/*需要加distinct去重。
假设 5-23(入职最晚日期)入职的有a,b,c 3人;5-22(入职第二晚日期)入职的有d,e 2人;5-21(入职倒数第三晚)入职的有f,g,h 3人;5-21前入职的若干...
若 不加distinct去重,那么按照日期倒序,limit 2,1(从倒数第2行开始,取一条数据)的查询结果为 5-23
加了distinct去重,会按入职日期进行分组,多个相同入职日期会分为一组,这样limit 2,1的结果即为 5-21。*/
select * from employees
where hire_date = (select distinct hire_date from employees order by hire_date desc limit 2,1
)

3.查找各个部门当前(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.*,dept_manager.dept_no
from salaries (inner) join dept_manager
on dept_manager.emp_no = salaries.emp_no
and(where) dept_manager.to_date = '9999-01-01'
and salaries.to_date = '9999-01-01';select s.*,d.dept_no
from salaries as s
(inner)join dept_manager as d
on s.emp_no=d.emp_no
where(and) s.to_date='9999-01-01'
and d.to_date='9999-01-01';select s.*,d.dept_no
from salaries s,dept_manager d
where s.to_date='9999-01-01'
and d.to_date='9999-01-01'
and s.emp_no=d.emp_no;

注:若答案为
select salaries.*,dept_manager.dept_no
from salaries
left join dept_manager
on salaries.emp_no=dept_manager.emp_no
and dept_manager.to_date=‘9999-01-01’
and salaries.to_date=‘9999-01-01’;
则结果如下图所示:

4.查找所有已经分配部门的员工的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 employees.last_name,first_name,dept_emp.dept_no
from employees
inner join dept_emp
on employees.emp_no=dept_emp.emp_no;select e.last_name,e.first_name,d.dept_no
from dept_emp as d
inner joinemployees as e
one.emp_no = d.emp_no;

5.查找所有员工的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 e.last_name,e.first_name,d.dept_no
from employees e
left join dept_emp d
on e.emp_no=d.emp_no

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
fromemployees as e
inner joinsalaries as s
on e.emp_no = s.emp_no
and s.from_date=e.hire_date
order bye.emp_no desc;select e.emp_no,s.salary
from employees as e,salaries as s
where e.emp_no=s.emp_no
and e.hire_date=s.from_date
order by e.emp_no desc;

7.查找薪水涨幅超过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) as t
from salaries
group by emp_no having t>15

8.找出所有员工当前(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效率不高,大数据量的时候都
禁止用distinct,建议用group by解决重复问题。*/
select salary
from salaries
where to_date='9999-01-01'
group by salary
order by salary desc;

9.获取所有部门当前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 d.dept_no,d.emp_no,s.salary
from dept_manager as d
joinsalaries as s
ond.emp_no=s.emp_no
and d.to_date = '9999-01-01'
and s.to_date = '9999-01-01';select dept_manager.dept_no,dept_manager.emp_no,salaries.salary
from salaries,dept_manager
where dept_manager.to_date = '9999-01-01'
and salaries.to_date = '9999-01-01'
and dept_manager.emp_no = salaries.emp_no;

10.获取所有非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));
输出描述:

/*使用NOT IN选出在employees但不在dept_manager中的emp_no记录*/
select emp_no
fromemployees
whereemp_no
not in (select emp_no from dept_manager)/*先使用LEFT JOIN连接两张表,再从此表中选出dept_no值为NULL对应的emp_no记录*/
select e.emp_no
from employees e
left join dept_manager d
on e.emp_no = d.emp_no
where d.emp_no is null;

牛客网sql题详解1-10相关推荐

  1. 牛客网sql题详解41-50

    41.删除emp_no重复的记录,只保留最小的id对应的记录. CREATE TABLE IF NOT EXISTS titles_test ( id int(11) not null primary ...

  2. 牛客网sql题详解11-20

    11.获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'. 结果第一列给出当前员工的emp_no,第二列给出其manage ...

  3. 牛客网sql题详解31-40

    31.将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 CREATE TABLE employees ( emp_no int(11) ...

  4. 牛客网sql题详解21-30

    21.统计各个部门的工资记录数,给出部门编码dept_no.部门名称dept_name以及次数sum CREATE TABLE departments ( dept_no char(4) NOT NU ...

  5. 牛客网-SQL题库笔记

    牛客网-SQL题库笔记 01.最晚入职员工的所有信息 02.查找入职员工时间排名倒数第三的员工所有信息 03.查找各个部门当前领导当前薪水详情以及其对应部门编号 04.查找所有已经分配部门的员工的la ...

  6. 牛客网sql题库(1-30题)—— 个人答案与过程解析

    本篇博客分享一下我在牛客网sql题库刷题时,自己敲出来的结果.结果均通过了牛客网的结果验证. 具体的题目就不放在博客中了,感兴趣可以自行去搜索牛客网,找到sql题库在线编程 每道题下面都有我自己写的题 ...

  7. 牛客网数据开发题库_牛客网SQL题库NO.32~40

    不要问为什么没有31题,大概被牛客吞掉了吧,哈哈哈哈 SQL 32[简单] 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分 CREA ...

  8. 牛客网---Java题库(1~10)

    1.什么是JAVA虚拟机?为什么JAVA被称作平台无关的编程语言? java虚拟机是一个可以执行java字节码的虚拟机进程.java源文件被编译成能够java虚拟机执行的字节码文件.java被设计成允 ...

  9. 牛客网SQL刷题笔记(MySQL)

    牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...

最新文章

  1. Intel HAXM is required to run this AVD VT-x is disabled in BIOS的处理方法
  2. Outlook收不到邮件, 或者收邮件很慢, 怎么办?
  3. iOS与Opencv的探秘之Opencv认识,适配Xcode
  4. sublime主题安装
  5. 工业标准的品质也已成为开源世界中的范例之一
  6. VAE-《Auto-Encoding Variational Bayes》----Section2部分的有关理解
  7. vue点击按钮打开下拉菜单_vue 点击弹出下拉菜单 点击其他页面收回菜单
  8. VS2008的绿色精简版,只有VC2008部分
  9. google服务框架 闪退_华为的谷歌服务打不开怎么办?
  10. 计算机温度压力测试,整机性能与温度压力测试
  11. Tenorshare UltData(苹果数据恢复软件)v8.5.3官方版
  12. 【YOLO】物体识别算法的核心思想
  13. python热搜排行功能_手把手教你用Python+Pyecharts让微博热搜榜动起来
  14. office使用技巧大全
  15. 暗黑精灵4黑苹果安装纪录
  16. matlab电压灵敏度矩阵,一种基于线性化潮流的配电网灵敏度计算方法与流程
  17. 计算机识别技术检测交通标志,基于计算机视觉的交通标志检测与识别算法研究...
  18. android第二次点击应用,就报App isn't installed 解决方法
  19. NOJ1076 机器狗组装费用 贪心
  20. 2021.1月书单,读后感简述:《人生的智慧》、《结构性改革》

热门文章

  1. LESS命令介绍以及使用
  2. 信息学奥赛一本通(c++版)1000
  3. android源码项目(绝对的学习宝典)
  4. SQL Server 中的时间的加减和时间的比较和时间的转换
  5. 使用云之讯API借口发送短信(Java,Json版)
  6. c++复习日记2 虚函数和多态性
  7. [职场开放日活动]网龙嘉宾回答网友提问-合集
  8. 地堡中的光照问题_扑扑和火力地堡的更新
  9. Airbnb爱彼迎2021年第一季度营收同比增长5%
  10. 最新vue-cli 2.9.1的webpack存在问题