杰瑞科技汇

SQL Server实用教程如何快速上手?

SQL Server 实用教程

本教程将带你一步步掌握SQL Server,从安装配置到高级查询,再到管理和性能优化。

SQL Server实用教程如何快速上手?-图1
(图片来源网络,侵删)

第一部分:基础入门

第一章:SQL Server 简介

  1. 什么是SQL Server?

    • SQL Server是由Microsoft开发的关系型数据库管理系统,它使用标准的SQL语言进行数据查询、插入、更新和删除。
    • 它不仅仅是一个数据库引擎,还包含了商业智能、数据分析和报表等一系列强大的工具和服务。
  2. 核心组件

    • SQL Server Database Engine: 核心服务,负责存储、处理和保护数据,这是我们最常打交道的一部分。
    • SQL Server Management Studio (SSMS): 主要的管理工具,用于编写和执行T-SQL代码、管理数据库、查看性能等。
    • SQL Server Integration Services (SSIS): 企业级数据集成、转换和迁移平台。
    • SQL Server Analysis Services (SSAS): 用于在线分析处理和数据挖掘。
    • SQL Server Reporting Services (SSRS): 用于创建和管理报表。
  3. 版本选择

    • SQL Server Express: 免费版,功能有限,适合学习和小型应用,有数据库大小和内存使用的限制。
    • Developer Edition: 功能与Enterprise版完全相同,但仅用于开发和测试,不能用于生产环境,对学习者和开发者来说是最好的选择。
    • Standard / Enterprise Edition: 商业版,功能更强大,适用于生产环境,需要付费许可证。

第二章:安装与配置

  1. 下载

    SQL Server实用教程如何快速上手?-图2
    (图片来源网络,侵删)
  2. 安装步骤

    • 运行安装程序,选择“基本”或“自定义”安装。
    • 基本安装: 适合新手,会自动选择默认配置。
    • 自定义安装: 适合有经验的用户,可以更精细地控制组件和路径。
    • 关键步骤:
      • 产品密钥: 如果是Express版,无需密钥;Developer版,选择“具有免费许可的 developer edition”。
      • 功能选择: 至少勾选 Database Engine ServicesSQL Server Management Studio (SSMS)
      • 服务器配置: 设置服务账户和身份验证模式。
      • 身份验证模式:
        • Windows 身份验证: 默认模式,只能使用Windows登录账户访问SQL Server,更安全。
        • 混合模式: 同时支持Windows身份验证和SQL Server身份验证(即用户名和密码),你需要为 sa 账户设置一个强密码。
  3. 连接与验证

    • 安装完成后,打开 SQL Server Management Studio (SSMS)
    • 在连接窗口中,输入服务器名称(通常是你的机器名或 localhost),选择身份验证模式(如果是混合模式,输入用户名 sa 和你设置的密码),点击“连接”。

第二部分:核心概念与T-SQL

第三章:数据库与表

  1. 数据库: 一个存储数据的容器。
  2. : 数据库中存储数据的结构化对象,由行和列组成。
  3. 主键: 表中唯一标识每一行记录的列或列组合,不能为空且必须唯一。
  4. 外键: 用于在两个表之间建立链接,确保数据的引用完整性,一个表的外键是另一个表的主键。

第四章:T-SQL 基础语法

T-SQL是SQL Server的查询语言,是标准SQL的超集。

数据定义语言

用于创建、修改和删除数据库对象。

SQL Server实用教程如何快速上手?-图3
(图片来源网络,侵删)
-- 创建数据库
CREATE DATABASE MySchool;
GO -- GO是批处理分隔符,表示前面的命令执行完毕
-- 使用数据库
USE MySchool;
GO
-- 创建表
CREATE TABLE Students (
    StudentID INT PRIMARY KEY, -- 主键
    Name NVARCHAR(50) NOT NULL, -- 非空
    Age INT,
    EnrollmentDate DATE
);
CREATE TABLE Courses (
    CourseID INT PRIMARY KEY,
    CourseName NVARCHAR(100) NOT NULL,
    Credits INT
);
-- 创建关联表(多对多关系)
CREATE TABLE Enrollments (
    EnrollmentID INT PRIMARY KEY,
    StudentID INT FOREIGN KEY REFERENCES Students(StudentID), -- 外键
    CourseID INT FOREIGN KEY REFERENCES Courses(CourseID),   -- 外键
    Grade DECIMAL(4, 2)
);

数据操作语言

用于操作表中的数据。

-- 插入数据
INSERT INTO Students (StudentID, Name, Age, EnrollmentDate)
VALUES (1, '张三', 20, '2025-09-01'),
       (2, '李四', 21, '2025-09-01');
INSERT INTO Courses (CourseID, CourseName, Credits)
VALUES (101, '数据库原理', 4),
       (102, '计算机网络', 3);
-- 查询数据
-- SELECT ... FROM ... WHERE
SELECT * FROM Students;
SELECT Name, Age FROM Students WHERE Age > 20;
-- 更新数据
UPDATE Students
SET Age = 22
WHERE Name = '张三';
-- 删除数据
DELETE FROM Students
WHERE StudentID = 2;

数据查询语言

这是最核心、最常用的部分。

-- 基础查询
SELECT StudentID, Name FROM Students;
-- 使用WHERE子句过滤
SELECT * FROM Students WHERE EnrollmentDate > '2025-01-01';
-- 使用ORDER BY排序
SELECT * FROM Students ORDER BY Age DESC; -- DESC降序, ASC升序(默认)
-- 使用聚合函数
SELECT COUNT(*) AS TotalStudents FROM Students;
SELECT AVG(Age) AS AverageAge FROM Students;
-- 使用GROUP BY分组
SELECT COUNT(*) AS StudentCount, Department FROM Students GROUP BY Department;
-- 使用HAVING过滤分组
SELECT Department, AVG(Age) AS AvgAge
FROM Students
GROUP BY Department
HAVING AVG(Age) > 20;

多表连接

当数据分布在多个表中时,使用连接来获取关联数据。

-- 内连接: 只返回两个表中匹配的行
SELECT
    S.Name AS StudentName,
    C.CourseName
FROM Students AS S
INNER JOIN Enrollments AS E ON S.StudentID = E.StudentID
INNER JOIN Courses AS C ON E.CourseID = C.CourseID;
-- 左连接: 返回左表的所有行,以及右表中匹配的行,如果右表没有匹配,则结果中右表的列为NULL。
SELECT
    S.Name AS StudentName,
    C.CourseName
FROM Students AS S
LEFT JOIN Enrollments AS E ON S.StudentID = E.StudentID
LEFT JOIN Courses AS C ON E.CourseID = C.CourseID;
-- 这个查询可以找出所有没有选课的学生
-- 右连接: 与左连接相反,返回右表的所有行。

第三部分:进阶主题

第五章:视图

视图是一个虚拟表,其结果集由存储的查询定义,它不存储数据,而是动态生成。

  • 用途: 简化复杂查询、隐藏数据复杂性、提供数据安全层。
-- 创建视图
CREATE VIEW v_StudentCourseInfo
AS
SELECT
    S.Name AS StudentName,
    C.CourseName,
    E.Grade
FROM Students AS S
INNER JOIN Enrollments AS E ON S.StudentID = E.StudentID
INNER JOIN Courses AS C ON E.CourseID = C.CourseID;
-- 使用视图
SELECT * FROM v_StudentCourseInfo WHERE Grade > 90;

第六章:存储过程

存储过程是一组为了完成特定功能的预编译SQL语句集合,可以接受参数和返回结果。

  • 优点: 提高性能、减少网络流量、增强安全性、代码重用。
-- 创建存储过程
CREATE PROCEDURE sp_GetStudentByAge
    @MinAge INT,
    @MaxAge INT
AS
BEGIN
    SELECT * FROM Students WHERE Age BETWEEN @MinAge AND @MaxAge;
END;
GO
-- 执行存储过程
EXEC sp_GetStudentByAge @MinAge = 19, @MaxAge = 21;

第七章:事务

事务是一个工作单元,它确保一组数据库操作要么全部成功,要么全部失败回滚。

  • ACID特性:
    • 原子性: 事务不可分割。
    • 一致性: 事务使数据库从一个有效状态转变为另一个有效状态。
    • 隔离性: 并发事务之间不会互相干扰。
    • 持久性: 一旦事务提交,其结果就是永久的。
BEGIN TRANSACTION; -- 开始事务
BEGIN TRY
    -- 执行多个操作
    UPDATE Accounts SET Balance = Balance - 100 WHERE AccountID = 1;
    UPDATE Accounts SET Balance = Balance + 100 WHERE AccountID = 2;
    COMMIT TRANSACTION; -- 如果所有操作都成功,提交事务
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION; -- 如果发生错误,回滚所有操作
    PRINT '事务已回滚';
END CATCH

第四部分:管理与优化

第八章:索引

索引是提高数据库查询性能的关键,它类似于书籍的目录,可以帮助数据库引擎快速定位数据。

  • 聚集索引: 数据行的物理顺序与索引的顺序相同,一个表只能有一个聚集索引。
  • 非聚集索引: 索引的顺序与数据行的物理顺序不同,一个表可以有多个非聚集索引。
-- 创建聚集索引 (通常在主键上自动创建)
CREATE CLUSTERED INDEX IX_Students_Name ON Students(Name);
-- 创建非聚集索引
CREATE NONCLUSTERED INDEX IX_Students_Age ON Students(Age);

注意: 索引虽然能加速查询,但会降低INSERT、UPDATE、DELETE的速度,并占用存储空间,只为经常用于查询条件的列创建索引。

第九章:执行计划

执行计划是SQL Server引擎执行查询的详细步骤,它是优化查询性能最重要的工具。

  • 如何查看: 在SSMS中,右键点击查询,选择“显示实际的执行计划”或“包括实际的执行计划”。
  • 如何阅读:
    • 关注 成本:哪个操作消耗了最多的资源。
    • 寻找 警告图标 (黄色三角形或红色感叹号),如“缺少索引”、“键查找”等。
    • 理解操作符:如 Clustered Index Scan (全表扫描,性能差)、Index Seek (索引查找,性能好)。

第十章:常用函数

  • 字符串函数: LEN(), SUBSTRING(), REPLACE(), LOWER(), UPPER()
  • 日期函数: GETDATE(), DATEADD(), DATEDIFF(), YEAR(), MONTH()
  • 转换函数: CAST() (严格), CONVERT() (更灵活,可指定样式)
  • 条件函数: IIF() (简单的if-then-else), CASE (多条件分支)
SELECT
    Name,
    CASE
        WHEN Age < 20 THEN '青年'
        WHEN Age BETWEEN 20 AND 25 THEN '壮年'
        ELSE '其他'
    END AS AgeGroup
FROM Students;

第五部分:最佳实践与总结

  1. 命名规范: 使用清晰、一致的命名规则(如 PascalCasesnake_case)。
  2. 注释: 为复杂的SQL代码和存储过程添加注释。
  3. 参数化查询: 在应用程序中,始终使用参数化查询或存储过程来防止SQL注入攻击。
  4. 最小权限原则: 为数据库用户授予完成其任务所需的最小权限。
  5. 定期备份: 制定并执行可靠的数据库备份策略(完整备份、差异备份、事务日志备份)。
  6. 监控性能: 定期检查慢查询和资源使用情况,利用执行计划进行优化。

学习资源推荐

  • 官方文档: Microsoft Learn - SQL Server (最权威、最全面)
  • 在线课程: Coursera, Udemy, 慕课网等平台上有大量SQL Server课程。
  • 社区: Stack Overflow, CSDN, 博客园等。

这份教程为你提供了一个学习SQL Server的完整框架,从现在开始,动手安装、创建数据库、编写查询,在实践中不断加深理解,你很快就能成为一名SQL Server高手!

分享:
扫描分享到社交APP
上一篇
下一篇