SQL 入门:从 SELECT 查询到多表连接

举报
yd_290385797 发表于 2026/10/31 11:39:20 2026/10/31
【摘要】 数据常常存放在关系型数据库的表里,学会 SQL,就能直接向数据提问。本文从 SELECT 讲起,依次讲筛选、排序、分组聚合,最后讲多表连接,帮助初学者建立清晰的学习路线。一、什么是表、行和列一张表像一张电子表格:行是一条记录,列是一个字段。学生表的一行代表一名学生,列有学号、姓名和专业;课程表的一行代表一门课程,列有课程编号、课程名和学分。写查询前先想清楚结果要哪些列、哪些行,再反推需要哪些...

数据常常存放在关系型数据库的表里,学会 SQL,就能直接向数据提问。本文从 SELECT 讲起,依次讲筛选、排序、分组聚合,最后讲多表连接,帮助初学者建立清晰的学习路线。


一、什么是表、行和列


一张表像一张电子表格:行是一条记录,列是一个字段。学生表的一行代表一名学生,列有学号、姓名和专业;课程表的一行代表一门课程,列有课程编号、课程名和学分。写查询前先想清楚结果要哪些列、哪些行,再反推需要哪些表和条件,往往比直接拼语句更有效。


二、第一个查询:SELECT 与 FROM


SELECT name, major FROM students; 表示从学生表取出姓名和专业。SELECT 说明要什么,FROM 说明从哪里取。星号代表全部列,适合快速查看表结构,但正式使用建议明确列出字段,结果更清晰,传输也更少。别名如 name AS 姓名,只改变显示名称,不改变数据本身。


三、用 WHERE 筛选出想要的行


WHERE 用于筛选行,例如 WHERE major = '计算机科学与技术',只返回该专业的学生。AND 表示同时满足,OR 表示满足其一,NOT 表示取反。数值可用大于等于和 BETWEEN,文本可用 LIKE,如 name LIKE '张%' 表示姓氏为张的记录。空值不能用等号判断,要用 IS NULL 或 IS NOT NULL,否则容易漏掉数据。


四、用 ORDER BY 和 LIMIT 控制顺序与数量


不写 ORDER BY,返回顺序并不保证。ORDER BY score DESC 表示按分数降序排列,ASC 表示升序,默认就是升序;也可以按多个字段排序,例如先按专业升序,再按分数降序。LIMIT 10 只取前十条,LIMIT 10 OFFSET 20 表示跳过前二十条再取十条,常用于分页,但页码越深效率通常越低。


五、分组与聚合:从明细到汇总


GROUP BY 把行按某列分组,再用聚合函数汇总:COUNT 计数,SUM 求和,AVG 求平均,MAX 和 MIN 取最大最小值。例如按专业分组,可以统计各专业的人数和平均分。需要注意执行顺序:WHERE 在分组之前筛选行,HAVING 在分组之后筛选组,例如 HAVING AVG(score) >= 80。


六、多表连接:把分散的数据拼起来


学生表只有学号和姓名,成绩表有学号、课程编号和分数,课程表有课程编号和课程名。要查某名学生选了哪些课,就要用共有的键把表连接起来。INNER JOIN 只返回两边都匹配的行,是最常用的连接;LEFT JOIN 保留左表全部行,右表没有匹配时补空值,适合统计包括未选课学生在内的全量名单。给表起简短别名,并用别名限定列名,可以避免同名列混淆。


七、常见误区与练习建议


常见错误有:忘记 WHERE 导致结果过大,连接时忘记 ON 条件导致行数暴涨,把 HAVING 与 WHERE 的顺序弄反,以及用等号判断空值。建议在小数据集上逐步练习:先写单表查询,再加排序和分组,最后做两表连接,每一步都检查返回行数是否合理。掌握这条路线后,再学习子查询、窗口函数和索引优化,会顺畅得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。