1 Star 0 Fork 52

PwnerZhang / 数据库SQL实战

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

数据库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:
62 格式化 重新格式化部门表 :see_no_evil:
63 数据操作 交换工资 :see_no_evil:
64 数据操作 换座位 :see_no_evil:
65 数据操作 有趣的电影 :see_no_evil:
66 数据操作 体育馆的人流量 :see_no_evil:
67 查询 超过5名学生的课 :see_no_evil:
68 数据操作 出租车行程和用户 :see_no_evil:
69 数据操作 判断是不是大国家 :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

空文件

简介

数据库SQL实战,把一些工作中遇到的以及在网上找到的面试题进行了sql语句自己编辑以及测试,提高自己对sql语句的理解,尽量少用第三方插件 展开 收起
SQL
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
SQL
1
https://gitee.com/zzzain46/database-sql-combat.git
git@gitee.com:zzzain46/database-sql-combat.git
zzzain46
database-sql-combat
数据库SQL实战
master

搜索帮助