SQL在线刷题

news2024/11/30 8:45:43

牛客网学习SQL在线编程,牛客网在线编程,一共82道

用于实践的网站,在线运行SQL

目前43道,刷不动了,剩下的之后找机会搞

在这里插入图片描述

只记录有疑问的题目

简单

SQL196 查倒数第三

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

SELECT emp_no, birth_date, first_name, last_name, gender, hire_date
FROM employees
WHERE hire_date = (
    SELECT DISTINCT hire_date
    FROM employees
    ORDER BY hire_date DESC
    LIMIT 2,1
);

不解

排行榜前几的代码都是这样,这个代码确实解决了倒数第一和倒数第二存在多条记录的问题,但如果倒数第三存在多条记录,LIMIT只取一条记录,所以只取了一个人啊?

通过实践,发现LIMIT是取一条记录,但小括号中的一个值给到hire_date。就可以匹配多条记录了

实践

CREATE TABLE Person (
	PersonID int,
	City int
);

INSERT INTO Person VALUES (1, 1);
INSERT INTO Person VALUES (2, 1);
INSERT INTO Person VALUES (3, 2);
INSERT INTO Person VALUES (4, 2);
INSERT INTO Person VALUES (5, 3);
INSERT INTO Person VALUES (6, 3);
INSERT INTO Person VALUES (7, 3);

SELECT *
FROM Person
WHERE City = (
    SELECT DISTINCT City
    FROM Person
    LIMIT 2,1
);

查询结果

5|3
6|3
7|3

SQL201 GROUP BY

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

SELECT emp_no, COUNT(*)
FROM salaries
GROUP BY emp_no
HAVING COUNT(*)>15;

使用聚合函数(SUM\COUNT…),必须使用GROUP BYHAVING,不然会报错

SQL204 查非……

获取所有非manager的员工emp_no

SELECT emp_no
FROM employees
WHERE emp_no NOT IN (
    SELECT emp_no
    FROM dept_manager
);

NOT IN+子查询

SQL211 查薪资第二

获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

SELECT emp_no, salary
FROM salaries
WHERE salary = (
    SELECT salary
    FROM salaries
    GROUP BY salary
    ORDER BY salary DESC
    LIMIT 1,1
)

理解

  1. 因为同一薪资可能有多名员工,所以用GROUP BY
  2. 找薪资高的,用倒序
  3. emp_no默认就是升序

SQL228 批量插入

批量插入数据

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');

  1. 列名没引号,值有引号
  2. 插入多条数据用,分隔

SQL236 删重复,保留最小id

删除emp_no重复的记录,只保留最小的id对应的记录。

DELETE FROM titles_test
WHERE id NOT IN (
    SELECT * FROM (
        SELECT MIN(id)
        FROM titles_test
        GROUP BY emp_no
    )a
);

  1. 保留最小,就删掉NOT IN最小
  2. 不能变查边删:
DELETE FROM titles_test
WHERE id NOT IN(
    SELECT MIN(id)
    FROM titles_test
    GROUP BY emp_no
);

​ 只能将得出的新表重命名

SQL238 replace

将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005

UPDATE titles_test
SET emp_no=REPLACE(emp_no, 10001, 10005)
WHERE id=5;

SQL239 修改表名

将titles_test表名修改为titles_2017

alter table titles_test rename to titles_2017;

SQL258 外连接

找到每个人的任务

SELECT P.id, P.name, T.content
FROM person AS P LEFT OUTER JOIN task AS T
ON P.id=T.person_id;

SQL260 max

牛客每个人最近的登录日期(一)

SELECT user_id, MAX(date)
FROM login
GROUP BY user_id
ORDER BY user_id;

  1. MAX函数直接写在要查询的内容中
  2. ORDER BY还是要加的,不能偷懒

SQL266 保留三位小数

考试分数(一)

SELECT job, ROUND(AVG(score),3) as s
FROM grade
GROUP BY job
ORDER BY s DESC;

中等

SQL205 获取部门经理

获取所有员工当前的manager

SELECT E.emp_no, M.emp_no AS manager
FROM dept_emp AS E, dept_manager AS M
WHERE E.dept_no = M.dept_no
AND E.emp_no != M.emp_no;

SQL213 三表外连接

查找所有员工的last_name和first_name以及对应的dept_name

SELECT E.last_name, E.first_name, a.dept_name
FROM employees AS E LEFT OUTER JOIN (
    SELECT D.dept_no, D.dept_name, DE.emp_no //注意
    FROM departments AS D, dept_emp AS DE
    WHERE D.dept_no = DE.dept_no
)AS a
ON E.emp_no = a.emp_no;

  1. 三表外连接查询,先两表连接命名为a,再外连接
  2. 两表连接时不能SELECT *,因为两表都有dept_no属性

SQL223 NULL

使用join查询方式找出没有分类的电影id以及名称

SELECT F.film_id, F.title
FROM film AS F LEFT OUTER JOIN film_category AS FC
ON F.film_id = FC.film_id
WHERE FC.category_id is NULL;

  1. 查询没有某属性的记录,先外连接,然后通过WHERE筛选

SQL224 子查询

使用子查询的方式找出属于Action分类的所有电影对应的title,description

SELECT F.title, F.description
FROM film AS F LEFT OUTER JOIN film_category AS FC
ON F.film_id = FC.film_id
WHERE FC.film_id IN (
    SELECT FC.film_id
    FROM category AS C LEFT OUTER JOIN film_category AS FC
    ON C.category_id = FC.category_id
    WHERE C.name = 'Action'
);

  1. 记得连接要加ON
  2. 查出多条语句的话用IN

SQL231 建立索引

对first_name创建唯一索引uniq_idx_firstname

ALTER TABLE actor ADD UNIQUE uniq_idx_firstname(first_name);
ALTER TABLE actor ADD INDEX idx_lastname(last_name);

SQL232 创建视图

针对actor表创建视图actor_name_view

CREATE VIEW actor_name_view (first_name_v, last_name_v) AS
SELECT first_name, last_name
FROM actor;

SQL233 强制索引

针对上面的salaries表emp_no字段创建索引idx_emp_no

SELECT *
FROM salaries
FORCE INDEX (idx_emp_no)
WHERE emp_no = 10005;

补充:

  1. 另一种添加索引的语法:

    create index idx_emp_no on salaries(emp_no);
    
  2. 为什么要使用强制索引

SQL234 添加新列

在last_update后面新增加一列名字为create_date

ALTER TABLE actor ADD COLUMN
create_date datetime NOT NULL DEFAULT '2020-10-01 00:00:00';

SQL235 触发器

构造一个触发器audit_log

CREATE TRIGGER audit_log
AFTER INSERT ON employees_test
FOR EACH ROW
BEGIN
    INSERT INTO audit VALUES(new.ID, new.NAME);
END

理解

  1. 这个触发器就是向employees_test插入数据时,取数据的前两列,插入到audit表中
  2. AFTER表示触发时间,INSERT表示触发事件

SQL240 外键

在audit表上创建外键约束,其emp_no对应employees_test表的主键

ALTER TABLE audit
ADD CONSTRAINT FOREIGN KEY (emp_no)
REFERENCES employees_test(id);

SQL242 薪水增加10%

将所有获取奖金的员工当前的薪水增加10%

UPDATE salaries AS s INNER JOIN emp_bonus as e
ON s.emp_no = e.emp_no
SET salary = salary * 1.1
WHERE to_date = '9999-01-01';

SQL244 concat

将employees表中的所有员工的last_name和first_name通过引号连接起来

SELECT CONCAT(RTRIM(last_name),"'",LTRIM(first_name)) AS name
FROM employees;

SQL245 逗号次数

查找字符串中逗号出现的次数

SELECT id, LENGTH(string)-LENGTH(REPLACE(string, ',', '')) AS cnt
FROM strings;

SQL246 取两个字母

获取employees中的first_name

SELECT first_name
FROM employees
ORDER BY RIGHT(first_name, 2);

SQL247 分组合并字符串

按照dept_no进行汇总

SELECT dept_no, GROUP_CONCAT(emp_no) AS employees
FROM dept_emp
GROUP BY dept_no;

SQL248 去除部分值取平均

平均工资

SELECT (SUM(salary)-MAX(salary)-MIN(salary)) / (COUNT(1)-2) AS avg_salary
FROM salaries
WHERE to_date = '9999-01-01';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/523412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js堆和栈

目录 关键句提取: 一、认识堆和栈 1、内存操作场景 2、数据结构场景 二、堆和栈的优缺点 1.栈(stack) 2.堆(heap) 3.总结: 三、堆和栈的溢出 四、 传值和传址 五、为什么会有栈内存和堆内存之分? 垃圾回收 标记清理 引用…

品牌控价的好处有哪些、品牌控价方法有哪些

今天和大家聊聊【品牌控价】,他们常会说到自己的产品有多好,经销商们体验完也说产品效果非常不错,价格在业内也是有很大优势,但是客户购买量和预期效果确有很大差距,难道我产品性价比这个高,还不能打动顾客…

一种不需要注册没有魔法使用ChatGPT的方法

关于我:关注AIGC、读书、成长和自媒体。加我微信:keeepdance,备注:chatgpt。进ChatGPT交流群。 如果你还没有使用过ChatGPT,那你来对了地方。文章结尾,我将提供一种能不需要梯子、不需要注册,无…

【数据结构.C】顺序表和单链表的增删查改

宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要…

干货! CVPR:基于VDB的高效神经辐射渲染场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 作者介绍 严 涵 上海交通大学2019级人工智能专业本科生,研究兴趣主要是与NeRF相关的三维重建算法。 报告题目 基于VDB高效神经辐射渲染场 内容简介 01 NeRF NeRF的提出起初主要是为了解决新视⻆生成…

shell脚本常用的命令

管理文件内容的使用 一、sort命令二、uniq命令三、tr命令四、cut命令五、split命令六、paste命令七、eval命令 一、sort命令 sort命令是以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序,比较原则是从首字符向后,依次按ASCII码…

尚硅谷Vue配套资源

1.gitee地址: https://gitee.com/coderPatrickStar/Vue/tree/master/%E5%B0%9A%E7%A1%85%E8%B0%B7Vue%E9%85%8D%E5%A5%97%E8%B5%84%E6%BA%90 2.

Linux常用命令——id命令

在线Linux命令查询工具 id 显示用户的ID以及所属群组的ID 补充说明 id命令可以显示真实有效的用户ID(UID)和组ID(GID)。UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID。id命令已经默认预装在大多数Linux系统中。要使用它,只需…

编译一个开源软件遇到的问题总结

一、开源软件Supra 需要编译一个开源的软件Supra,它需要的前置条件是: 1、cmake ≥ 3.4 2、gcc ≥ 4.8 or min. Visual Studio 2015 (Compiler needs to be supported by CUDA! For that, see the CUDA installation instructions.) 3、QT ≥ 5.5 4、TB…

infuluxdb时序数据库介绍

时序数据库(influxdb) InfluxDB是一个开源的、高性能的时序型数据库,在时序型数据库DB-Engines Ranking上排名第一。 下载地址:https://dl.influxdata.com/influxdb/releases/influxdb2-2.3.0-windows-amd64.zip 启动: CMD到解压…

游戏服务器被攻击怎么办

游戏服务器的安全是每个游戏开发者和管理员必须关注的问题。然而,尽管有各种防御措施,游戏服务器仍然可能受到攻击。小编将为您介绍游戏服务器被攻击的原因,并提供一些解决方案。 游戏服务器被攻击的原因 1. DDoS 攻击 DDoS 攻击是最常见的攻…

【SSA-LSTM】基于SSA-LSTM预测研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

CRM软件标准版和定制版有什么分别

CRM系统能够帮助企业管理客户互动,跟踪客户数据,实现业务流程自动化。很多企业不太了解,标准CRM软件和定制CRM软件的区别是什么,该如何选择?下面我们来说说定制CRM的优势。 什么是标准CRM软件? 标准CRM软…

计算机组成原理---第七章 外围设备习题详解版

(一)课本例题 (二)课后习题 1.计算机的外围设备是指除了CPU和内存以外的其它设备。 2.打印机根据印字方式可以分为击打式和非击打式两大类,在击打式类打印机中,只有针型打印型打印机才能打印汉字。 3.一…

Protein Cell:基于R语言的微生物组数据挖掘最佳流程(大众评审截止14号晚6点)...

Protein & Cell综述:基于R语言的微生物组数据挖掘的最佳流程 近日,中国农业科学院刘永鑫组联合南京农业大学袁军组在国际期刊 Protein & Cell (IF 15.3) 发表了题为”“The best practice for microbiome analysis using R”的综述论文&#xf…

辉哥带你学hive第一讲 hive基本介绍以及环境搭建

文章目录 1.Hive介绍1.1 hive 基本情况1.2 Hive架构原理1.3 Hive 安装1.4 元数据配置1.5 hive 服务部署1.6Hive常用交互命令1.6.1 Hive参数配置方式1.Hive介绍 1.1 hive 基本情况 hive基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表。 Hive是一个Hadoop客…

【扰动识别】S变换电能质量扰动识别(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

黎曼积分的概念

黎曼积分的概念 引入 设 f f f是闭区间 [ a , b ] [a,b] [a,b]上的非负连续函数, D D D是坐标系中由直线 x a xa xa, x b xb xb, x x x轴和曲线 y f ( x ) yf(x) yf(x)围成的图形。求 D D D的面积 S S S。 我们可以在 [ a , b ] [a,b] …

蓝桥杯模块学习2——LED灯

第一章 硬件部分 1.1 为什么要了解硬件部分? 比赛的时候会给出原理图,如果我们能够深入的理解硬件,就可以从中推导出代码应该怎样写,而不用死记硬背 1.2 电路的组成部分 1.2.1 74HC573锁存器 原理图: ​​​​​​​…

Claude的奇妙之旅:一起探索人工智能的无限可能

是一款由Anthropic公司开发的人工智能应用,可以在Slack中使用。可以理解和生成自然语言,帮助用户完成各种任务,如写小说、编写代码、解释概念等。的特点是: - 是免费的,不需要申请或下载,只需要在Slack中添…