← 目录从入门到精通SQL Server

数据库基础知识

2024/10/19

SQL Server 数据库基础知识详解

在这篇博客中,我们将深入探讨 SQL Server 的数据库基础知识,包括数据库、表、行和列的定义与作用,以及 SQL 查询语言的简介与使用。本文将详细说明这些概念的应用,并提供丰富的示例代码,帮助读者全面理解 SQL Server 的基本功能。


1. 什么是数据库、表、行、列?

在 SQL Server 中,数据库是一种用于组织和存储数据的容器。数据库结构中最常用的概念是表(Table),它由多行(Row)和多列(Column)组成。每个表都可以存储不同类型的数据,如字符串、整数、日期等。让我们逐个定义这些概念:

数据库(Database)

数据库是数据的集合,它存储了大量的表和其他数据库对象(如视图、存储过程、函数等)。在 SQL Server 中,数据库通过实例(Instance)进行管理,每个实例可以包含多个数据库。

创建数据库的示例:

sql
CREATE DATABASE CompanyDB;

这段代码创建了一个名为 CompanyDB 的新数据库。

表(Table)

表是数据库中的基础结构,用于存储数据。表由行和列组成,每一列定义了数据的属性,每一行存储了一个完整的数据记录。

创建表的示例:

sql
USE CompanyDB;

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,      -- 员工ID,主键
    FirstName NVARCHAR(50),          -- 员工名
    LastName NVARCHAR(50),           -- 员工姓
    HireDate DATE,                   -- 入职日期
    Salary DECIMAL(18, 2)            -- 员工薪水
);

在这个示例中,我们创建了一个名为 Employees 的表,其中包含了员工的 ID、名字、姓氏、入职日期和薪水信息。每个字段(列)都指定了具体的数据类型,如 INT 表示整数,NVARCHAR(50) 表示最大长度为 50 的字符串,DECIMAL(18,2) 表示最多18位数、小数位数最多2位的精确数值。

行(Row)

行代表了表中的一条记录。在 Employees 表中,每一行都代表一个员工的信息。行是表的横向部分,它由多个列的值构成。

列(Column)

列是表的垂直部分,它定义了存储在表中的数据类型。例如,FirstName 列存储了员工的名字,它的数据类型是 NVARCHAR(50),即一个长度不超过 50 个字符的字符串。

插入数据的示例:
sql
INSERT INTO Employees (EmployeeID, FirstName, LastName, HireDate, Salary)
VALUES (1, 'John', 'Doe', '2022-01-15', 55000.00);

INSERT INTO Employees (EmployeeID, FirstName, LastName, HireDate, Salary)
VALUES (2, 'Jane', 'Smith', '2021-11-01', 65000.00);

这段代码向 Employees 表插入了两条记录(即两行),每行记录了一个员工的详细信息。


2. SQL 简介:查询语言及其作用

SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准语言。SQL 被广泛用于查询、更新和管理数据。

在 SQL Server 中,SQL 主要分为四类操作语言:

  1. 数据查询语言(DQL):如 SELECT,用于查询数据。
  2. 数据操作语言(DML):如 INSERT、UPDATE、DELETE,用于修改数据。
  3. 数据定义语言(DDL):如 CREATE、ALTER、DROP,用于定义数据库和表结构。
  4. 数据控制语言(DCL):如 GRANT、REVOKE,用于权限管理。
2.1 数据查询语言(DQL)

最常用的 SQL 语句是 SELECT,用于从表中查询数据。它可以与其他子句(如 WHERE、ORDER BY、GROUP BY 等)结合使用,以满足复杂的数据查询需求。

基本查询示例:

sql
SELECT FirstName, LastName, Salary FROM Employees;

此查询从 Employees 表中选择并返回员工的名字、姓氏和薪水。

带条件的查询:

sql
SELECT FirstName, LastName, Salary FROM Employees
WHERE Salary > 60000;

这段代码查询 Employees 表中薪水大于 60000 的员工。

排序查询结果:

sql
SELECT FirstName, LastName, Salary FROM Employees
ORDER BY Salary DESC;

此查询按员工薪水从高到低排序返回结果。

2.2 数据操作语言(DML)

DML 语句允许用户插入、更新和删除数据。我们已经在前面介绍了 INSERT 语句,现在让我们来看其他 DML 语句。

更新表中的数据:

sql
UPDATE Employees
SET Salary = 70000
WHERE EmployeeID = 1;

此语句将 EmployeeID 为 1 的员工的薪水更新为 70000。

删除表中的数据:

sql
DELETE FROM Employees
WHERE EmployeeID = 2;

此语句删除 EmployeeID 为 2 的员工。

2.3 数据定义语言(DDL)

DDL 语句用于创建、修改和删除数据库对象(如表、索引、视图等)。

创建新表的示例:

sql
CREATE TABLE Departments (
    DepartmentID INT PRIMARY KEY,
    DepartmentName NVARCHAR(100)
);

此语句创建一个名为 Departments 的表,包含部门 ID 和部门名称。

修改表结构:

sql
ALTER TABLE Employees
ADD Email NVARCHAR(100);

此语句为 Employees 表添加一个 Email 列。

删除表:

sql
DROP TABLE Departments;

此语句删除 Departments 表及其所有数据。

2.4 数据控制语言(DCL)

DCL 语句用于管理数据库中的权限。

赋予用户权限:

sql
GRANT SELECT, INSERT ON Employees TO User1;

此语句授予用户 User1 对 Employees 表的 SELECT 和 INSERT 权限。

撤销用户权限:

sql
REVOKE INSERT ON Employees FROM User1;

此语句撤销用户 User1 对 Employees 表的 INSERT 权限。


3. SQL Server 查询语言的扩展功能

SQL Server 提供了很多扩展的查询功能,例如子查询、联接(JOIN)、聚合函数、窗口函数等。

子查询(Subquery)

子查询是一个嵌套在其他查询中的查询,用于返回供外部查询使用的值或结果集。

示例:

sql
SELECT FirstName, LastName FROM Employees
WHERE Salary > (SELECT AVG(Salary) FROM Employees);

此查询返回薪水高于平均薪水的员工。

联接(JOIN)

JOIN 语句用于将两个或多个表中的记录结合起来。

示例:内联接(INNER JOIN)

sql
SELECT e.FirstName, e.LastName, d.DepartmentName
FROM Employees e
INNER JOIN Departments d ON e.DepartmentID = d.DepartmentID;

此查询从 Employees 表和 Departments 表中选择匹配记录,并返回员工的名字、姓氏和部门名称。


结论

SQL Server 作为一个强大的关系型数据库管理系统,提供了灵活的数据库管理和查询功能。本文介绍了数据库、表、行、列的基础概念,并通过详细的 SQL 语法和示例演示了如何使用 SQL 查询语言来操作和管理数据。掌握这些基础知识是深入学习 SQL Server 的前提,同时也是日常数据库开发和管理的必备技能。通过持续的实践和探索,你将能够逐步掌握 SQL Server 的更多高级功能,如存储过程、触发器和性能优化等。