【MySQL】跟着示例学 SQL

下面所有示例均来自 SQL之母 - SQL自学网站

-- 查询所有学生
-- 请编写 SQL 查询语句,从名为 `student` 的数据表中查询出所有学生的信息。
select * from student;
-- 查询学生的姓名和年龄
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有学生的姓名(name)和年龄(age)信息。
select name, age from student;
-- 查询 - 别名
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有学生的姓名(name)和年龄(age)信息,并为它们取别名为 `学生姓名` 和 `学生年龄`。
select name as 学生姓名, age as 学生年龄 from student;
-- 查询 - 常量和运算
-- 请编写一条 SQL 查询语句,从名为`student`的数据表中选择出所有学生的姓名(name)和分数(score),并且额外计算出分数的 2 倍(double_score)。
select name, score, 2 * score as double_score from student;
-- 条件查询 - where
-- 请编写一条 SQL 查询语句,从名为`student` 的数据表中选择出所有学生的姓名(name)和成绩(score),要求学生姓名为 '鱼皮'。
select name, score from student where name = '鱼皮'
-- 条件查询 - 运算符
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有学生的姓名(name)和年龄(age),要求学生姓名不等于 '热dog' 。
select name, age from student where name != '热dog'
-- 条件查询 - 空值
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有学生的姓名(name)、年龄(age)和成绩(score),要求学生年龄不为空值。
select name, age, score from student where age is not null;
-- 条件查询 - 模糊查询
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有学生的姓名(name)和成绩(score),要求姓名(name)不包含 "李" 这个字。
select name, score from student where name not like '%李%'
-- 条件查询 - 逻辑运算
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有学生的姓名(name)、成绩(score),要求学生的姓名包含 "李",或者成绩(score)大于 500。
select name, score from student where name like '%李%' or score >= 500
-- 去重
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出所有不重复的班级 ID(class_id)和考试编号(exam_num)的组合。
select distinct class_id, exam_num from student
-- 排序
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择出学生姓名(name)、年龄(age)和成绩(score),首先按照成绩从大到小排序,如果成绩相同,则按照年龄从小到大排序。
select name, age, score from student order by score desc, age asc
-- 截断和偏移
-- 请编写一条 SQL 查询语句,从名为 `student` 的数据表中选择学生姓名(name)和年龄(age),按照年龄从小到大排序,从第 2 条数据开始、截取 3 个学生的信息。
select name, age from student order by age asc limit 1, 3
-- 条件分支
-- 假设有一个学生表 `student`,包含以下字段:`name`(姓名)、`age`(年龄)。请你编写一个 SQL 查询,将学生按照年龄划分为三个年龄等级(age_level):60 岁以上为 "老同学",20 岁以上(不包括 60 岁以上)为 "年轻",20 岁及以下、以及没有年龄信息为 "小同学"。返回结果应包含学生的姓名(name)和年龄等级(age_level),并按姓名升序排序。
select name,case when (age > 60) then '老同学'when (age > 20) then '年轻'else '小同学' end as age_level
from 
student
order by name asc
-- 函数 - 时间函数
-- 假设有一个学生表 `student`,包含以下字段:`name`(姓名)、`age`(年龄)。请你编写一个 SQL 查询,展示所有学生的姓名(name)和当前日期(列名为 "当前日期")。
select name, date () as 当前日期 from student
-- 函数 - 字符串处理
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)。请你编写一个 SQL 查询,筛选出姓名为 '热dog' 的学生,展示其学号(id)、姓名(name)及其大写姓名(upper_name)。
select id, name,  upper(name) as upper_name from student where name = '热dog'
-- 函数 - 聚合函数
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`class_id`(班级编号)、`score`(成绩)。请你编写一个 SQL 查询,汇总学生表中所有学生的总成绩(total_score)、平均成绩(avg_score)、最高成绩(max_score)和最低成绩(min_score)。
select sum(score) as total_score, avg(score) as avg_score, max(score) as max_score, min(score) as min_score from student
-- 分组聚合 - 单字段分组
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`class_id`(班级编号)、`score`(成绩)。请你编写一个 SQL 查询,统计学生表中的班级编号(class_id)和每个班级的平均成绩(avg_score)。
select class_id,  avg(score) as avg_score from student group by class_id
-- 分组聚合 - 多字段分组
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`class_id`(班级编号)、`exam_num`(考试次数)、`score`(成绩)。请你编写一个 SQL 查询,统计学生表中的班级编号(class_id),考试次数(exam_num)和每个班级每次考试的总学生人数(total_num)。
select 
class_id, exam_num, count(*) as total_num 
from student 
group by class_id, exam_num
-- 分组聚合 - having 子句
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`class_id`(班级编号)、`score`(成绩)。请你编写一个 SQL 查询,统计学生表中班级的总成绩超过 150 分的班级编号(class_id)和总成绩(total_score)。
select 
class_id, sum(score) as total_score 
from student 
group by class_id
having total_score > 150
-- 查询进阶 - 关联查询 - cross join
-- 假设有一个学生表 `student` ,包含以下字段:id(学号)、name(姓名)、age(年龄)、class_id(班级编号);还有一个班级表 `class` ,包含以下字段:id(班级编号)、name(班级名称)。请你编写一个 SQL 查询,将学生表和班级表的所有行组合在一起,并返回学生姓名(student_name)、学生年龄(student_age)、班级编号(class_id)以及班级名称(class_name)。
select s.name as student_name, s.age as student_age, s.class_id, c.name as class_name
from student s
cross join class c
-- 查询进阶 - 关联查询 - inner join
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`class_id`(班级编号)。还有一个班级表 `class`,包含以下字段:`id`(班级编号)、`name`(班级名称)、`level`(班级级别)。请你编写一个 SQL 查询,根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(`student_name`)、学生年龄(`student_age`)、班级编号(`class_id`)、班级名称(`class_name`)、班级级别(`class_level`)。
select s.name as student_name, s.age as student_age, s.class_id, c.name as class_name, c.level as class_level
from student s
join class c on s.class_id = c.id
-- 查询进阶 - 关联查询 - outer join
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`class_id`(班级编号)。还有一个班级表 `class`,包含以下字段:`id`(班级编号)、`name`(班级名称)、`level`(班级级别)。请你编写一个 SQL 查询,根据学生表和班级表之间的班级编号进行匹配,返回学生姓名(`student_name`)、学生年龄(`student_age`)、班级编号(`class_id`)、班级名称(`class_name`)、班级级别(`class_level`),要求必须返回所有学生的信息(即使对应的班级编号不存在)。
select s.name as student_name, s.age as student_age, s.class_id, c.name as class_name, c.level as class_level
from student s
left join class c on s.class_id = c.id
-- 查询进阶 - 子查询
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。还有一个班级表 `class`,包含以下字段:`id`(班级编号)、`name`(班级名称)。请你编写一个 SQL 查询,使用子查询的方式来获取存在对应班级的学生的所有数据,返回学生姓名(`name`)、分数(`score`)、班级编号(`class_id`)字段。
select name, score, class_id
from student
where class_id in (select id from class
)
-- 查询进阶 - 子查询 - exists
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。还有一个班级表 `class`,包含以下字段:`id`(班级编号)、`name`(班级名称)。请你编写一个 SQL 查询,使用 exists 子查询的方式来获取 **不存在对应班级的** 学生的所有数据,返回学生姓名(`name`)、年龄(`age`)、班级编号(`class_id`)字段。
select name, age, class_id
from student
where not exists (select idfrom classwhere class.id = student.class_id
)
-- 查询进阶 - 组合查询
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。还有一个新学生表 `student_new`,包含的字段和学生表完全一致。请编写一条 SQL 语句,获取所有学生表和新学生表的学生姓名(`name`)、年龄(`age`)、分数(`score`)、班级编号(`class_id`)字段,要求保留重复的学生记录。
select name, age, score, class_id 
from student
union all
select name, age, score, class_id 
from student_new
-- 查询进阶 - 开窗函数 - sum over
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。请你编写一个 SQL 查询,返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并计算每个班级的学生平均分(class_avg_score)。
select id, name, age, score, class_id,avg(score) over(partition by class_id) as class_avg_score
from student
-- 查询进阶 - 开窗函数 - sum over order by
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。请你编写一个 SQL 查询,返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数升序的方式累加计算每个班级的学生总分(class_sum_score)。
select id, name, age, score, class_id, 
sum(score) over (partition by class_id order by score asc) as class_sum_score
from student
-- 查询进阶 - 开窗函数 - rank
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。请你编写一个 SQL 查询,返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数降序的方式计算每个班级内的学生的分数排名(ranking)。
select id, name, age, score, class_id,
rank() over(partition by class_id order by score desc) as ranking
from student
-- 查询进阶 - 开窗函数 - row_number
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。请你编写一个 SQL 查询,返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数降序的方式给每个班级内的学生分配一个编号(row_number)。
select id, name, age, score, class_id,
row_number() over(partition by class_id order by score desc) as row_number
from student
-- 查询进阶 - 开窗函数 - lag / lead
-- 假设有一个学生表 `student`,包含以下字段:`id`(学号)、`name`(姓名)、`age`(年龄)、`score`(分数)、`class_id`(班级编号)。请你编写一个 SQL 查询,返回每个学生的详细信息(字段顺序和原始表的字段顺序一致),并且按照分数降序的方式获取每个班级内的学生的前一名学生姓名(prev_name)、后一名学生姓名(next_name)。
select id, name, age, score, class_id,
lag(name) over(partition by class_id order by score desc) as prev_name,
lead(name) over (partition by class_id order by score desc) as next_name
from student

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

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

相关文章

Java入门基础知识第五课(超基础,超仔细)——选择结构

今天主要讲一下if选择结构以及如何利用Math.random()来获取随机数。 流程控制:用来控制代码的执行顺序 顺序结构:代码从上往下按照顺序依次执行 选择结构:根据条件选择性的执行某部分代码 循环结构:反复执行一段代码 一、i…

软件测试下的AI之路(4)

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

实时计算平台设计方案:913-基于100G光口的DSP+FPGA实时计算平台

基于100G光口的DSPFPGA实时计算平台 一、产品概述 基于以太网接口的实时数据智能计算一直应用于互联网、网络安全、大数据交换的场景。以DSPFPGA的方案,体现了基于硬件计算的独特性能,区别于X86GPU的计算方案,保留了高带宽特性&…

Ceph学习 - 1.存储知识

文章目录 1.存储基础1.1 基础知识1.1.1 存储基础1.1.2 存储使用 1.2 文件系统1.2.1 简介1.2.2 数据存储1.2.3 存储应用的基本方式1.2.4 文件存储 1.3 小结 1.存储基础 学习目标:这一节,我们从基础知识、文件系统、小节三个方面来学习。 1.1 基础知识 1.…

UART设计

一、UART通信简介 通用异步收发器, 特点:串行、异步、全双工通信 优点:通信线路简单,传输距离远 缺点:传输速度慢 数据传输速率:波特率(单位:baud,波特) …

如何高效学习Python编程语言

理解Python的应用场景 不同的编程语言有不同的发展历史和应用场景,了解Python主要应用在哪些领域对于学习它会有很大帮助。Python最初是一种通用脚本语言,主要用于系统级任务自动化。随着时间的推移,它逐步成为数据处理、科学计算、Web开发、自动化运维等众多领域的主要编程语…

Navicat设置mysql权限

新建用户: 注意:如果不生效执行刷新命令:FLUSH PRIVILEGES; 执行后再重新打开查看; 查询权限命令:1234为新建的用户名,localhost为访问的地址 SHOW GRANTS FOR 1234localhost;如果服务器设置服务器权限后可能会出现权…

【算法】求一个数组中三个数乘积最大值 - 线性扫描

题目 给定一个数组,找出数组中乘积最大的三个数。 原理 一个数组中最大值只有两种情况:两个最小的负数和一个最大的正数 & 三个最大的正数。线性扫描找出这五个数字,即可求出最大值。 代码 public static void main(String[] args) {…

潜伏三年,核弹级危机一触即发,亚信安全深度分析XZ Utils后门事件

2024年3月29日星期五上午8点,有研究人员称xz/liblzma中的后门导致SSH服务器内存泄露,使得SSH服务异常(https://www.openwall.com/lists/oss-security/2024/03/29/4)。github中“xz”压缩工具主要由Larhzu和Jia Tan共同负责维护&am…

QToolTip设置背景色没有生效原因与解决方法

设置全局QToolTip的背景色,有两种方法: 1. 样式表设置; 2. QToolTip::setPalette(pal);调色板设置; QPalette pal QToolTip::palette(); //修改背景色 pal.setColor(QPalette::Inactive,QPalette::ToolTipBase,QColor(240, 25…

力扣25. K 个一组翻转链表

Problem: 25. K 个一组翻转链表 文章目录 题目描述思路复杂度Code 题目描述 思路 1.创建虚拟头节点dummy并将其next指针指向head,创建指针pre、end均指向dummy; 2.编写反转单链表的函数reverse 3.当end -> next 不为空时: 3.1.每次k个一组…

Java强连通分量知识点(含面试大厂题和源码)

在大厂面试中,与拓扑排序相关的问题通常涉及到对图的处理和算法设计。以下是三道可能出现在大厂面试中的编程题目,以及相应的Java源码实现。 题目 1:课程依赖关系 描述: 给定一个课程列表和课程之间的依赖关系,为所有…

Bigtable [OSDI‘06] 论文阅读笔记

原论文:Bigtable: A Distributed Storage System for Structured Data (OSDI’06) 1. Introduction Bigtable 是一种用于管理结构化数据的分布式存储系统,可扩展到非常大的规模:数千台服务器上的数据量可达 PB 级别,同时保证可靠…

学习java第三十五

Spring事务传播行为: PROPAGATION_REQUIRED(默认) 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行 P…

golang语言和JAVA对比

引言: 在当今的软件开发领域,有许多编程语言供开发人员选择。其中,Golang和Java是两种备受开发者青睐的语言。本文将探讨Golang和Java之间的比较和对比,分析它们在语言特性、性能、平台支持、社区和生态系统、开发效率和可维护性等方面的异同。 一、语言特性和性能 Golang…

二维相位解包理论算法和软件【全文翻译-路径跟踪方法(4.1)】

4.1 引言 在第 2 章中我们注意到,从一个像素点开始计算的解包相位可能取决于积分路径。如果我们沿着两条不同的路径从一个像素点到另一个像素点,我们可能会得到两个不同的解包裹相位答案。我们发现,这些不一致是由称为残差的点状结构造成的。残差位于由四个像素组成的 &quo…

加密算法(二)

1、SHA-256加密算法: package com.arithmetic.encryption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; //使用java.security.MessageDigest类来进行SHA-256摘要的计算。 //通过getInstance("SHA-256")方法获取…

阿里巴巴拍立淘API新功能揭秘:图片秒搜商品,实现智能化个性化购物新体验

在数字化快速发展的今天,智能化和个性化已经成为购物体验中不可或缺的元素。为了满足消费者日益增长的购物需求,阿里巴巴中国站不断推陈出新,其中拍立淘API的新功能——图片秒搜商品,无疑为智能化个性化购物体验开创了新的篇章。 …

js怎样判断status

相信大家都知道Switch开关吧,他有两种状态,通常用1/2表示,开启时为true,关闭时为false,那么我们该怎样判断他是否为开启还是关闭你? 我们可以声明一个变量,让它等于status,判断它是否等于1/2&…

【机器学习入门】使用YOLO模型进行物体检测

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 文章目录 系列文章目录前…