Mysql数据库实战题(每日打卡)
文章平均质量分 58
记录分享牛客网SQL数据库实战题目解答,并包含题目考察知识点讲解。其中解答为个人解法,如有不足,请指出。------作者:sun
Dream丶Killer
学如逆水行舟,不进则退;心似平原走马,易放难收。
展开
-
(中等)SQL练习36:创建一个actor_name表
SQL练习36:创建一个actor_name表题目描述考察知识点解题思路题目描述对于如下表 actor,其对应的数据为:请你创建一个 actor_name 表,并且将 actor 表中的所有 first_name 以及 last_name 导入该表。actor_name 表结构如下:考察知识点通过查询结果来填充创建的表。Mysql 中创建表的三种方式:1️⃣ 直接创建CREATE TABLE IF NOT EXISTS actor(first_name varchar(45) N原创 2021-08-05 19:25:39 · 782 阅读 · 13 评论 -
(中等)SQL练习35:批量插入数据,不使用replace操作
SQL练习35:批量插入数据,不使用replace操作题目描述考察知识点解题思路题目描述题目已经先执行了如下语句: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 N原创 2021-08-05 19:07:17 · 410 阅读 · 5 评论 -
SQL练习76:考试分数(五)
SQL练习76:考试分数(五)题目链接:牛客网题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分…第8行表示用户id为8的用户选择了B语言岗位并且考了9999分请你写一个sql语句查询各个岗位分数的中位数位置上的所有grade信息,并且按id升序排序,结果如下:解释:第1行表示C++岗位的中位数位置上的为用户id为2,分数为10000,在C++岗位里面排名是第2第2,3行表示Java岗位的中位数位置上的为用户原创 2021-02-15 21:08:54 · 645 阅读 · 0 评论 -
SQL练习75:考试分数(四)
SQL练习75:考试分数(三)题目链接:牛客网题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分…第8行表示用户id为8的用户选择了B语言岗位并且考了9999分请你写一个sql语句查询各个岗位分数升序排列之后的中位数位置的范围,并且按job升序排序,结果如下:解释:第1行表示C++岗位的中位数位置范围为[2,2],也就是2。因为C++岗位总共3个人,是奇数,所以中位数位置为2是正确的(即位置为2的10000是中原创 2021-02-15 20:39:52 · 583 阅读 · 1 评论 -
SQL练习74:考试分数(三)
SQL练习74:考试分数(三)题目链接:牛客网题目描述牛客每次举办企业笔试的时候,企业一般都会有不同的语言岗位,比如C++工程师,JAVA工程师,Python工程师,每个用户笔试完有不同的分数,现在有一个分数(grade)表简化如下:第1行表示用户id为1的选择了language_id为1岗位的最后考试完的分数为12000,…第7行表示用户id为7的选择了language_id为2岗位的最后考试完的分数为11000,不同的语言岗位(language)表简化如下:请你找出每个岗位分数排名前原创 2021-02-15 16:40:26 · 1742 阅读 · 1 评论 -
SQL练习73:考试分数(二)
SQL练习73:考试分数(二)题目链接:牛客网题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分…第8行表示用户id为8的用户选择了前端岗位并且考了9999分请你写一个sql语句查询用户分数大于其所在工作(job)分数的平均分的所有grade的属性,并且以id的升序排序,如下:解法先获取GROUP BY分组获得各个job的平均分数avg,再将结果与grade表连接起来。查找avg<score的数据。S原创 2021-02-15 16:16:49 · 819 阅读 · 1 评论 -
SQL练习72:考试分数(一)
SQL练习72:考试分数(一)题目链接:牛客网题目描述牛客每次考试完,都会有一个成绩表(grade),如下:第1行表示用户id为1的用户选择了C++岗位并且考了11001分…第8行表示用户id为8的用户选择了JS岗位并且考了9999分请你写一个sql语句查询各个岗位分数的平均数,并且按照分数降序排序,结果保留小数点后面3位(3位之后四舍五入):解法ROUND函数保留三位小数,AVG(score)获取平均分数,最后按照avg降序输出。SELECT job, ROUND(AVG(sco原创 2021-02-15 16:13:28 · 2361 阅读 · 3 评论 -
SQL练习71:牛客每个人最近的登录日期(六)
SQL练习70:牛客每个人最近的登录日期6题目链接:牛客网题目描述牛客每天有很多人登录,请你统计一下牛客每个用户查询刷题信息,包括: 用户的名字,以及截止到某天,累计总共通过了多少题。 不存在没有登录却刷题的情况,但是存在登录了没刷题的情况,不会存在刷题表里面,有提交代码没有通过的情况,但是会记录在刷题表里,只不过通过数目是0。有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网。。。第5行表示id为3的用户在2020原创 2021-02-15 15:50:00 · 2600 阅读 · 5 评论 -
SQL练习70:牛客每个人最近的登录日期(五)
SQL练习70:牛客每个人最近的登录日期5题目链接:牛客网题目描述牛客每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网,因为是第1次登录,所以是新用户。。。第4行表示id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网,因为是第2次登录,所以是老用户。。最后1行表示id为4的用户在2020-10-15使用了客户端id为1的设备登原创 2021-02-15 15:26:20 · 518 阅读 · 0 评论 -
SQL练习69:牛客每个人最近的登录日期(四)
SQL练习68:牛客每个人最近的登录日期4题目链接:牛客网题目描述牛客每天有很多人登录,请你统计一下牛客每个日期登录新用户个数,有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网,因为是第1次登录,所以是新用户。。。第4行表示id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网,因为是第2次登录,所以是老用户。。最后1行表示id为4的用户在2020-10-15使用了客户端id为1的设备登录了原创 2021-02-13 12:37:49 · 475 阅读 · 1 评论 -
SQL练习68:牛客每个人最近的登录日期(三)
@TOC题目链接:牛客网题目描述牛客每天有很多人登录,请你统计一下牛客新登录用户的次日成功的留存率,有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了牛客网。。。第4行表示id为3的用户在2020-10-12使用了客户端id为2的设备登录了牛客网。。。最后1行表示id为1的用户在2020-10-14使用了客户端id为2的设备登录了牛客网请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第原创 2021-02-13 11:48:41 · 524 阅读 · 1 评论 -
SQL练习67:牛客每个人最近的登录日期(二)
@TOC题目链接:牛客网题目描述牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天,用的是什么设备.有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网。。。第4行表示id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网还有一个用户(user)表,简况如下:还有一个客户端(client)表,简况如下:请你写出一个sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用原创 2021-02-12 20:48:57 · 2602 阅读 · 2 评论 -
SQL练习66:牛客每个人最近的登录日期(一)
@TOC题目链接:牛客网题目描述牛客每天有很多人登录,请你统计一下牛客每个用户最近登录是哪一天。有一个登录(login)记录表,简况如下:第1行表示id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网。。。第4行表示id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网请你写出一个sql语句查询每个用户最近一天登录的日子,并且按照user_id升序排序,上面的例子查询结果如下:查询结果表明:user_id为2的最近的登录日期在2020-10-原创 2021-02-12 20:42:47 · 533 阅读 · 0 评论 -
SQL练习65:异常的邮件概率
SQL练习65:异常的邮件概率题目链接:牛客网题目描述现在有一个需求,让你统计正常用户发送给正常用户邮件失败的概率:有一个邮件(email)表,id为主键, type是枚举类型,枚举成员为(completed,no_completed),completed代表邮件发送是成功的,no_completed代表邮件是发送失败的。简况如下:第1行表示为id为2的用户在2020-01-11成功发送了一封邮件给了id为3的用户;…第3行表示为id为1的用户在2020-01-11没有成功发送一封邮件给了i原创 2021-02-12 20:40:00 · 2479 阅读 · 4 评论 -
SQL练习64:找到每个人的任务
SQL练习64:找到每个人的任务题目链接:牛客网题目描述有一个person表,主键是id,如下:有一个任务(task)表如下,主键也是id,如下:请你找到每个人的任务情况,并且输出出来,没有任务的也要输出,而且输出结果按照person的id升序排序,输出情况如下:解法本题要注意的两点:1.person中id对应task表中的person_id列。2.保留没有任务的员工:使用左外连接的方式保留person表的全部信息。SELECT p.id, name, contentFROM pe原创 2021-02-12 20:33:31 · 400 阅读 · 0 评论 -
SQL练习63:刷题通过的题目排名
SQL练习63:刷题通过的题目排名题目链接:牛客网题目描述在牛客刷题有一个通过题目个数的(passing_number)表,id是主键,简化如下:第1行表示id为1的用户通过了4个题目;…第6行表示id为6的用户通过了4个题目;请你根据上表,输出通过的题目的排名,通过题目个数相同的,排名相同,此时按照id升序排列,数据如下:id为5的用户通过了5个排名第1,id为1和id为6的都通过了2个,并列第2解法根据题目的要求可以先通过子查询获得id和t_rank(根据number降序排序原创 2021-02-11 20:08:57 · 2239 阅读 · 5 评论 -
SQL练习62:出现三次以上相同积分的情况
SQL练习62:出现三次以上相同积分的情况题目链接:牛客网题目描述在牛客刷题的小伙伴们都有着牛客积分,积分(grade)表简化可以如下:id为用户主键id,number代表积分情况,让你写一个sql查询,积分表里面出现三次以及三次以上的积分,查询结果如下:解法根据题目的要求按照number分组,然后使用COUNT统计每组的id个数,选出满足条件(大于等于3)的数据。SELECT numberFROM gradeGROUP BY numberHAVING COUNT(id) >原创 2021-02-11 19:57:33 · 501 阅读 · 1 评论 -
SQL练习61:对于employees表中,给出奇数行的first_name
SQL练习61:对于employees表中,给出奇数行的first_name题目链接:牛客网题目描述对于employees表中,输出first_name排名(按first_name升序排序)为奇数的first_name。CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT NULL,`last_name` varchar(16) N原创 2021-02-11 17:29:06 · 480 阅读 · 1 评论 -
SQL练习60:统计salary的累计和running_total
SQL练习60:统计salary的累计和running_total题目链接:牛客网题目描述按照salary的累计和running_total,其中running_total为前N个当前( to_date = '9999-01-01')员工的salary累计和,其他以此类推。 具体结果如下Demo展示。CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT原创 2021-02-11 17:19:47 · 274 阅读 · 1 评论 -
SQL练习59:获取有奖金的员工相关信息
SQL练习58:获取有奖金的员工相关信息题目链接:牛客网题目描述获取有奖金的员工相关信息。给出emp_no、first_name、last_name、奖金类型btype、对应的当前薪水情况salary以及奖金金额bonus。 bonus类型btype为1其奖金为薪水salary的10%,btype为2其奖金为薪水的20%,其他类型均为薪水的30%。 当前薪水表示to_date='9999-01-01'。CREATE TABLE `employees` (`emp_no` int(11) NOT N原创 2021-02-10 16:26:46 · 931 阅读 · 2 评论 -
SQL练习57:使用含有关键字exists查找未分配具体部门的员工的所有信息
SQL练习57:使用含有关键字exists查找未分配具体部门的员工的所有信息题目链接:牛客网题目描述使用含有关键字exists查找未分配具体部门的员工的所有信息。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原创 2021-02-10 16:18:00 · 1375 阅读 · 5 评论 -
SQL练习56:获取所有员工的emp_no
SQL练习56:获取所有员工的emp_no题目链接:牛客网题目描述获取所有员工的emp_no、部门编号dept_no以及对应的bonus类型btype和received,没有分配奖金的员工不显示对应的bonus类型btype和received。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 NUL原创 2021-02-10 16:10:59 · 1413 阅读 · 5 评论 -
SQL练习55:分页查询employees表,每5行一页,返回第2页的数据
SQL练习55:分页查询employees表,每5行一页,返回第2页的数据题目链接:牛客网题目描述分页查询employees表,每5行一页,返回第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 N原创 2021-02-10 16:04:54 · 1120 阅读 · 1 评论 -
SQL练习54:查找排除当前最大、最小salary之后的员工的平均工资avg_salary
SQL练习53:按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees题目链接:牛客网题目描述查找排除最大、最小salary之后的当前(to_date = '9999-01-01' )员工的平均工资avg_salary。CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NUL原创 2021-02-09 22:39:02 · 830 阅读 · 1 评论 -
SQL练习53:按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees
SQL练习53:按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees题目链接:牛客网题目描述按照dept_no进行汇总,属于同一个部门的emp_no按照逗号进行连接,结果给出dept_no以及连接出的结果employees。CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT原创 2021-02-09 22:34:55 · 422 阅读 · 1 评论 -
SQL练习52:获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列
SQL练习52:获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列题目链接:牛客网题目描述获取Employees中的first_name,查询按照first_name最后两个字母,按照升序进行排列。CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar(14) NOT NULL,`last_na原创 2021-02-09 22:30:09 · 2589 阅读 · 2 评论 -
SQL练习48:将所有获取奖金的员工当前的薪水增加10%
SQL练习48:将所有获取奖金的员工当前的薪水增加10%题目链接:牛客网题目描述请你写出更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。(emp_bonus里面的emp_no都是当前获奖的所有员工)。create table emp_bonus(emp_no int not null,btype smallint not null);CREATE TABLE `salaries` (`emp_no` int(11) NOT N原创 2021-02-08 22:25:01 · 2275 阅读 · 1 评论 -
SQL练习44:将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现
SQL练习44:将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现题目链接:牛客网题目描述将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现,直接使用update会报错。CREATE TABLE titles_test ( id int(11) not null primary key, emp_no int(11) NOT N原创 2021-02-08 22:09:22 · 395 阅读 · 3 评论 -
SQL练习43:将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01
SQL练习43:将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01题目链接:牛客网题目描述将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01。CREATE TABLE IF NOT EXISTS titles_test (id int(11) not null primary key,emp_no int(11) NOT NULL,title varchar(50) NO原创 2021-02-08 22:03:16 · 1632 阅读 · 2 评论 -
SQL练习42:删除emp_no重复的记录,只保留最小的id对应的记录。
SQL练习42:删除emp_no重复的记录,只保留最小的id对应的记录。题目链接:牛客网题目描述删除emp_no重复的记录,只保留最小的id对应的记录。CREATE TABLE IF NOT EXISTS titles_test (id int(11) not null primary key,emp_no int(11) NOT NULL,title varchar(50) NOT NULL,from_date date NOT NULL,to_date date DEFAULT NUL原创 2021-02-07 15:07:41 · 1568 阅读 · 4 评论 -
SQL练习41:构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中
SQL练习39:构造一个触发器audit_log,在向employees表中插入一条数据的时候,触发插入相关的数据到audit中题目链接:牛客网题目描述构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。CREATE TABLE employees_test(ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),原创 2021-02-07 14:02:26 · 1320 阅读 · 3 评论 -
SQL练习39:针对上面的salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005
SQL练习39:针对上面的salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005题目链接:牛客网题目描述针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引。CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`salary` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NO原创 2021-02-07 13:44:17 · 632 阅读 · 1 评论 -
SQL练习38:针对actor表创建视图actor_name_view
SQL练习38:针对actor表创建视图actor_name_view题目链接:牛客网题目描述针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:CREATE TABLE actor ( actor_id smallint(5) NOT NULL PRIMARY KEY, first_name varcha原创 2021-02-07 12:14:00 · 1490 阅读 · 4 评论 -
SQL练习37:对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname
SQL练习37:对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname题目链接:牛客网题目描述针对如下表actor结构创建索引:(注:在 SQLite中,除了重命名表和在已有的表中添加列,ALTER TABLE命令不支持其他操作,mysql支持ALTER TABLE创建索引)。CREATE TABLE actor ( actor_id smallint(5) NOT NULL PRIMARY KEY, f原创 2021-02-06 14:54:37 · 447 阅读 · 2 评论 -
SQL练习34:批量插入数据
SQL练习34:批量插入数据题目链接:牛客网题目描述题目已经先执行了如下语句: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)请你对于表ac原创 2021-02-06 13:50:42 · 419 阅读 · 3 评论 -
SQL练习33:创建一个actor表,包含如下列信息
SQL练习33:创建一个actor表,包含如下列信息题目链接:牛客网题目描述创建一个actor表,包含如下列信息。列表类型是否为NULL含义actor_idsmallint(5)not null主键idfirst_namevarchar(45)not null名字last_namevarchar(45)not null姓氏last_updatedatenot null日期解法CREATE TABLE IF NOT EXIST原创 2021-02-06 13:42:03 · 317 阅读 · 1 评论 -
(简单)SQL练习32:将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分
SQL练习31:将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分题目链接:牛客网题目描述将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分(注:sqllite,字符串拼接为 || 符号,不支持concat函数,mysql支持concat函数)。CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL,`birth_date原创 2021-02-06 13:29:33 · 2442 阅读 · 3 评论 -
(中等)SQL练习30:使用子查询的方式找出属于Action分类的所有电影对应的title,description
SQL练习30:使用子查询的方式找出属于Action分类的所有电影对应的title,description题目链接:牛客网题目描述你能使用子查询的方式找出属于Action分类的所有电影对应的title, description吗。film表字段说明film_id电影idtitle电影名称description电影描述信息category表字段说明category_id电影分类idname电影分类名称last_upda原创 2021-02-05 20:19:22 · 503 阅读 · 1 评论 -
(中等)SQL练习29:使用join查询方式找出没有分类的电影id以及名称
SQL练习29:使用join查询方式找出没有分类的电影id以及名称题目链接:牛客网题目描述使用join查询方式找出没有分类的电影id以及名称。film表字段说明film_id电影idtitle电影名称description电影描述信息category表字段说明category_id电影分类idname电影分类名称last_update电影分类最后更新时间film_category表字段说明原创 2021-02-05 17:04:17 · 1186 阅读 · 2 评论 -
(困难)SQL练习28:查找描述信息中包括robot的电影对应的分类名称以及电影数目
SQL练习28:查找描述信息中包括robot的电影对应的分类名称以及电影数目题目链接:牛客网题目描述查找描述信息(film.description)中包含robot的电影对应的分类名称(category.name)以及电影数目(count(film.film_id)),而且还需要该分类包含电影总数量(count(film_category.category_id)) >=5部。film表字段说明film_id电影idtitle电影名称description原创 2021-02-05 16:27:36 · 1836 阅读 · 3 评论