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 的顺序弄反,以及用等号判断空值。建议在小数据集上逐步练习:先写单表查询,再加排序和分组,最后做两表连接,每一步都检查返回行数是否合理。掌握这条路线后,再学习子查询、窗口函数和索引优化,会顺畅得多。
- 点赞
- 收藏
- 关注作者
评论(0)