![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
SQL实战题解
牛客SQL实战的题解记录
锥栗
这个作者很懒,什么都没留下…
展开
-
【牛客SQL】SQL46 在audit表上创建外键约束,其emp_no对应employees_test表的主键id
题目描述题解添加外键:ALTER TABLE 从表 ADD CONSTRAINT `外键名` FOREIGN KEY (`从表外键字段`) REFERENCES 主表 (`主键字段`)运行时间:52ms超过20.92% 用Mysql提交的代码占用内存:7312KB超过26.94%用Mysql提交的代码ALTER TABLE audit ADD CONSTRAINT `emp_audit_key` FOREIGN KEY (`EMP_no`)REFERENCES employees原创 2021-11-02 17:00:16 · 83 阅读 · 0 评论 -
【牛客SQL】SQL45 将titles_test表名修改为titles_2017
题目描述题解rename:运行时间:58ms超过4.09% 用Mysql提交的代码占用内存:7504KB超过4.95%用Mysql提交的代码RENAME TABLE titles_test to titles_2017;alter:运行时间:52ms超过20.74% 用Mysql提交的代码占用内存:7520KB超过3.38%用Mysql提交的代码ALTER TABLE titles_test RENAME AS titles_2017;...原创 2021-11-02 16:34:09 · 126 阅读 · 0 评论 -
【牛客SQL】SQL44 将id=5以及emp_no=10001的行数据替换成id=5以及
题目描述将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现,直接使用update会报错。题解运行时间:52ms超过18.78% 用Mysql提交的代码占用内存:7532KB超过2.50%用Mysql提交的代码REPLACE INTO titles_test VALUES (5, 10005, 'Senior Engineer', '1986-06-26', '9999-01-01')运行时间:51ms超过2原创 2021-10-29 10:27:46 · 111 阅读 · 0 评论 -
【牛客SQL】SQL43 将所有to_date为9999-01-01的全部更新为NULL
题目描述题解考察update的基本用法运行时间:51ms超过30.83% 用Mysql提交的代码占用内存:7468KB超过12.34%用Mysql提交的代码UPDATE titles_test SET to_date = NULL,from_date = '2001-01-01'WHERE to_date = '9999-01-01';...原创 2021-09-29 15:54:06 · 120 阅读 · 0 评论 -
【牛客SQL】SQL42 删除emp_no重复的记录,只保留最小的id对应的记录。
题目描述题解子查询解运行时间:51ms超过25.03% 用Mysql提交的代码占用内存:7452KB超过9.25%用Mysql提交的代码DELETE FROM titles_testWHERE id NOT IN ( SELECT id_min FROM ( SELECT MIN(id) AS id_min FROM titles_test GROUP BY emp_no )A);神仙解自己按两张表来比对运行原创 2021-09-29 15:25:20 · 94 阅读 · 0 评论 -
【牛客SQL】SQL41 构造一个触发器audit_log
题目描述题解考察触发器插入时可以用NEW和OLD指代employees_test插入时的数据运行时间:52ms超过20.69% 用Mysql提交的代码占用内存:7376KB超过15.65%用Mysql提交的代码CREATE TRIGGER audit_log AFTER INSERT ON employees_testFOR EACH ROWBEGIN INSERT INTO audit VALUES (NEW.ID, NEW.NAME);END;...原创 2021-09-29 14:59:52 · 94 阅读 · 0 评论 -
【牛客SQL】SQL40 在last_update后面新增加一列名字为create_dat
题目描述题解考察增加数据列运行时间:59ms超过3.55% 用Mysql提交的代码占用内存:7208KB超过5.96%用Mysql提交的代码ALTER TABLE actor ADD COLUMN create_date datetime NOT NULL DEFAULT '2020-10-01 00:00:00';原创 2021-08-04 12:51:12 · 135 阅读 · 0 评论 -
【牛客SQL】SQL39 针对上面的salaries表emp_no字段创建索引idx_emp_no
题目描述题解考察强制使用命名的索引来查询。运行时间:13ms超过70.95% 用Sqlite提交的代码占用内存:3332KB超过39.12%用Sqlite提交的代码SQLiteSELECT * FROM salaries INDEXED BY idx_emp_no WHERE emp_no = 10005;MySQLSELECT * FROM salariesFORCE INDEX (idx_emp_no)WHERE emp_no=10005;...原创 2021-08-04 07:50:17 · 129 阅读 · 0 评论 -
【牛客SQL】SQL38 针对actor表创建视图actor_name_view
题目描述题解考察视图创建CREATE VIEW。运行时间:12ms超过79.90% 用Sqlite提交的代码占用内存:3328KB超过33.81%用Sqlite提交的代码CREATE VIEW actor_name_view AS SELECT first_name AS first_name_v, last_name AS last_name_vFROM actor;...原创 2021-08-03 22:30:12 · 105 阅读 · 0 评论 -
【牛客SQL】SQL37 对first_name创建唯一索引uniq_idx_firstname
题目描述描述针对如下表actor结构创建索引:(注:在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作,mysql支持ALTER TABLE创建索引)CREATE TABLE actor ( actor_id smallint(5) NOT NULL PRIMARY KEY, first_name varchar(45) NOT NULL, last_name varchar(45) NOT NULL, last_原创 2021-08-03 22:14:45 · 127 阅读 · 0 评论 -
【牛客SQL】SQL36 创建一个actor_name表
题目描述题解输入两组命令,一组创建表,一组插入数据。插入数据是联合INSERT INTO 命令和SELECT命令。运行时间:14ms超过63.55% 用Sqlite提交的代码占用内存:3328KB超过36.91%用Sqlite提交的代码CREATE TABLE IF NOT EXISTS actor_name ( first_name varchar(45) NOT NULL, last_name varchar(45) NOT NULL);INSERT INTO act原创 2021-07-31 19:16:04 · 174 阅读 · 0 评论 -
【牛客SQL】SQL35 批量插入数据,不使用replace操作
题目描述题解mysql中常用的三种插入数据的语句:1)insert into表示插入数据,数据库会检查主键,如果出现重复会报错;2)replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;3)insert ignore into表示,如果中已经存在相同的记录,则忽略当前新数据;运行时间:11ms超过93.52% 用Sqlite提交的代码占用内存:3332KB超过原创 2021-07-31 17:06:49 · 170 阅读 · 0 评论 -
【牛客SQL】SQL34 批量插入数据
题目描述题解INSERT 考察插入数据运行时间:11ms超过92.99% 用Sqlite提交的代码占用内存:3240KB超过87.97%用Sqlite提交的代码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'原创 2021-07-31 16:50:52 · 60 阅读 · 0 评论 -
【牛客SQL】SQL33 创建一个actor表,包含如下列信息
题目描述题解考察创建TABLE,都是基操。测试用例随便都能过运行时间:11ms超过93.23% 用Sqlite提交的代码占用内存:3232KB超过84.81%用Sqlite提交的代码CREATE TABLE actor ( 'actor_id' smallint(5) NOT NULL, 'first_name' varchar(45) NOT NULL, 'last_name' varchar(45) NOT NULL, 'last_update' date原创 2021-07-31 16:28:05 · 150 阅读 · 0 评论 -
【牛客SQL】SQL32 将employees表的所有员工的last_name和first_name拼接起来作为Name
题目描述题解主要考察字符串拼接sqliteSELECT (last_name || ' ' || first_name) AS Name FROM employees;MySQL:SELECT CONCAT_WS(' ', last_name, first_name) AS Name FROM employees;原创 2021-07-31 16:15:36 · 181 阅读 · 0 评论 -
【牛客SQL】SQL30 使用子查询的方式找出属于Action分类的所有电影
题目描述题解同样是子查询 + JOIN运行时间:14ms超过77.32% 用Sqlite提交的代码占用内存:3588KB超过11.61%用Sqlite提交的代码SELECT title, descriptionFROM filmWHERE film_id IN ( SELECT fc.film_id FROM film_category AS fc JOIN category AS c WHERE name = 'Action' AND fc.categor原创 2021-07-30 16:13:16 · 126 阅读 · 0 评论 -
【牛客SQL】SQL29 使用join查询方式找出没有分类的电影id以及名称
题目描述题解子查询 NOT IN 判断 + JOIN运行时间:18ms超过47.56% 用Sqlite提交的代码占用内存:3588KB超过10.01%用Sqlite提交的代码SELECT film_id, title FROM film WHERE film_id NOT IN ( SELECT fc.film_id FROM film_category AS fc JOIN category AS c WHERE fc.category_id = c.categ原创 2021-07-30 15:55:08 · 238 阅读 · 0 评论 -
【牛客SQL】SQL26 汇总各个部门当前员工的title类型的分配数目
题目描述描述有一个部门表departments简况如下:有一个,部门员工关系表dept_emp简况如下:有一个职称表titles简况如下:汇总各个部门当前员工的title类型的分配数目,即结果给出部门编号dept_no、dept_name、其部门下所有的员工的title以及该类型title对应的数目count,结果按照dept_no升序排序示例1输入:drop table if exists `departments` ; drop table if exists `dept原创 2021-07-25 18:43:22 · 597 阅读 · 0 评论 -
【牛客SQL】SQL24 获取所有非manager员工当前的薪水情况
题目描述描述有一个员工表employees简况如下:有一个,部门员工关系表dept_emp简况如下:有一个部门经理表dept_manager简况如下:有一个薪水表salaries简况如下:获取所有非manager员工薪水情况,给出dept_no、emp_no以及salary,以上例子输出:示例1输入:drop table if exists `dept_emp` ; drop table if exists `dept_manager` ; drop table if原创 2021-07-25 15:57:01 · 147 阅读 · 0 评论 -
【牛客SQL】SQL23 对所有员工的薪水按照salary降序进行1-N的排名
题目描述描述有一个薪水表salaries简况如下:对所有员工的薪水按照salary降序进行1-N的排名,要求相同salary并列且按照emp_no升序排列:示例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 N原创 2021-07-24 09:17:42 · 735 阅读 · 1 评论 -
【牛客SQL】SQL22 统计各个部门的工资记录数
题目描述描述有一个部门表departments简况如下:有一个,部门员工关系表dept_emp简况如下:有一个薪水表salaries简况如下:请你统计各个部门的工资记录数,给出部门编码dept_no、部门名称dept_name以及部门在salaries表里面有多少条记录sum,按照dept_no升序排序,以上例子输出如下:示例1输入:drop table if exists `departments` ; drop table if exists `dept_emp` ; d原创 2021-07-24 08:53:57 · 1086 阅读 · 3 评论 -
【牛客SQL】SQL19 查找所有员工的last_name和first_name以及对应的dept_name
题目描述描述有一个员工表employees简况如下:有一个部门表departments表简况如下:有一个,部门员工关系表dept_emp简况如下:请你查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工,以上例子输出如下:示例1输入:drop table if exists `departments` ; drop table if exists `dept_emp` ; drop table if exists原创 2021-07-23 21:11:26 · 163 阅读 · 0 评论 -
【牛客SQL】SQL17 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
题目描述描述有一个薪水表salaries简况如下:请你获取薪水第二多的员工的emp_no以及其对应的薪水salary示例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 (`e原创 2021-07-23 20:35:50 · 452 阅读 · 0 评论 -
【牛客SQL】SQL16 统计出当前各个title类型对应的员工当前薪水对应的平均工资
题目描述描述有一个员工职称表titles简况如下:有一个薪水表salaries简况如下:请你统计出各个title类型对应的员工薪水对应的平均工资avg。结果给出title以及平均工资avg,并且以avg升序排序,以上例子输出如下:示例1输入:drop table if exists `salaries` ; drop table if exists titles;CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL,`sal原创 2021-07-20 09:00:47 · 1158 阅读 · 1 评论 -
【牛客SQL】SQL15 查找employees表emp_no与last_name的员工信息
题目描述描述有一个员工表employees简况如下:请你查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列,以上例子查询结果如下:示例1输入:drop table if exists `employees` ; CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`first_name` varchar原创 2021-07-20 08:41:19 · 488 阅读 · 0 评论 -
【牛客SQL】SQL12 获取每个部门中当前员工薪水最高的相关信息
题目描述描述有一个员工表dept_emp简况如下:有一个薪水表salaries简况如下:获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号升序排列,以上例子输出如下:(注意: Mysql与Sqlite select 非聚合列的结果可能不一样)题解题眼是要求同一个部门里的最高工资(按照部门号码升序展示)。但是部门信息在表dept_emp,工资信息在表salaries,也就是说重要信息被分散在两张表中,两张表中能区分数据共有原创 2021-07-19 09:05:19 · 2059 阅读 · 2 评论 -
【牛客SQL】SQL11 获取所有员工当前的manager
题目描述描述有一个员工表dept_emp简况如下:第一行表示为员工编号为10001的部门是d001部门。有一个部门经理表dept_manager简况如下:第一行表示为d001部门的经理是编号为10002的员工。获取所有的员工和员工对应的经理,如果员工本身是经理的话则不显示,以上例子如下:示例1输入:drop table if exists `dept_emp` ; drop table if exists `dept_manager` ; CREATE TABLE `dep原创 2021-07-13 08:57:55 · 192 阅读 · 4 评论 -
【牛客SQL】SQL10 获取所有非manager的员工emp_no
题目描述描述有一个员工表employees简况如下:有一个部门领导表dept_manager简况如下:请你找出所有非部门领导的员工emp_no,以上例子输出:示例1输入:drop table if exists `dept_manager` ; drop table if exists `employees` ; CREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) NOT NUL原创 2021-07-13 08:37:29 · 199 阅读 · 1 评论 -
【牛客SQL】SQL8 找出所有员工当前薪水salary情况
题目描述描述有一个薪水表,salaries简况如下:请你找出所有员工具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示,以上例子输出如下:示例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 N原创 2021-07-13 08:17:51 · 790 阅读 · 0 评论 -
【牛客SQL】SQL7 查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t
题目描述描述有一个薪水表,salaries简况如下:请你查找薪水记录超过15次的员工号emp_no以及其对应的记录次数t,以上例子输出如下:题解本题考察分组GROUP BY和分组过滤HAVING操作:运行时间:17ms超过52.75% 用Sqlite提交的代码占用内存:3320KB超过57.91%用Sqlite提交的代码SELECT emp_no, COUNT(salary) AS t FROM salaries GROUP BY emp_no HAVING COUNT(sal原创 2021-07-12 20:53:02 · 115 阅读 · 0 评论 -
【牛客SQL】SQL5 查找所有员工的last_name和first_name以及对应部门编号dept_no
题目描述有一个员工表,employees简况如下:有一个部门表,dept_emp简况如下:请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工,以上例子如下:示例1输入:drop table if exists `dept_emp` ; drop table if exists `employees` ; CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,原创 2021-07-12 20:29:19 · 280 阅读 · 1 评论 -
【牛客SQL】SQL4 查找所有已经分配部门的员工
题目描述有一个员工表,employees简况如下:有一个部门表,dept_emp简况如下:请你查找所有已经分配部门的员工的last_name和first_name以及dept_no,未分配的部门的员工不显示,以上例子如下:题解SELECT查询的数据组合输出,就是其实就是考察JOIN的功能:运行时间:16ms 超过59.09% 用Sqlite提交的代码占用内存:3400KB 超过36.03%用Sqlite提交的代码SELECT a.last_name, a.first_name, b.原创 2021-07-10 16:18:16 · 828 阅读 · 0 评论 -
【牛客SQL】SQL3 查找当前薪水详情以及部门编号dept_no
题目描述有一个全部员工的薪水表salaries简况如下:有一个各个部门的领导表dept_manager简况如下:请你查找各个部门当前领导的薪水详情以及其对应部门编号dept_no,输出结果以salaries.emp_no升序排序,并且请注意输出结果里面dept_no列是最后一列,以上例子输出如下:示例1输入:drop table if exists `salaries` ; drop table if exists `dept_manager` ; CREATE TABLE `s原创 2021-07-12 20:03:21 · 444 阅读 · 1 评论 -
【牛客SQL】SQL2 查找入职员工时间排名倒数第三的员工所有信息
题目描述示例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,原创 2021-07-12 19:36:08 · 240 阅读 · 0 评论 -
【牛客SQL】SQL1 查找最晚入职员工的所有信息
题目描述示例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,原创 2021-07-12 17:02:50 · 212 阅读 · 0 评论