SQL Server 基础教程
目录
-
第一部分:入门准备
(图片来源网络,侵删)- 什么是 SQL Server?
- 什么是 SQL?
- 安装 SQL Server (简化版:使用 SQL Server Express LocalDB)
- 安装和管理工具 (SSMS - SQL Server Management Studio)
-
第二部分:核心概念
- 数据库
- 表
- 行 和 列
- 数据类型
-
第三部分:SQL 语言核心
- SQL 语言简介
SELECT- 从表中查询数据WHERE- 过滤查询结果ORDER BY- 对结果排序INSERT INTO- 向表中插入新数据UPDATE- 更新表中的数据DELETE- 删除表中的数据
-
第四部分:进阶操作
JOIN- 连接多张表GROUP BY和聚合函数 (COUNT,SUM,AVG,MAX,MIN)- 创建和管理表 (
CREATE TABLE,ALTER TABLE,DROP TABLE)
-
第五部分:总结与下一步
(图片来源网络,侵删)
第一部分:入门准备
什么是 SQL Server?
SQL Server 是由微软开发的一个关系型数据库管理系统,你可以把它想象成一个高度专业化、非常安全的“数字文件柜”,专门用于存储、管理和检索结构化数据,它被广泛应用于企业级应用程序、网站、桌面软件等各个领域。
什么是 SQL?
SQL (Structured Query Language,结构化查询语言) 是与 SQL Server 等关系型数据库沟通的标准语言,无论你使用的是 SQL Server、MySQL、PostgreSQL 还是 Oracle,你写的 SQL 语句都非常相似,SQL 是你用来告诉数据库“存什么数据”、“怎么取数据”的工具。
安装 SQL Server (简化版)
对于初学者,我们推荐安装 SQL Server Express 版本,它是免费的,功能也足够学习使用。
-
最简单的方式:安装 LocalDB LocalDB 是 SQL Server Express 的一个轻量级版本,它不需要复杂的配置,会作为 Windows 服务的一部分自动启动,非常适合本地开发和学习。
(图片来源网络,侵删)- 访问微软官方下载页面:SQL Server Express 下载
- 选择 "Express" 版本,然后选择 "Download SQL Server 2025 Express LocalDB"。
- 下载后运行安装程序,按照向导提示完成即可,通常只需要点击“下一步”直到结束。
安装和管理工具 (SSMS)
安装完数据库引擎后,你需要一个图形化工具来管理它,这就是 SQL Server Management Studio (SSMS)。
- 下载 SSMS: 访问 SSMS 下载页面,下载并安装最新版本。
- 连接到数据库:
- 打开 SSMS。
- 在“连接到服务器”窗口中:
- 服务器类型:默认为“数据库引擎”即可。
- 服务器名称:输入
(localdb)\MSSQLLocalDB,这是 LocalDB 的默认名称。 - 身份验证:选择“Windows 身份验证”,这意味着使用你的 Windows 用户名和密码登录,最简单。
- 连接:点击连接。
连接成功后,你会看到一个对象资源管理器,左侧列出了你的服务器、数据库等信息。
第二部分:核心概念
在写 SQL 之前,必须理解数据库的基本结构。
- 数据库:一个数据库就是一个完整的数据集合,就像一个 Excel 文件,一个 SQL Server 实例(你的 LocalDB)可以包含多个数据库。
- 表:数据库中存储数据的基本单位,它类似于 Excel 文件中的一张工作表,每个表都有一个特定的主题,学生表”、“产品表”。
- 行:表中的一条记录,学生表”中的一行就代表一个学生的所有信息(学号、姓名、年龄等)。
- 列:表中的一个字段,学生表”中的“姓名”列,存储了所有学生的姓名。
- 数据类型:定义列可以存储什么类型的数据。
INT:整数 (如年龄、学号)VARCHAR(n):可变长度的字符串 (如姓名、地址)DATETIME:日期和时间 (如出生日期、订单时间)DECIMAL(p,s):精确的十进制数 (如价格、工资)
第三部分:SQL 语言核心
所有 SQL 语句都以一个命令动词开头,后跟子句,我们将在 SSMS 的“新建查询”窗口中编写和执行这些语句。
SELECT - 查询数据
这是最常用的命令,用于从表中检索数据。
-- 语法:SELECT 列名 FROM 表名; -- 示例1:查询 "Students" 表中所有学生的所有信息 SELECT * FROM Students; -- 示例2:只查询 "Students" 表中所有学生的姓名和年龄 SELECT StudentName, Age FROM Students;
提示: 是一个通配符,表示“所有列”,在实际项目中,应尽量避免使用
SELECT *,而是明确写出所需的列名,这样可以提高查询性能和代码可读性。
WHERE - 过滤数据
WHERE 子句用于根据指定条件过滤结果,只返回满足条件的行。
-- 语法:SELECT 列名 FROM 表名 WHERE 条件;
-- 示例:查询年龄大于 20 的学生
SELECT StudentName, Age FROM Students WHERE Age > 20;
-- 示例:查询名字叫 "张三" 的学生
SELECT * FROM Students WHERE StudentName = '张三'; -- 字符串用单引号括起来
-- 示例:查询年龄在 18 到 22 之间的学生 (包括18和22)
SELECT * FROM Students WHERE Age BETWEEN 18 AND 22;
-- 示例:查询名字是 "李四" 或 "王五" 的学生
SELECT * FROM Students WHERE StudentName IN ('李四', '王五');
常用运算符:
- (等于), 或
<>(不等于)>(大于),<(小于),>=(大于等于),<=(小于等于)BETWEEN ... AND ...(在...之间)IN (value1, value2, ...)(在列表中)LIKE(模式匹配,WHERE Name LIKE '张%'查找所有姓张的人)AND(,OR(或者)
ORDER BY - 排序结果
ORDER BY 子句用于将查询结果按一个或多个列进行升序 (ASC) 或降序 (DESC) 排列,默认是升序。
-- 语法:SELECT 列名 FROM 表名 WHERE 条件 ORDER BY 列名 [ASC|DESC]; -- 示例:按年龄升序排列所有学生 SELECT StudentName, Age FROM Students ORDER BY Age ASC; -- 示例:按年龄降序排列所有学生 SELECT StudentName, Age FROM Students ORDER BY Age DESC; -- 示例:先按年龄升序,如果年龄相同,再按姓名降序排列 SELECT StudentName, Age FROM Students ORDER BY Age ASC, StudentName DESC;
INSERT INTO - 插入数据
用于向表中添加新的行。
-- 语法1:为所有列插入数据
INSERT INTO 表名 VALUES (值1, 值2, ...);
-- 语法2:为指定列插入数据(推荐)
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
-- 示例:向 Students 表中插入一个新学生
INSERT INTO Students (StudentName, Age, Gender)
VALUES ('赵六', 21, '男');
UPDATE - 更新数据
用于修改表中已存在的数据。非常重要:UPDATE 语句一定要配合 WHERE 使用,否则会更新表中的所有行!
-- 语法:UPDATE 表名 SET 列名1 = 新值1, 列名2 = 新值2 WHERE 条件; -- 示例:将学号为 1 的学生的年龄改为 22 UPDATE Students SET Age = 22 WHERE StudentID = 1;
DELETE - 删除数据
用于从表中删除行。同样重要:DELETE 语句一定要配合 WHERE 使用,否则会清空整个表!
-- 语法:DELETE FROM 表名 WHERE 条件; -- 示例:删除名字为 "赵六" 的学生记录 DELETE FROM Students WHERE StudentName = '赵六';
第四部分:进阶操作
JOIN - 连接多张表
在实际应用中,数据通常被分散在不同的表中,以减少冗余。JOIN 操作用于根据两个或多个表之间的相关列,将这些表的行组合起来。
假设我们有另一张表 Scores:
| ScoreID | StudentID | Subject | Score |
| :--- | :--- | :--- | :--- |
| 1 | 1 | 数学 | 95 |
| 2 | 2 | 数学 | 88 |
| 3 | 1 | 英语 | 90 |
-- 示例:查询每个学生的姓名和他们数学的分数
SELECT
s.StudentName,
sc.Subject,
sc.Score
FROM
Students AS s -- 给表起别名,方便引用
INNER JOIN
Scores AS sc ON s.StudentID = sc.StudentID -- 连接条件:学生ID相等
WHERE
sc.Subject = '数学';
INNER JOIN只返回两个表中匹配的行,如果某个学生没有数学成绩,他/她就不会出现在结果中。
GROUP BY 和聚合函数
聚合函数对一组值执行计算,并返回单个值。GROUP BY 子句通常与聚合函数一起使用,将结果集按一个或多个列进行分组。
-- 常用聚合函数:
-- COUNT(): 计数
-- SUM(): 求和
-- AVG(): 平均值
-- MAX(): 最大值
-- MIN(): 最小值
-- 示例:计算每个学生的平均分
SELECT
s.StudentName,
AVG(sc.Score) AS AverageScore -- 使用 AS 给列起别名
FROM
Students AS s
INNER JOIN
Scores AS sc ON s.StudentID = sc.StudentID
GROUP BY
s.StudentName; -- 按 StudentName 分组
创建和管理表
你可以使用 SQL 语句来创建、修改和删除表。
-- 创建一个新表
CREATE TABLE Courses (
CourseID INT PRIMARY KEY, -- 主键,唯一标识每一行
CourseName VARCHAR(100) NOT NULL, -- NOT NULL 表示此列不能为空
Credit INT
);
-- 修改表:添加一个新列
ALTER TABLE Courses
ADD Description VARCHAR(255);
-- 删除表 (危险操作!)
-- DROP TABLE Courses;
第五部分:总结与下一步
恭喜你!你已经掌握了 SQL Server 的基础知识和核心 SQL 操作。
回顾一下我们学了什么:
- 环境准备:安装了 LocalDB 和 SSMS。
- 核心概念:理解了数据库、表、行、列和数据类型。
- CRUD 操作:学会了如何创建、读取 (
SELECT)、更新 (UPDATE) 和删除 (DELETE) 数据。 - 进阶查询:学会了如何过滤 (
WHERE)、排序 (ORDER BY)、连接 (JOIN) 表和使用聚合函数 (GROUP BY)。
下一步可以学习什么?
- 索引:学习如何创建索引来大幅提升查询速度。
- 视图:学习如何创建虚拟表,简化复杂查询。
- 存储过程:学习如何将一组 SQL 语句封装成一个可重复调用的单元。
- 事务:学习如何确保一组操作要么全部成功,要么全部失败,保证数据一致性。
- SQL Server 高级功能:如触发器、用户定义函数等。
学习编程最好的方法就是多动手实践,尝试自己创建几张表,插入一些数据,然后练习各种查询语句,祝你学习顺利!
