8.MySQL知识巩固-牛客网练习题

 

目录

 SQL228 批量插入数据

描述

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

描述

示例1

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

示例1

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

SQL201查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

描述


 SQL228 批量插入数据

如果忘记了可以参考我这一篇文章

6.MySQL的增删改查-CSDN博客

批量插入数据_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/51c12cea6a97468da149c04b7ecf362e?tpId=82&tqId=29802&tPage=2&rp=&ru=%2Fta%2Fsql&qru=%2Fta%2Fsql%2Fquestion-ranking

描述

对于表actor批量插入如下数据
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))

actor_idfirst_namelast_namelast_update
1PENELOPEGUINESS2006-02-15 12:34:33
2NICKWAHLBERG2006-02-15 12:34:33

输入:

drop table if exists actor;
CREATE TABLE actor (
   actor_id  smallint(5)  NOT NULL PRIMARY KEY,
   first_name  varchar(45) NOT NULL,
   last_name  varchar(45) NOT NULL,
   last_update  DATETIME NOT NULL)

输出:

1|PENELOPE|GUINESS|2006-02-15 12:34:33
2|NICK|WAHLBERG|2006-02-15 12:34:33

插入语句语法:

insert into 表名 (字段名,,,,) values (要插入的数据字段对齐,,,)
# INSERT INTO actor(actor_id,
#                   first_name,
#                   last_name,
#                   last_update)
# VALUES(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),
#       (2,'NICK','WAHLBERG','2006-02-15 12:34:33');



insert into actor VALUES(1,"PENELOPE","GUINESS","2006-02-15 12:34:33"),
(2,"NICK","WAHLBERG","2006-02-15 12:34:33");

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

如果忘记了可以参考我这篇文章:

6.MySQL的增删改查-CSDN博客

找出所有员工当前薪水salary情况_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/ae51e6d057c94f6d891735a48d1c2397?tpId=82&tqId=29760&tPage=1&rp=&ru=%2Fta%2Fsql&qru=%2Fta%2Fsql%2Fquestion-ranking

描述

有一个薪水表,salaries简况如下:

emp_no salaryfrom_date to_date
10001725272002-06-229999-01-01
10002725272001-08-029999-01-01
10003433112001-12-019999-01-01

请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示,以上例子输出如下:

salary
72527
43311

示例1

输入:

drop table if exists  `salaries` ; 
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`));
INSERT INTO salaries VALUES(10001,72527,'2002-06-22','9999-01-01');
INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01');
INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01');

输出:

72527
43311

这是答案哦

Select distinct salary from salaries order by salary desc;

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

有一个员工employees表简况如下:

emp_nobirth_datefirst_namelast_namegenderhire_date
100011953-09-02GeorgiFacello   M1986-06-26 
100021964-06-02Bezalel    Simmel    F    1985-11-21
100031959-12-03Parto      Bamford   M    1986-08-28
100041954-05-01Christian  Koblick   M    1986-12-01 

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

emp_nobirth_datefirst_namelast_namegenderhire_date
100041954-05-01Christian  Koblick   M    1986-12-01 

示例1

输入:

drop table if exists  `employees` ; 
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(10001,'1953-09-02','Georgi','Facello','M','1986-06-26');
INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21');
INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28');
INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01');
INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12');
INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02');
INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10');
INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15');
INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18');
INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24');
INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');

输出:

10008|1958-02-19|Saniya|Kalloufi|M|1994-09-15

答案在这哦

 方法一:我们可以按照入职时间进行降序,入职最晚的就是时间最大的,

从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
select * from employees order by hire_date desc limit 1;

方法二:

-- s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
select * from employees order by hire_date desc limit 1 offset 0;

方法三:

我们可以使用子查询进行操作

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

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

查找入职员工时间排名倒数第三的员工所有信息_牛客题霸_牛客网 (nowcoder.com)icon-default.png?t=N7T8https://www.nowcoder.com/practice/ec1ca44c62c14ceb990c3c40def1ec6c?tpId=82&tqId=29754&tPage=1&rp=&ru=%2Fta%2Fsql&qru=%2Fta%2Fsql%2Fquestion-ranking

有一个员工employees表简况如下:

emp_nobirth_datefirst_namelast_namegenderhire_date
100011953-09-02GeorgiFacelloM1986-06-26
100021964-06-02BezalelSimmelF1985-11-21
100031959-12-03PartoBamfordM1986-08-28
100041954-05-01ChristianKoblickM1986-12-01

请你查找employees里入职员工时间排名倒数第三的员工所有信息,以上例子输出如下:

emp_nobirth_datefirst_namelast_namegenderhire_date
100011953-09-02GeorgiFacelloM1986-06-26

注意:可能会存在同一个日期入职的员工,所以入职员工时间排名倒数第三的员工可能不止一个。

既然不止一个人那我们就选择distinct关键字进行去重

SELECT * 
FROM employees
WHERE hire_date = (
    SELECT DISTINCT hire_date 
    FROM employees
    ORDER BY hire_date DESC      
    LIMIT 1 OFFSET 2              
);    

SQL201查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t

描述

有一个薪水表,salaries简况如下:

emp_nosalaryfrom_dateto_date
10001601171986-06-261987-06-26
10001

62102

1987-06-261988-06-25
10001660741988-06-251989-06-25
10001665961989-06-251990-06-25
10001669611990-06-251991-06-25
10001710461991-06-251992-06-24
10001743331992-06-241993-06-24
10001752861993-06-241994-06-24
10001759941994-06-241995-06-24
10001768841995-06-241996-06-23
10001800131996-06-231997-06-23
10001810251997-06-231998-06-23
10001810971998-06-231999-06-23
10001849171999-06-232000-06-22
10001851122000-06-222001-06-22
10001850972001-06-222002-06-22
10002725271996-08-031997-08-03

请你查找薪水记录超过15条的员工号emp_no以及其对应的记录次数t,以上例子输出如下:

emp_not
1000116
select
    emp_no,
    count(emp_no) as t
from
    salaries
group by
    emp_no
having
    t > 15;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对自己好点儿i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值