Score
0
Watch 33 Star 174 Fork 48

xuthus / 数据库SQL实战SQLMIT

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

数据库SQL实战

选项 说明
:monkey_face: 通过
:see_no_evil: 未通过或不符合MySQL5.7语法规范
编号 分类 标题 提交
1 过滤 查找最晚入职员工的所有信息 :monkey_face:
2 过滤 查找入职员工时间排名倒数第三的员工所有信息 :monkey_face:
3 连接 查找当前薪水详情以及部门编号dept_no :monkey_face:
4 连接 查找所有已经分配部门的员工的last_name和first_name :monkey_face:
5 连接 查找所有员工的last_name和first_name以及对应部门编号dept_no :monkey_face:
6 连接 查找所有员工入职时候的薪水情况 :monkey_face:
7 分组 查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t :monkey_face:
8 过滤 找出所有员工当前薪水salary情况 :monkey_face:
9 连接 获取所有部门当前manager的当前薪水情况,给出dept_no, emp_no以及salary,当前表示to_date=9999-01-01 :monkey_face:
10 过滤 获取所有非manager的员工emp_no :monkey_face:
11 连接 获取所有员工当前的manager :monkey_face:
12 分组聚合 获取所有部门中当前员工薪水最高的相关信息 :see_no_evil:
13 分组聚合 从titles表获取按照title进行分组 :monkey_face:
14 分组聚合 从titles表获取按照title进行分组 :monkey_face:
15 过滤 查找employees表 :monkey_face:
16 分组聚合 统计出当前各个title类型对应的员工当前薪水对应的平均工资 :monkey_face:
17 过滤 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary :monkey_face:
18 连接 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary,不准使用order by :monkey_face:
19 连接 查找所有员工的last_name和first_name以及对应的dept_name :monkey_face:
20 过滤 查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth :monkey_face:
21 连接 查找所有员工自入职以来的薪水涨幅情况 :monkey_face:
22 分组聚合 统计各个部门对应员工涨幅的次数总和 :monkey_face:
23 排名 对所有员工的薪水按照salary进行按照1-N的排名 :see_no_evil:
24 连接 获取所有非manager员工当前的薪水情况 :monkey_face:
25 连接 获取员工其当前的薪水比其manager当前薪水还高的相关信息 :monkey_face:
26 连接和分组 汇总各个部门当前员工的title类型的分配数目 :monkey_face:
27 连接 给出每个员工每年薪水涨幅超过5000的员工编号emp_no :see_no_evil:
28 连接 查找描述信息中包括robot的电影对应的分类名称以及电影数目,而且还需要该分类对应电影数量>=5部 :monkey_face:
29 连接 使用join查询方式找出没有分类的电影id以及名称 :monkey_face:
30 子查询 使用子查询的方式找出属于Action分类的所有电影对应的title,description :monkey_face:
31 优化 获取 select * from employees 对应的执行计划 :monkey_face:
32 字符串处理 将employees表的所有员工的last_name和first_name拼接起来作为Name :see_no_evil:
33 表操作 创建一个actor表,包含如下列信息 :see_no_evil:
34 数据操作 批量插入数据 :monkey_face:
35 数据操作 批量插入数据,不使用replace操作 :see_no_evil:
36 表和数据操作 创建一个actor_name表 :monkey_face:
37 索引 对first_name创建唯一索引uniq_idx_firstname :monkey_face:
38 视图 针对actor表创建视图actor_name_view :monkey_face:
39 索引 针对上面的salaries表emp_no字段创建索引idx_emp_no :see_no_evil:
40 表操作 在last_update后面新增加一列名字为create_date :see_no_evil:
41 触发器 构造一个触发器audit_log :monkey_face:
42 数据操作 删除emp_no重复的记录,只保留最小的id对应的记录 :monkey_face:
43 数据操作 将所有to_date为9999-01-01的全部更新为NULL :monkey_face:
44 数据操作 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005 :monkey_face:
45 表操作 将titles_test表名修改为titles_2017 :monkey_face:
46 外键 在audit表上创建外键约束,其emp_no对应employees_test表的主键id :monkey_face:
47 连接 如何获取emp_v和employees有相同的数据no :monkey_face:
48 数据操作 将所有获取奖金的员工当前的薪水增加10% :monkey_face:
49 字符串处理 针对库中的所有表生成select count(*)对应的SQL语句 :see_no_evil:
50 字符串处理 将employees表中的所有员工的last_name和first_name通过(')连接起来 :see_no_evil:
51 字符串处理 查找字符串'10,A,B' 中逗号','出现的次数cnt :monkey_face:
52 字符串处理 获取Employees中的first_name :monkey_face:
53 聚合函数 按照dept_no进行汇总 :monkey_face:
54 聚合函数 查找排除当前最大、最小salary之后的员工的平均工资avg_salary :monkey_face:
55 关键字 分页查询employees表,每5行一页,返回第2页的数据 :monkey_face:
56 连接 获取所有员工的emp_no :monkey_face:
57 子查询 使用含有关键字exists查找未分配具体部门的员工的所有信息 :monkey_face:
58 视图 获取employees中的行数据,且这些行也存在于emp_v中 :monkey_face:
59 条件语句 获取有奖金的员工相关信息 :monkey_face:
60 表的复用 统计salary的累计和running_total :monkey_face:
61 表的复用 对于employees表中,给出奇数行的first_name :see_no_evil:

答案全部在牛客网测试通过。语法规格SQLite3.7.9

题解主要有参考牛课网论坛

本地测试使用MySQL5.7,部分语法与SQLite存在差异,对于MySQL5.7+,请设置sql_mode,正确使用group by(解决ONLY_FULL_GROUP_BY导致的group by查询条件严苛问题,此方法只做临时修改)

set sql_mode=(select replace(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 

详情参考:MySQL的sql_mode解析与设置

离线练习数据集配置

牛客网的数据结构几乎与MySQL测试用的数据集相通,可以先在本地测试后,再在牛客网提交结果

  1. 前往 https://launchpad.net/test-db/employees-db-1/1.0.6 下载文件 employees_db-full-1.0.6.tar.bz2

  2. 解压缩下载的文件

    tar jxvf employees_db-full-1.0.6.tar.bz2
    cd employees_db-full-1.0.6
  3. 修改文件 employees.sql

    # 38行 set storage_engine = InnoDB; 替换
    set default_storage_engine = InnoDB;
    # 44行 select CONCAT('storage engine: ', @@storage_engine) as INFO; 替换
    select CONCAT('storage engine: ', @@default_storage_engine) as INFO;
  4. 导入数据库

    mysql -uroot -p -t < employees.sql

参考:https://blog.csdn.net/appleyuchi/article/details/79439387

GitHub:https://github.com/datacharmer/test_db

Comments ( 0 )

Sign in for post a comment

About

牛客网数据库SQL实战题目汇总 spread retract
Cancel

Releases

No release

Gitee Metrics

Contributors

All

Activities

load more
can not load any more