SQL Server单表查询实战:从导入到高级检索全解析

Theo
Theo
发布时间:2026-10-15 | 6人浏览过
原创

掌握SQL Server单表查询是数据分析的基础。本文通过实际案例,系统讲解如何执行数据导入后的验证,并详细演示SELECT语句的核心用法,包括指定返回列、复杂条件过滤(BETWEEN/LIKE/IS NULL)、结果集限制(TOP/DISTINCT)以及基于聚合函数的数据统计,帮助读者快速构建规范的查询逻辑。

一、数据准备与验证

在进行查询操作前,确保源数据已成功导入至数据库表中。以下是数据导入过程的可视化示意:

导入成功后,建议展开表格查看具体内容以确认数据完整性。此过程同样适用于其他相关数据表的导入工作,且支持批量导入:

二、核心查询场景与实现

以下通过具体例题,逐步演示SQL Server中常用的单表查询技术。

第1步:基础列选择与计算

目的:根据需求提取特定字段或进行基础计算。

查询所有学生的全部信息:*代表通配符,返回所有列。

SELECT * FROM student

查询学生的学号和姓名:明确指定需要的列名,提高查询效率。

SELECT sno,sname FROM student

查询所有学生的姓名和出生年:利用日期函数 GETDATE() 获取当前年份,减去年龄(sage)得到出生年份。

SELECT sname,YEAR(GETDATE())-sage FROM student

为计算列设置中文标题:使用空格或AS关键字重命名列,提升可读性。

SELECT sname 姓名,YEAR(GETDATE())-sage 出生年 FROM student

第2步:单条件过滤

目的:筛选满足特定单一条件的记录。

查询CS系的所有学生信息:使用 WHERE 子句配合等于号(=)。

select * FROM student WHERE sdept='CS'

查询姓张的学生信息:使用 LIKE 结合百分号(%)通配符,匹配任意后缀。

select * from student where sname like '张%'

查询姓名只有两个字且姓李的学生:使用下划线(_)匹配恰好一个字符。

select sno,sname from student WHERE sname LIKE '李_';

第3步:多条件组合与逻辑运算

目的:处理复杂的逻辑判断,如同时满足多个条件或排除特定范围。

查询CS系的所有男同学信息:使用 AND 连接两个条件,要求同时成立。

select * FROM student WHERE sdept='CS' AND ssex='男'

查询年龄在18到20之间的学生:提供两种写法。 (1) 使用比较运算符:>= 和 <=。

select * from student where sage>=18 and sage<=20

(2) 使用区间操作符:BETWEEN ... AND ...,包含边界值。

select * from student where sage BETWEEN 18 AND 20

查询年龄不在18到20之间的学生:对上述区间的取反。 (1) 使用逻辑非的组合:<18 OR >20。

select * from student where sage<18 or sage>20

(2) 使用 NOT BETWEEN。

select * from student where sage not BETWEEN 18 AND 20

查询所在系为CS和JD的学生:匹配多个离散值。 (1) 使用 OR 连接。

select * from student where sdept='CS' or sdept='JD'

(2) 使用 IN 集合操作,语法更简洁。

select * from student where sdept in('CS','JD')

查询没有成绩的學生:在数据库中,空值需用特殊关键字 IS NULL 判断,不能使用 =NULL。

select * from sc WHERE grade IS NULL;

第4步:结果集去重与限制

目的:优化输出结果,仅保留唯一值或限定返回行数。

消除重复行查看CS系年龄:使用 DISTINCT 关键字去除重复的记录值。

select DISTINCT sage FROM student WHERE sdept='cs'

查询前三个同学的信息:使用 TOP N 限制返回行数(适用于SQL Server)。

select TOP 3 * from student

第5步:聚合统计分析

目的:对数据进行数学汇总,如计数、求和、平均、最大最小值。

统计男学生人数:COUNT 用于计数。可以直接计数字段或使用星号。AS 用于给结果列起别名。

(1) 方法一:

select COUNT(sno) 男生人数 from student where ssex='男'

(2) 方法二:

select COUNT(*) AS 男生人数 from student where ssex='男'

统计选修过课程的学生人数(去重):若直接使用 COUNT(sno) 会重复计算选多门课的学生,需先 DISTINCT 再计数。

select COUNT(distinct sno) from sc

查询所有成绩中的最高分和最低分:使用 MAX() 和 MIN()。

select max(grade) 最高分,MIN(grade) 最低分 from sc

统计特定学生的总成绩和平均分:使用 SUM() 和 AVG(),通常需配合 WHERE 指定目标对象。

select SUM(grade) 总分,AVG(grade) 平均分 from sc where sno='1204304102'

三、关键技巧小结

1. 列别名的三种指定方式

在结果集中自定义列名称,提升报表可读性:

  • 空格分隔:直接写别名,如 sname 姓名。
  • AS关键字:显式声明,如 sname AS 姓名。
  • 等号赋值:将别名写在左边,如 院系=sdept。
select sname 姓名, YEAR(GETDATE())-sage as 出生年, 院系=sdept from student

2. 模糊查询模式总结 (LIKE)

需求描述 SQL表达式
查询姓张的学生(后续任意字) WHERE sname like '张%'
查询姓黄且名字仅两字的学生 WHERE sname like '黄_'
查询名字中包含“文”字的學生(前后各一字) WHERE sname like '_文_'

3. 排序与分页扩展

查询结果常需按特定顺序展示,可结合 ORDER BY 使用:

降序排列特定课程分数:DESC 表示降序(Descending),默认为升序 ASC。

select grade from sc where cno='2102' order by grade desc

获取排在前几名的记录:结合 TOP 和 ORDER BY 可快速获取头部数据。

select TOP 2 grade from sc where cno='2102' order by grade desc

以上就是SQL Server单表数据查询的详细内容,更多关于SQL Server基础查询与优化的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表