数据库系统概论(十二)SQL 基于派生表的查询 超详细讲解(附带例题表格对比带你一步步掌握)

article/2025/7/15 5:31:59

数据库系统概论(十二)SQL 基于派生表的查询 超详细讲解(附带例题表格对比带你一步步掌握)

  • 前言
  • 一、什么是派生表?
  • 二、派生表的使用示例
    • 场景1:分组统计后过滤数据
    • 场景2:替代临时表查询
  • 三、SELECT语句核心结构
  • 四、常用聚集函数
  • 五、WHERE子句
    • 1. 比较运算符(θ运算)
    • 2. 区间匹配
    • 3. 集合匹配
    • 4. 模糊查询
    • 5. 空值判断
  • 六、多表连接与派生表结合
  • 七、总结


前言

  • 在前几期博客中,我们探讨了 SQL 连接查询,单表查询,嵌套查询,集合查询技术等知识点。
  • 从本节开始,我们将深入讲解 SQL 中基于派生表的查询的知识点。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482


一、什么是派生表?

一句话理解

  • 派生表是写在 FROM 子句中的子查询,它会先执行并生成一个临时表,供外层查询直接使用。
  • 这个临时表只在当前查询中有效,查询结束后自动删除。

核心特点

  1. 必须起别名(用 AS 或直接跟别名),否则语法错误。
    例:(SELECT Sno FROM SC) AS SC1(SELECT Sno FROM SC) SC1
  2. 用途:简化复杂查询,先计算中间结果(如分组统计),再与其他表连接或筛选。

二、派生表的使用示例

场景1:分组统计后过滤数据

需求:找出每个学生超过自己选修课程平均成绩的课程。
思路

  1. 先用子查询计算每个学生的平均成绩(派生表 Avg_sc)。
  2. 将原表 SC 与派生表通过学号 Sno 连接,筛选成绩高于平均分的记录。
SELECT SC.Sno, SC.Cno, SC.Grade
FROM SC,
(SELECT Sno, AVG(Grade) AS avg_grade FROM SC GROUP BY Sno) AS Avg_sc
WHERE SC.Sno = Avg_sc.Sno AND SC.Grade >= Avg_sc.avg_grade;

场景2:替代临时表查询

需求:查询选修了“81001”号课程的学生姓名。
思路

  1. 先用子查询找出选了该课程的学号(派生表 SC1)。
  2. 将学生表 Student 与派生表通过学号连接,获取姓名。
SELECT Student.Sname
FROM Student,
(SELECT Sno FROM SC WHERE Cno = '81001') AS SC1
WHERE Student.Sno = SC1.Sno;

三、SELECT语句核心结构

SELECT [列名/表达式] -- 要查询的结果
FROM1 [别名],2 [别名], ... -- 数据来源(可包含派生表)
WHERE 条件 -- 筛选行(如成绩>80)
GROUP BY 列名 -- 按某列分组(如按学生分组统计平均分)
HAVING 条件 -- 筛选分组结果(如只保留平均分>85的组)
ORDER BY 列名 [ASC/DESC] -- 排序(ASC升序,DESC降序)

关键说明

  • FROM 子句:可以是真实表或派生表(子查询),多个表用逗号分隔。
  • WHEREHAVING 区别
    • WHERE:过滤原始数据行(分组前生效)。
    • HAVING:过滤分组后的结果(分组后生效,需配合 GROUP BY)。

四、常用聚集函数

函数作用示例
COUNT()统计行数COUNT(Sno):统计学号数量
SUM()求和SUM(Grade):总分
AVG()求平均值AVG(Grade):平均分
MAX()最大值MAX(Grade):最高成绩
MIN()最小值MIN(Grade):最低成绩

用法注意

  • 常与 GROUP BY 配合使用(如按学生分组算平均分)。
  • 示例:
    SELECT Sno, AVG(Grade) AS avg_grade 
    FROM SC 
    GROUP BY Sno; -- 按学号分组,计算每人平均分
    

五、WHERE子句

1. 比较运算符(θ运算)

  • 符号=(等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)、!=(不等于)。
  • 示例
    SELECT * FROM SC WHERE Grade >= 80; -- 成绩≥80分的记录
    

2. 区间匹配

  • 作用:筛选在某个区间内的数据(包含边界)。
  • 示例
    SELECT * FROM SC 
    WHERE Grade BETWEEN 80 AND 90; -- 成绩在80-90分之间的记录
    

3. 集合匹配

  • 作用:判断值是否在指定集合中。
  • 示例
    SELECT * FROM Student 
    WHERE Sno IN ('20180001', '20180002'); -- 学号为指定值的学生
    

4. 模糊查询

  • 通配符
    • %:匹配任意多个字符(如 '张%' 匹配姓张的人)。
    • _:匹配单个字符(如 '_立' 匹配第二个字是“立”的人)。
  • 示例
    SELECT * FROM Student 
    WHERE Sname LIKE '李%'; -- 姓名以“李”开头的学生
    

5. 空值判断

  • 示例
    SELECT * FROM SC WHERE Grade IS NULL; -- 成绩为空的记录
    

六、多表连接与派生表结合

需求:查询选修“81001”课程的学生学号、姓名和等级(等级由 mark 表定义)。
数据关系

  • SC 表存储成绩,Student 表存储学生信息,mark 表存储等级对应的分数区间。

SQL语句

SELECT SC.Sno, Student.Sname, mark.score -- 选择学号、姓名、等级
FROM SC, Student, mark -- 连接三个表(SC、Student、mark)
WHERE SC.Sno = Student.Sno -- 学生表与SC表通过学号连接AND SC.Cno = '81001' -- 筛选课程号为81001AND SC.Grade BETWEEN mark.low AND mark.high -- 成绩匹配等级区间
ORDER BY mark.score DESC, SC.Sno ASC; -- 按等级降序、学号升序排序

执行逻辑

  1. 先通过 BETWEEN 匹配 SC 表成绩与 mark 表的等级区间,得到每个成绩对应的等级。
  2. 再通过学号连接 Student 表,获取学生姓名。
  3. 最后按要求排序结果。

七、总结

  • 简化复杂查询:将中间计算结果(如分组统计)封装成临时表,避免重复书写子查询。
  • 逻辑清晰:通过别名让代码更易读(如 AS Avg_sc 表示平均成绩表)。
  • 注意事项
    • 派生表必须有别名。
    • 连接时需确保列名匹配(如学号 Sno 必须在两表中存在)。

以上就是这篇博客的全部内容,下一篇我们将继续探索更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的数据库系统概论专栏
https://blog.csdn.net/2402_83322742/category_12911520.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述


http://www.hkcw.cn/article/YjaqsFRgMU.shtml

相关文章

二、Sqoop 详细安装部署教程

作者&#xff1a;IvanCodes 日期&#xff1a;2025年6月2日 专栏&#xff1a;Sqoop教程 Apache Sqoop 是一个强大的工具&#xff0c;用于在 Hadoop (HDFS, Hive, HBase) 与关系型数据库 (如 MySQL, PostgreSQL, Oracle) 之间高效传输数据。本教程将详细指导您如何根据官方网站截…

【烧脑算法】不定长滑动窗口:从动态调整到精准匹配以灵活特性实现高效破题

目录 求最长/最大 2730. 找到最长的半重复子字符串 2779. 数组的最大美丽值 1838. 最高频元素的频数 2516. 每种字符至少取 K 个 2831. 找出最长等值子数组 求最短/最小 1234. 替换子串得到平衡字符串 2875. 无限数组的最短子数组 76. 最小覆盖子串 632. 最小区间 …

一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录——3. 服务器软件更新,以及常用软件安装

前言 前面&#xff0c;我们已经 安装好了 Ubuntu 服务器系统&#xff0c;并且 配置好了 ssh 免密登录服务器 &#xff0c;现在&#xff0c;我们要来进一步的设置服务器。 那么&#xff0c;本文&#xff0c;就是进行服务器的系统更新&#xff0c;以及常用软件的安装 调整 Ubu…

JSP、HTML和Tomcat

9x9上三角乘法表 乘法表的实现 <% page contentType"text/html;charsetUTF-8" language"java" %> <!DOCTYPE html> <html> <head><title>99 上三角乘法表</title><style>body {font-family: monospace;padding…

概率统计:AI大模型的数学支柱

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

打造极致计算器:HTML+Tailwind+DaisyUI实战

一、计算器总体描述 创建一个在线计算器来实现基础数学运算功能&#xff0c;通过单一页面集成数字按钮、运算符按钮和显示结果区域&#xff0c;界面采用简洁直观的布局设计&#xff0c;按钮排列合理且提供即时运算反馈&#xff0c;确保计算逻辑准确和良好的按键响应体验&#x…

使用 HTML + JavaScript 实现图片裁剪上传功能

本文将详细介绍一个基于 HTML 和 JavaScript 实现的图片裁剪上传功能。该功能支持文件选择、拖放上传、图片预览、区域选择、裁剪操作以及图片下载等功能&#xff0c;适用于需要进行图片处理的 Web 应用场景。 效果演示 项目概述 本项目主要包含以下核心功能&#xff1a; 文…

【存储基础】存储设备和服务器的关系和区别

文章目录 1. 存储设备和服务器的区别2. 客户端访问数据路径场景1&#xff1a;经过服务器处理场景2&#xff1a;客户端直连 3. 服务器作为"中转站"的作用 刚开始接触存储的时候&#xff0c;以为数据都是存放在服务器上的&#xff0c;服务器和存储设备是一个东西&#…

SwinTransformer改进(13):融合CPCA注意力

1.创新点介绍 引言 本文将深入解析一个创新的CNN模型架构,它巧妙地将Swin Transformer与自定义的通道-位置交叉注意力(CPCA) 模块相结合。这种设计在保持Transformer强大特征提取能力的同时,通过注意力机制增强了模型对关键特征的聚焦能力。 1. CPCA注意力模块 class CP…

乌方提议6月底前俄乌进行下一轮谈判 等待俄方回应

6月2日,俄乌第二轮谈判在伊斯坦布尔的契拉昂宫举行。乌克兰国防部长乌梅罗夫表示,乌克兰提议在6月底之前再次与俄方会面,但俄方尚未对此做出回应。此次谈判由土耳其外长费丹主持。俄方代表团团长是俄总统助理梅金斯基,成员包括俄副外长加卢津、俄武装力量总参谋部总局局长科…

韩大选热度或打破纪录 政坛洗牌在即

韩国政坛即将迎来新一轮洗牌。6月3日,韩国将提前举行第21届总统选举。原定于2027年的大选因前总统尹锡悦在去年12月初发动戒严并于今年4月4日被弹劾而提前两年多举行。根据韩国宪法规定,总统被罢免后必须在6个月内举行总统选举。此次大选吸引了朝野两党的多位候选人参与,最终…

【LLM 指令遵循】论文分享:ULTRAIF

论文名称&#xff1a;UltraIF: Advancing Instruction Following from the Wild 论文链接&#xff1a;https://arxiv.org/abs/2502.04153 机构&#xff1a;上海AI Lab 北大 清华 Github代码链接&#xff1a;https://github.com/kkk-an/UltraIF 数据集链接&#xff1a;https:/…

Ruoyi AI 部署指南:从环境搭建到项目运行

目录 一、项目概述 二、环境准备 1. Java 开发环境 2. 数据库 3. 缓存系统 4. 构建工具 5. 前端工具 三、后端项目部署 1. 下载项目 2. 导入项目 安装jdk17后没有jre ​编辑 3. 配置 Maven 4. 初始化数据库 5. 启动 Redis 6. 启动项目 四、前端项目部署 1. 管…

凹凸工坊_AI手写模拟器|可打印的手写稿|免抄写的工具,抄写罚抄神器,一键生成手写文稿,模仿手写软件,在线手写字体转换器,手写模拟器APP下载,打印出以假乱真的模拟手写文档,模拟抄写软件

推荐这个非常好用的免费 ai 手写模拟器网站&#x1f50d;「凹凸工坊-手写转换」 地址&#xff1a;凹凸工坊_凹凸工坊-手写转换官网入口_一键生成手写文稿_手写模拟器_手写字体在线转换_在线字体制作_手写APP下载_模仿手写软件_AI手写字体生成_手写字体生成器_字体下载https://…

芝士ai系统,宝藏的论文查重降重经验!

完成一篇论文的辛苦工作后&#xff0c;面对高查重率无疑是令人沮丧的。但不必担忧&#xff0c;芝士AI降重工具可以助你一臂之力。本文将探讨芝士AI如何帮助学者们有效降低查重率&#xff0c;确保论文的原创性和学术价值。让我们一起看看芝士AI如何让学术写作变得更轻松。 芝士…

IDEA + DeepSeek 实现 AI辅助编程,提升效率10倍(全网超详细的终极图文实战指南)

前言 在软件开发的世界里&#xff0c;每个开发者都经历过这样的困境——在重复的CRUD代码中机械劳动&#xff0c;为复杂的业务逻辑调试数小时&#xff0c;或是在海量文档中寻找某个API的正确用法。传统的IDE工具虽能提供基础支持&#xff0c;却难以突破效率的“玻璃天花板”。而…

开启智慧之旅,AI与机器学习驱动的微服务设计模式探索

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 🚀 转载自热榜文章🔥:探索设计模式的魅力:开启智慧之旅,AI与机器学习驱动的微服务设计模式探索(2024年04月21日 22:26:05目前全站综合热榜第三) ✨欢迎加入探索A…

探索GpuGeek:AI开发者与中小企业的算力宝藏平台

摘要&#xff1a;GpuGeek 作为面向 AI 开发者和中小企业的 AI 赋能平台&#xff0c;在 AI 时代具有重要意义。它提供丰富算力资源、多元框架工具等&#xff0c;涵盖深度学习项目、大模型研究等多方面&#xff0c;助力用户应对算力挑战&#xff0c;推动 AI 技术普及应用&#xf…

迁移学习:解锁AI高效学习与泛化能力的密钥

前言 在人工智能&#xff08;AI&#xff09;技术日新月异的今天&#xff0c;迁移学习&#xff08;Transfer Learning&#xff09;作为一项革命性技术&#xff0c;正深刻改变着机器学习领域的格局。 它不仅让模型能够像人类一样“举一反三”&#xff0c;更在加速模型开发、提升性…

王者归来!谷歌Gemini 2.5 Pro横扫全球AI榜单,国内用户终于可直接体验“最强大脑“

&#x1f31f; 嗨&#xff0c;我是Lethehong&#xff01;&#x1f31f; &#x1f30d; 立志在坚不欲说&#xff0c;成功在久不在速&#x1f30d; &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞⬆️留言收藏&#x1f680; &#x1f340;欢迎使用&#xff1a;小智初学计…