杰瑞科技汇

SQL Server实例教程,从零开始学实例吗?

SQL Server 实例教程:从零开始到实战应用

本教程分为以下几个部分,你可以根据自己的需求选择学习路径:

SQL Server实例教程,从零开始学实例吗?-图1
(图片来源网络,侵删)
  1. 第一部分:SQL Server 简介与环境搭建
  2. 第二部分:SQL 基础语法(核心)
  3. 第三部分:SQL Server 高级对象
  4. 第四部分:T-SQL 编程与函数
  5. 第五部分:数据库管理与维护
  6. 第六部分:实战项目案例
  7. 第七部分:学习资源与进阶方向

第一部分: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

环境搭建

你需要安装两个核心组件:

  1. SQL Server Database Engine: 数据库的核心服务,负责存储和处理数据。
  2. SQL Server Management Studio (SSMS): 一个图形化管理工具,让你可以方便地连接、管理和查询数据库。

安装步骤(简述):

SQL Server实例教程,从零开始学实例吗?-图2
(图片来源网络,侵删)
  1. 访问 SQL Server Developer Edition 下载页面
  2. 选择 "Developer - free" 版本,下载安装程序。
  3. 运行安装程序,选择“基本安装”或“自定义安装”,对于初学者,“基本安装”通常足够。
  4. 在安装过程中,你需要设置一个强密码,这是 sa(系统管理员)账户的密码,请务必记住。
  5. 安装完成后,下载并安装 SSMS
  6. 打开 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,外键(稍后我们会创建外键约束)
);

常用数据类型:

SQL Server实例教程,从零开始学实例吗?-图3
(图片来源网络,侵删)
  • 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 选项会覆盖现有数据库

第六部分:实战项目案例:简易员工管理系统

  1. 需求:

    • 管理员工信息(ID, 姓名, 部门, 薪资, 入职日期)。
    • 管理部门信息(ID, 部门名称)。
    • 查询所有员工及其部门。
    • 查询指定部门的员工。
    • 为员工涨薪(给研发部员工涨10%)。
  2. 实现:

    • 建表: 参考上面的 EmployeesDepartments 表。
    • 插入初始数据:
      -- 插入部门
      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 = '研发部');

第七部分:学习资源与进阶方向

官方资源

进阶方向

  • 商业智能: 学习 SSIS (数据集成)、SSRS (报表服务)、SSAS (分析服务)。
  • 高级性能调优: 深入学习查询执行计划、索引优化、统计信息等。
  • 高可用性与灾难恢复: 学习 Always On 可用性组、数据库镜像等。
  • 云数据库: 学习 Azure SQL Database。

练习建议

  • 动手实践: 理论学完后,一定要亲手敲代码,修改数据,观察结果。
  • 做小项目: 尝试为自己设计一个小型项目,如图书管理系统、博客系统等,并用 SQL Server 作为后端。
  • 阅读优秀代码: 在 GitHub 上找一些开源项目,看看它们是如何设计数据库和编写 SQL 的。

希望这份详细的实例教程能帮助你顺利开启 SQL Server 的学习之旅!祝你学习愉快!

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