SQL在线刷题

这篇具有很好参考价值的文章主要介绍了SQL在线刷题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

SQL在线刷题

只记录有疑问的题目

简单

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 去除部分值取平均

平均工资文章来源地址https://www.toymoban.com/news/detail-446923.html

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

到了这里,关于SQL在线刷题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用于视觉跟踪的在线特征选择研究(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 视觉跟

    2024年02月13日
    浏览(40)
  • JAVA在线刷题在线考试系统设计与实现(Springboot框架)

     博主介绍 :黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,免费 项目配有对应开发文档、开题报告、任务书、

    2024年02月03日
    浏览(57)
  • 在线考试答题刷题小程序

    微信小程序,考试小程序,答题小程序,刷题小程序、知识竞赛小程序,活动答题小程序。毕业设计小程序,有前后端完整源码和数据库,易于二次开发。还可用于考试预约,企业内部考核,内部培训等,职业考试刷题,基于云开发,部署简单,免服务器和域名备案。 小程序

    2023年04月20日
    浏览(93)
  • 深入研究矫正单应性矩阵用于立体相机在线自标定

    文章:Dive Deeper into Rectifying Homography for Stereo Camera Online Self-Calibration 作者:Hongbo Zhao, Yikang Zhang, Qijun Chen,, and Rui Fan 编辑:点云PCL 欢迎各位加入知识星球,获取PDF论文,欢迎转发朋友圈。文章仅做学术分享,如有侵权联系删文。 公众号致力于点云处理,SLAM,三维视觉,高精地

    2024年01月17日
    浏览(51)
  • AI工具合集!一共600+覆盖全行业,除了ChatGPT,那你也会喜欢这些其他的AI工具

    如果你喜欢ChatGPT,那你也会喜欢这些其他的AI工具。 AI正在改变我们的工作方式,我不想错过充分利用它的机会,所以我尝试了一系列AI工具来节省时间,提高我的工作效率。 这里有个集合了600+ai工具的合集包。 序号 AI工具名称 AI分类 AI网址 AI工具描述 1 讯飞星火认知大模型

    2024年02月12日
    浏览(55)
  • SQL防止注入工具类,可能用于SQL注入的字符有哪些

    SQL注入是一种攻击技术,攻击者试图通过在输入中注入恶意的SQL代码来干扰应用程序的数据库查询。为了防止SQL注入,你需要了解可能用于注入的一些常见字符和技术。以下是一些常见的SQL注入字符和技术: 单引号 \\\' ​: 攻击者可能会尝试通过输入 ​ ​\\\'​ ​ 来结束 SQL 查

    2024年02月21日
    浏览(41)
  • 【SQL刷题】Day12----SQL汇总数据专项练习

    博主昵称:跳楼梯企鹅 博主主页面链接: 博主主页传送门 博主专栏页面连接: 专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭:发现光,追随光,

    2023年04月18日
    浏览(35)
  • 【SQL刷题】Day2----SQL语法基础查询

    Day2----SQL语法基础查询 博主昵称:跳楼梯企鹅 博主主页面链接:博主主页传送门 博主专栏页面连接:专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭

    2023年04月08日
    浏览(35)
  • 【SQL刷题】Day10----SQL高级过滤函数专项练习

    博主昵称:跳楼梯企鹅 博主主页面链接: 博主主页传送门 博主专栏页面连接: 专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭:发现光,追随光,

    2023年04月09日
    浏览(48)
  • HQL,SQL刷题,尚硅谷(中级)

    目录 相关表结构: 1、order_info表 2、order_detail表 题目及思路解析: 第一题,查询各品类销售商品的种类数及销量最高的商品 第二题  查询用户的累计消费金额及VIP等级 第三题  查询首次下单后第二天连续下单的用户比率 总结归纳: 知识补充: 1、order_info表 2、order_detail表

    2024年04月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包