【MySQL】跟着示例学 SQL

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

下面所有示例均来自 SQL之母 - SQL自学网站文章来源地址https://www.toymoban.com/news/detail-851861.html

-- 查询所有学生
-- 请编写 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 id
    from class
    where 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

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

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

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

相关文章

  • MySQL之SQL与数据库简介

    SQL首先是一门高级语言,同其他的C/C++,Java等语言类似,不同的是他是一种结构化查询语言,用户访问和处理数据库的语言,那类似于C语言,SQL也有自己的标准,目前市面上的数据库系统都支持SQL-92标准 SQL这门语言是具有统一性的,但是不同的数据库支持的SQL有略微差别,

    2024年01月23日
    浏览(51)
  • 【数据库】MySQL 高级(进阶) SQL 语句

    location表格创建 store_info表格创建 显示表格中一个或数个字段的所有数据记录 不显示重复的数据记录 按照条件进行查询 在已知的字段数据取值范围内取值 另外还有not in命令,用法一致,表示显示不在指定范围内的字段的值。 在两个字段数据值之间取值,包含两边字段的数据

    2024年02月09日
    浏览(137)
  • 数据库应用:MySQL数据库SQL高级语句与操作

    目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验  1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表  三、总结 克隆表:将数据表的数据记录生成到新的表中。 (1)克隆表 ① 先创建再导入 ② 创建

    2024年02月13日
    浏览(81)
  • MySQL基础篇——MySQL数据库客户端连接,数据模型,SQL知识

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.客户端连接MySQL 二. 数据模型 1.关系型数据库(RDBMS) 2.数据模型 三.SQL 1.SQL通用语法 2.SQL分类 3.数据库操作 1). 查

    2024年02月06日
    浏览(77)
  • 【MySQL】——关系数据库标准语言SQL(大纲)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年01月20日
    浏览(62)
  • 【MySQL】数据库SQL语句之DML

    目录 前言: 一.DML添加数据 1.1给指定字段添加数据 1.2给全部字段添加数据 1.3批量添加数据 二.DML修改数据 三.DML删除数据 四.结尾   时隔一周,啊苏今天来更新啦,简单说说这周在做些什么吧,上课、看书、放松等,哈哈哈,所以博客就这样被搁了。   今天感觉不错,给大

    2024年02月08日
    浏览(69)
  • MySQL数据库基础(五):SQL语言讲解

    文章目录 SQL语言讲解 一、SQL概述 二、SQL语句分类 1、DDL 2、DML 3、DQL 4、DCL 三、SQL基本语法 1、SQL语句可以单行或多行书写,以分号结尾 2、可使用空格和缩进来增强语句的可读性 3、MySQL数据库的SQL语句不区分大小写,建议使用大写  4、可以使用单行与多行注释 四、总

    2024年02月19日
    浏览(57)
  • 主流数据库(SQL Server、Mysql、Oracle)通过sql实现多行数据合为一行

    1、方法一:使用 STUFF 和 FOR XML PATH 进行多行合并成一行 (1)FOR XML PATH用法 FOR XML 是 SQL Server 提供的一种功能,允许您将查询结果转换为 XML 格式。 PATH 模式则是其中一种灵活的方式来构造自定义的XML结构。 1、基本字符串连接 : 当您想从单列中提取所有行的数据并连接成一

    2024年04月10日
    浏览(63)
  • MySQL数据库入门到精通1--基础篇(MySQL概述,SQL)

    目前主流的关系型数据库管理系统: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。 MySQL:开源免费的中小型数据库,后来Sun公司收购了MySQL,而Oracle又收购了Sun公司。 目前Oracle推出了收费版本的MySQL,也提供了免费的社区版本。 SQL Server:Microsoft 公司推出的收费的中

    2024年02月07日
    浏览(50)
  • mysql,mysqldump数据库导入导出sql文件

    在使用MySQL数据库时,经常需要备份和恢复数据库,通过导出sql文件备份和直接执行sql文件恢复是非常便捷的方式。本篇博客主要介绍如何对MySQL数据库通过cmd命令导出和导入sql文件。 导出sql文件可以使用mysqldump。主要有如下几种操作: ①导出整个数据库 (包括数据库中的数

    2023年04月10日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包