SQL Server 实例教程:从零开始到实战应用
本教程分为以下几个部分,你可以根据自己的需求选择学习路径:

- 第一部分:SQL Server 简介与环境搭建
- 第二部分:SQL 基础语法(核心)
- 第三部分:SQL Server 高级对象
- 第四部分:T-SQL 编程与函数
- 第五部分:数据库管理与维护
- 第六部分:实战项目案例
- 第七部分:学习资源与进阶方向
第一部分:SQL Server 简介与环境搭建
什么是 SQL Server?
SQL Server 是由微软开发的关系型数据库管理系统,它使用 Transact-SQL (T-SQL) 作为其主要的查询语言,RDBMS 的核心思想是数据存储在由行和列组成的二维表中,表之间可以通过键(如主键、外键)建立关系。
版本选择
- SQL Server Developer Edition: 功能最全,免费,但仅限开发、测试和学习使用,不能用于生产环境,非常适合个人开发者。
- SQL Server Express Edition: 免费版,有数据库大小和内存使用的限制(数据库最大 10GB),适合小型应用和个人学习。
- SQL Server Enterprise Edition: 功能最强大的商业版本,用于大型企业级生产环境,需要付费。
建议初学者: 下载 SQL Server Developer Edition。
环境搭建
你需要安装两个核心组件:
- SQL Server Database Engine: 数据库的核心服务,负责存储和处理数据。
- SQL Server Management Studio (SSMS): 一个图形化管理工具,让你可以方便地连接、管理和查询数据库。
安装步骤(简述):

- 访问 SQL Server Developer Edition 下载页面。
- 选择 "Developer - free" 版本,下载安装程序。
- 运行安装程序,选择“基本安装”或“自定义安装”,对于初学者,“基本安装”通常足够。
- 在安装过程中,你需要设置一个强密码,这是
sa(系统管理员)账户的密码,请务必记住。 - 安装完成后,下载并安装 SSMS。
- 打开 SSMS,输入服务器名称(通常是你的计算机名)、用户名
sa和你设置的密码,点击“连接”。
第二部分:SQL 基础语法(核心)
这是 SQL 的核心,所有操作都基于此,我们将在一个名为 MyFirstDB 的数据库上进行操作。
创建和选择数据库
-- 创建一个新数据库 CREATE DATABASE MyFirstDB; -- 使用(切换到)这个数据库 USE MyFirstDB;
创建表
CREATE TABLE 语句用于创建表,你需要定义列名、数据类型和约束。
实例:创建一个 Employees 表
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY, -- 员工ID,整数类型,主键(唯一且非空)
FirstName NVARCHAR(50) NOT NULL, -- 名字,可变长度字符串,不能为空
LastName NVARCHAR(50) NOT NULL, -- 姓氏,同上
BirthDate DATE, -- 出生日期,日期类型
Salary DECIMAL(10, 2), -- 薪资,10位数字,其中2位小数
DepartmentID INT -- 部门ID,外键(稍后我们会创建外键约束)
);
常用数据类型:

INT: 整数NVARCHAR(n): Unicode 可变长度字符串,支持多语言(如中文)VARCHAR(n): 非 Unicode 可变长度字符串DATE: 只包含日期 (YYYY-MM-DD)DATETIME: 包含日期和时间DECIMAL(p, s): 精确数值,p是总位数,s是小数位数BIT: 布尔值 (0 或 1)
常用约束:
PRIMARY KEY: 主键,唯一标识表中的每一行。NOT NULL: 列不能为空。FOREIGN KEY: 外键,用于建立两个表之间的链接。UNIQUE: 唯一约束,确保列中的所有值都是唯一的。DEFAULT: 设置列的默认值。
插入数据
INSERT INTO 语句用于向表中添加新数据。
-- 插入一条完整记录
INSERT INTO Employees (EmployeeID, FirstName, LastName, BirthDate, Salary, DepartmentID)
VALUES (1, '张', '三', '1990-05-15', 8500.50, 101);
-- 插入多条记录
INSERT INTO Employees (EmployeeID, FirstName, LastName, BirthDate, Salary, DepartmentID)
VALUES
(2, '李', '四', '1985-11-20', 9200.00, 102),
(3, '王', '五', '1992-08-10', 7800.75, 101);
查询数据
SELECT 是最常用的语句,用于从表中检索数据。
-- 查询所有列的所有数据 SELECT * FROM Employees; -- 查询特定列 SELECT FirstName, LastName, Salary FROM Employees; -- 使用 WHERE 子句进行条件过滤 -- 查询薪资大于8000的员工 SELECT * FROM Employees WHERE Salary > 8000; -- 查询ID为1的员工 SELECT * FROM Employees WHERE EmployeeID = 1; -- 组合条件 (AND, OR) -- 查询101部门且薪资大于8000的员工 SELECT * FROM Employees WHERE DepartmentID = 101 AND Salary > 8000; -- 查询101部门或102部门的员工 SELECT * FROM Employees WHERE DepartmentID = 101 OR DepartmentID = 102;
更新数据
UPDATE 语句用于修改表中的数据。⚠️ 使用 WHERE 子句至关重要,否则会更新整张表!
-- 将ID为1的员工的薪资更新为9000 UPDATE Employees SET Salary = 9000 WHERE EmployeeID = 1; -- 一次更新多个列 UPDATE Employees SET Salary = 9500, BirthDate = '1988-01-01' WHERE EmployeeID = 2;
删除数据
DELETE 语句用于删除表中的行。⚠️ 同样,WHERE 子句至关重要!
-- 删除ID为3的员工记录 DELETE FROM Employees WHERE EmployeeID = 3; -- 清空表 (危险操作,会删除所有数据,但保留表结构) -- DELETE FROM Employees;
第三部分:SQL Server 高级对象
约束的深入应用
我们继续完善 Employees 表,添加外键约束。
实例:创建 Departments 表并建立关系
-- 创建部门表
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName NVARCHAR(100) NOT NULL
);
-- 插入部门数据
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES
(101, '研发部'),
(102, '市场部'),
(103, '人事部');
-- 为 Employees 表添加外键约束
-- 这确保了 Employees.DepartmentID 的值必须在 Departments.DepartmentID 中存在
ALTER TABLE Employees
ADD CONSTRAINT FK_Employees_Departments
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID);
如果你尝试向 Employees 表插入一个不存在的 DepartmentID,SQL Server 会报错。
索引
索引是提高查询性能的关键,它就像一本书的目录,让数据库能快速找到数据,而不必扫描整张表。
-- 为 Employees 表的 LastName 列创建一个索引 CREATE INDEX IX_Employees_LastName ON Employees(LastName);
当你经常按 LastName 进行查询时,这个索引会大大加快查询速度。
视图
视图是一个虚拟表,其结果集来自一个或多个表,它简化了复杂查询,并可以隐藏数据的复杂性。
-- 创建一个视图,显示所有员工及其部门名称
CREATE VIEW vw_EmployeeDepartment AS
SELECT
e.EmployeeID,
e.FirstName,
e.LastName,
d.DepartmentName
FROM
Employees AS e
JOIN
Departments AS d ON e.DepartmentID = d.DepartmentID;
-- 像查询普通表一样查询视图
SELECT * FROM vw_EmployeeDepartment;
存储过程
存储过程是一组为了完成特定功能的预编译 SQL 语句集合,它封装了逻辑,提高了性能和安全性。
实例:创建一个获取某个部门所有员工的存储过程
CREATE PROCEDURE sp_GetEmployeesByDepartment
@DeptID INT -- 参数
AS
BEGIN
SELECT * FROM Employees WHERE DepartmentID = @DeptID;
END
执行存储过程:
-- 执行存储过程,查询研发部(ID=101)的员工 EXEC sp_GetEmployeesByDepartment @DeptID = 101;
第四部分:T-SQL 编程与函数
T-SQL 是 SQL Server 对 SQL 的扩展,增加了编程功能。
变量
-- 声明一个变量 DECLARE @EmployeeCount INT; -- 为变量赋值 SELECT @EmployeeCount = COUNT(*) FROM Employees; -- 使用变量 PRINT '公司总共有 ' + CAST(@EmployeeCount AS NVARCHAR(10)) + ' 名员工。';
条件判断
DECLARE @Salary DECIMAL(10, 2) = 9500.00;
IF @Salary > 10000
PRINT '高薪员工';
ELSE IF @Salary > 8000
PRINT '中等薪资员工';
ELSE
PRINT '普通员工';
循环
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT '当前计数器是: ' + CAST(@Counter AS NVARCHAR(10));
SET @Counter = @Counter + 1;
END
常用内置函数
- 聚合函数:
COUNT(),SUM(),AVG(),MAX(),MIN()SELECT COUNT(*) AS EmployeeCount, AVG(Salary) AS AverageSalary FROM Employees;
- 字符串函数:
LEN(),SUBSTRING(),UPPER(),LOWER()SELECT UPPER(FirstName) + ' ' + UPPER(LastName) AS FullName FROM Employees;
- 日期函数:
GETDATE(),YEAR(),MONTH(),DATEDIFF()SELECT GETDATE() AS CurrentDateTime; SELECT YEAR(BirthDate) AS BirthYear FROM Employees;
第五部分:数据库管理与维护
备份数据库
定期备份数据库是防止数据丢失的最重要的措施。
-- 使用 SSMS 图形界面进行备份更简单 -- T-SQL 备份到磁盘 BACKUP DATABASE MyFirstDB TO DISK = 'C:\Backup\MyFirstDB.bak' WITH NAME = 'Full Database Backup', DESCRIPTION = 'Full backup of MyFirstDB';
恢复数据库
-- 恢复数据库 (需要先关闭数据库连接) RESTORE DATABASE MyFirstDB FROM DISK = 'C:\Backup\MyFirstDB.bak' WITH REPLACE; -- REPLACE 选项会覆盖现有数据库
第六部分:实战项目案例:简易员工管理系统
-
需求:
- 管理员工信息(ID, 姓名, 部门, 薪资, 入职日期)。
- 管理部门信息(ID, 部门名称)。
- 查询所有员工及其部门。
- 查询指定部门的员工。
- 为员工涨薪(给研发部员工涨10%)。
-
实现:
- 建表: 参考上面的
Employees和Departments表。 - 插入初始数据:
-- 插入部门 INSERT INTO Departments VALUES (101, '研发部'), (102, '市场部'); -- 插入员工 INSERT INTO Employees VALUES (1, '赵', '六', '1990-01-01', 8000, '2025-06-01', 101); INSERT INTO Employees VALUES (2, '钱', '七', '1988-03-15', 7500, '2025-08-15', 102);
- 查询所有员工及部门: 使用
JOIN查询,创建vw_EmployeeDepartment视图。 - 查询指定部门员工: 使用
sp_GetEmployeesByDepartment存储过程。 - 为研发部员工涨10%:
UPDATE Employees SET Salary = Salary * 1.10 WHERE DepartmentID = (SELECT DepartmentID FROM Departments WHERE DepartmentName = '研发部');
- 建表: 参考上面的
第七部分:学习资源与进阶方向
官方资源
- Microsoft Learn: SQL Server 文档 - 最权威、最全面的学习资料。
- SQL Server 教程: Microsoft Learn SQL Server 教程
进阶方向
- 商业智能: 学习 SSIS (数据集成)、SSRS (报表服务)、SSAS (分析服务)。
- 高级性能调优: 深入学习查询执行计划、索引优化、统计信息等。
- 高可用性与灾难恢复: 学习 Always On 可用性组、数据库镜像等。
- 云数据库: 学习 Azure SQL Database。
练习建议
- 动手实践: 理论学完后,一定要亲手敲代码,修改数据,观察结果。
- 做小项目: 尝试为自己设计一个小型项目,如图书管理系统、博客系统等,并用 SQL Server 作为后端。
- 阅读优秀代码: 在 GitHub 上找一些开源项目,看看它们是如何设计数据库和编写 SQL 的。
希望这份详细的实例教程能帮助你顺利开启 SQL Server 的学习之旅!祝你学习愉快!
