news 2026/2/11 4:41:36

SQL小白必学:WITH AS基础入门图解教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL小白必学:WITH AS基础入门图解教程

快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
创建一个面向初学者的WITH AS教学示例,要求:1) 从最简单的单层CTE开始 2) 用学生成绩数据库(学生表、课程表、成绩表)做示例 3) 分步骤动画演示CTE的数据流动 4) 最后用CTE计算每个班级的平均分排名。输出应包含大量注释和可视化解释,避免使用专业术语。
  1. 点击'项目生成'按钮,等待项目生成完整后预览效果

作为一个刚开始学习SQL的小白,我最近被WITH AS这个语法搞得很头疼。经过一番摸索和实践,终于搞明白了它的基本用法。今天就用最通俗的语言,结合学生成绩的例子,给大家分享一下我的学习心得。

1. 什么是WITH AS

WITH AS又叫公共表表达式(CTE),可以理解为临时给查询结果起个名字,方便后续重复使用。就像我们做数学题时,先算出中间结果,后面直接引用这个结果,不用每次都重新计算。

2. 最简单的单层CTE示例

假设我们有一个学生表students,包含学号、姓名和班级信息。想找出1班的所有学生,可以这样写:

WITH class1_students AS ( SELECT * FROM students WHERE class = '1班' ) SELECT * FROM class1_students;

这个例子中,我们先定义了一个叫class1_students的临时表,里面只包含1班的学生,然后在主查询中直接使用这个临时表。

3. 学生成绩数据库示例

现在我们用一个更完整的例子来说明。假设数据库有三张表:

  • students表:学号、姓名、班级
  • courses表:课程号、课程名
  • scores表:学号、课程号、分数

4. 分步骤理解CTE的数据流动

  1. 首先,我们创建一个CTE,计算每个学生的平均分:
WITH student_avg AS ( SELECT s.student_id, s.name, AVG(sc.score) as avg_score FROM students s JOIN scores sc ON s.student_id = sc.student_id GROUP BY s.student_id, s.name )
  1. 然后,在主查询中使用这个CTE:
SELECT * FROM student_avg ORDER BY avg_score DESC;

这样就能看到所有学生按平均分从高到低排序的结果了。

5. 计算每个班级的平均分排名

最后,我们来解决更复杂一点的问题:计算每个班级的平均分排名。这里需要用到两个CTE:

  1. 第一个CTE计算每个学生的平均分(同上)
  2. 第二个CTE基于第一个CTE的结果,计算每个班级的平均分
WITH student_avg AS ( SELECT s.student_id, s.name, s.class, AVG(sc.score) as avg_score FROM students s JOIN scores sc ON s.student_id = sc.student_id GROUP BY s.student_id, s.name, s.class ), class_avg AS ( SELECT class, AVG(avg_score) as class_avg_score FROM student_avg GROUP BY class ) SELECT class, class_avg_score, RANK() OVER (ORDER BY class_avg_score DESC) as rank FROM class_avg;

这个查询会返回每个班级的平均分,并按平均分高低给出排名。

6. 使用CTE的好处

  • 使复杂查询更清晰:把大查询拆分成小部分
  • 避免重复计算:定义一次,多次使用
  • 提高可读性:给中间结果起有意义的名字

7. 常见错误

刚开始使用时容易犯的错误:

  • 忘记在CTE定义后加逗号(当有多个CTE时)
  • CTE只在当前查询中有效,不能在其他查询中使用
  • 在CTE中引用了后面才定义的CTE

8. 实际应用建议

在实际工作中,我建议:

  1. 先从简单查询开始练习
  2. 逐步增加复杂度
  3. 给CTE起有意义的名称
  4. 适当添加注释

通过InsCode(快马)平台,我能够快速测试这些SQL查询,无需安装任何软件,直接在浏览器中就能运行和验证结果。平台的一键执行功能特别方便,修改代码后立即能看到结果,对学习SQL帮助很大。

对于想学习SQL的新手来说,这种即时反馈的学习方式效率很高。我经常在这里练习各种SQL查询,遇到问题还能随时调整代码重新运行,比在本地搭建环境方便多了。

快速体验

  1. 打开 InsCode(快马)平台 https://www.inscode.net
  2. 输入框内输入如下内容:
创建一个面向初学者的WITH AS教学示例,要求:1) 从最简单的单层CTE开始 2) 用学生成绩数据库(学生表、课程表、成绩表)做示例 3) 分步骤动画演示CTE的数据流动 4) 最后用CTE计算每个班级的平均分排名。输出应包含大量注释和可视化解释,避免使用专业术语。
  1. 点击'项目生成'按钮,等待项目生成完整后预览效果

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/5 17:22:54

AI如何帮你快速搭建Redis管理工具?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个基于Web的Redis管理工具,包含以下功能:1.可视化连接多个Redis实例 2.支持常见的键值操作(增删改查)3.实时监控Redis性能指标…

作者头像 李华
网站建设 2026/2/10 10:36:00

零基础认识NPU:从手机芯片到AI加速器

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 制作一个交互式学习页面:1. 用Three.js可视化NPU矩阵运算过程 2. 包含可调节的模拟参数(MAC单元数量/频率)3. 对比不同架构吞吐量 4. 集成WebNN…

作者头像 李华
网站建设 2026/2/5 10:37:18

这一届土木工程人,正在疯狂转行网络安全!

一直以来,土木工程都被列为天坑专业,工地提桶吃灰、加班加点无休,从入行到提桶跑路,往往只需要半年。 网上有许多土木专业同学的扎心吐槽,每个人在熬个一年半载后,最终往往都会选择转行****。**** 转行只需…

作者头像 李华
网站建设 2026/2/4 7:24:44

零基础转行信息安全,老师傅来支招(2025年最新数据支撑)

零基础转行信息安全,老师傅来支招(2025年最新数据支撑) 现在这个环境下,转行做信息安全的人已经越来越少了,但还是有热爱这一行的人。 今天,我们以零基础入行为例,按照下面的成长路径&#xf…

作者头像 李华
网站建设 2026/2/8 8:43:38

10.2 核心技术解析:词嵌入与RAG工作流程详解

核心技术解析:词嵌入与RAG工作流程详解 课程概述 在上一节课中,我们学习了RAG技术的基本概念及其解决的核心问题。本节课我们将深入RAG的技术内核,重点解析两个关键技术组成部分: 词嵌入(Embedding)技术——实现语义相似度计算的基础 RAG工作流程——从问题输入到答案输…

作者头像 李华
网站建设 2026/2/4 22:56:50

企业级虚拟化环境中的Hyper-V冲突实战解决指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个企业级虚拟化环境诊断工具,专门处理Hyper-V与其他虚拟化平台(VMware, VirtualBox等)的兼容性问题。功能包括:1. 深度系统扫描;2. 冲突可…

作者头像 李华