7.1 SQL Server查询基础
SQL Server SELECT基础
SELECT查询简介
数据库表是存储数据库中所有数据的对象。在表格中,数据按行和列格式进行逻辑组织,类似于电子表格。
SQL Server使用架构(schemas)对表和其他数据库对象进行逻辑分组。SQL Server默认的架构是dbo
,所以通常你会看到dbo.table_name
.比如我们可以有两个架构(Schema):sales
(销售)和production
(产品)。sales
架构将所有销售相关表分组,而production
架构将所有生产相关表分组。
这样跟有利于分类管理数据库表。
我们通过SELECT
语句查询表中的数据,最基础的语法如下:
SELECT select_list FROM schema_name.table_name;
在这个语法中:
- 首先,在
SELECT
子句中指定要返回那些数据列,并用逗号分隔。 - 其次,在
FROM
子句中指定从那张表中查询数据。
在处理SELECT
语句时,SQL Server会先处理FROM
子句,然后再处理SELECT
子句,即使SELECT
子句首先出现在查询中。
SELECT示例
先创建一个学生表:
create table dbo.Students ( Id int primary key identity(1,1), -- 每添加一条数据,Id从1开始,每次自增1 NickName nvarchar(15), -- unicode StudentNo char(11) , -- 学号 ClassName nvarchar(10),--班级名 Sex nchar(2), Account varchar(20), -- 账号 [Password] varchar(50) -- 密码 );
添加几行数据:
insert into dbo.Students values ('张三','2001','男','user1','123456','一班'), ('李四','2002','男','user2','123456','二班'), ('王五','2003','女','user3','123456','一班'), ('王麻子','2004','男','user4','123456','一班')
SQL Server SELECT – 返回表的部分列
下列查询返回所有学生的昵称和性别。
SELECT NickName, Sex FROM dbo.Students;
结果:
SQL Server SELECT – 返回表的所有列
要返回所有列的话,可以指定SELECT
列表中的所有列。也可以使用SELECT *
作为简写:
SELECT * FROM Students; --或者 SELECT Id, NickName, StudentNo, Sex, Account, [Password] FROM Students;
结果:
在非生产环境中,可以使用SELECT *
来简化操作。
但是,由于以下原因,不应将SELECT *
用于生产代码:
- 首先,
SELECT *
通常返回的数据多于应用程序所需的数据。这会导致不必要的数据从SQL Server传输到客户端应用程序,使数据在网络上传输花费更多时间,并降低应用程序的速度。 - 其次,如果表中添加了一个或多个新列,
SELECT *
返回所有包含新添加列的列,新添加的这些列在程序中没有处理。这可能会导致应用程序崩溃。
SQL Server SELECT – 对结果集进行排序
要根据一个或多个条件筛选行,请使用WHERE
子句:
SELECT * FROM Students WHERE NickName='李四';
结果:
这个例子中,查询返回昵称为"李四"的学生。
当WHERE
子句可用时,SQL Server将按以下顺序处理查询的子句:FROM
、WHERE
和SELECT
:
要根据一列或多列对结果集进行排序,请使用ORDER BY子句,如下例所示:
SELECT * FROM Students WHERE Sex='男' ORDER BY StudentNo;
结果:
这个例子中,查询性别为"男"的学生,并将结果按照学号升序排序。
SQL Server处理上述查询的顺序如下:
SQL Server SELECT – 将查询结果进行分组
要将行分组,可以使用GROUP BY
子句。例如,下面的语句返回每个班级男生学生的数量:
SELECT ClassName AS 班级名, COUNT(*) AS 人数 FROM Students WHERE Sex='男' GROUP BY ClassName ORDER BY ClassName;
结果:
在本例中,SQL Server按以下顺序处理子句:FROM
、WHERE
、GROUP BY
、SELECT
和ORDER BY
:
SQL Server SELECT – 对分组进行过滤
要根据一个或多个条件筛选组,请使用HAVING
子句。下面的示例返回班级男学生人数大于等于2的班级:
SELECT ClassName AS 班级名, COUNT(*) AS 人数 FROM Students WHERE Sex='男' GROUP BY ClassName HAVING COUNT (*) >= 2 ORDER BY ClassName;
结果:
在本例中,SQL Server按以下顺序处理子句:FROM
、WHERE
、GROUP BY
、HAVING
、SELECT
和ORDER BY
注意:请注意,
WHERE
子句过滤行,而HAVING
子句过滤分组。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器