🔍 登录 注册

数据查询

Z ZeroIsStart 2024-10-19 数据库 👁 316 ⏱ 5min
数据查询

SQL Server 数据查询详解:SELECT、WHERE、ORDER BY、DISTINCT、TOP 和 OFFSET-FETCH

在 SQL Server 中,数据查询是操作数据库的核心功能之一。无论是简单的查询还是复杂的数据筛选,都需要用到 SELECT 语句及其相关的条件、排序和限制等操作。本文将深入讲解 SQL Server 中数据查询的基础语法,包括 SELECT 语句的使用、WHERE 过滤条件、数据排序和去重、以及如何限制返回的数据量。


1. SELECT 语法基础

1.1 什么是 SELECT?

SELECT 是 SQL 中最基本、最常用的查询语句,用于从数据库表中检索数据。它可以选择特定的列或所有列,并通过指定不同的条件进行筛选和排序。

1.2 SELECT 基本语法

SELECT 语句的基本结构如下:

SELECT 列名1, 列名2, ...
FROM 表名;

例如,假设我们有一个名为 Employees 的表,它包含员工的姓名、职位和薪水等信息。可以使用以下查询从表中获取所有员工的姓名和职位:

SELECT FirstName, JobTitle
FROM Employees;

1.3 查询所有列

使用 * 通配符可以检索表中的所有列数据:

SELECT * 
FROM Employees;

这条语句会返回 Employees 表中的所有列和行。


2. WHERE 语句和过滤条件

2.1 什么是 WHERE?

WHERE 子句用于筛选满足特定条件的数据。它允许你指定一个或多个条件,只有符合这些条件的记录才会被返回。

2.2 WHERE 基本语法

WHERE 子句通常跟随在 FROM 子句之后,用于指定筛选条件:

SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;

例如,获取薪水大于 50000 的员工:

SELECT FirstName, Salary
FROM Employees
WHERE Salary > 50000;

2.3 使用多个条件

你可以使用逻辑运算符 AND 和 OR 来组合多个条件。比如获取薪水大于 50000 并且职位是“Manager”的员工:

SELECT FirstName, JobTitle, Salary
FROM Employees
WHERE Salary > 50000 AND JobTitle = 'Manager';

2.4 常见的条件运算符

  • =:等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
  • <> 或 !=:不等于
  • BETWEEN:在某个范围内
  • LIKE:用于模糊查询
  • IN:匹配多个值中的一个

**示例:**获取姓氏以 “S” 开头的员工:

SELECT FirstName, LastName
FROM Employees
WHERE LastName LIKE 'S%';

3. ORDER BY 和 DISTINCT 的使用

3.1 ORDER BY:排序结果

ORDER BY 子句用于对查询结果进行排序,默认是按升序排序,但你也可以指定降序。

3.1.1 ORDER BY 基本语法

SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1 [ASC|DESC];
  • ASC:升序(默认)
  • DESC:降序

**示例:**按薪水升序排列员工信息:

SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary ASC;

**示例:**按姓氏降序排列员工信息:

SELECT FirstName, LastName
FROM Employees
ORDER BY LastName DESC;

3.2 DISTINCT:去除重复值

DISTINCT 子句用于去除查询结果中的重复记录,使结果集只包含唯一的值。

3.2.1 DISTINCT 基本语法

SELECT DISTINCT 列名
FROM 表名;

**示例:**获取职位的唯一值:

SELECT DISTINCT JobTitle
FROM Employees;

这条查询会返回所有不同的职位。


4. 限制返回数据:TOP 和 OFFSET-FETCH

在某些情况下,你可能只想返回查询结果中的前几行,或者从某个偏移量开始返回部分数据。SQL Server 提供了 TOP 和 OFFSET-FETCH 子句来实现这一点。

4.1 TOP:返回前几条记录

TOP 子句用于限制返回的行数,可以返回前 n 条记录或者前 n% 的记录。

4.1.1 TOP 基本语法

SELECT TOP (行数) 列名1, 列名2, ...
FROM 表名;

**示例:**获取前 5 个薪水最高的员工:

SELECT TOP (5) FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC;

4.1.2 TOP PERCENT

你还可以使用 TOP 子句的百分比形式来获取结果集中前百分之几的记录。

**示例:**获取薪水最高的前 10% 员工:

SELECT TOP (10) PERCENT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC;

4.2 OFFSET-FETCH:分页查询

OFFSET-FETCH 子句允许你实现分页查询,即从查询结果的某个偏移位置开始,获取一定数量的数据。

4.2.1 OFFSET-FETCH 基本语法

SELECT 列名1, 列名2, ...
FROM 表名
ORDER BY 列名1
OFFSET 行数 ROWS FETCH NEXT 行数 ROWS ONLY;

**示例:**从第 6 行开始获取 5 条记录:

SELECT FirstName, LastName, Salary
FROM Employees
ORDER BY Salary DESC
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

这条查询会跳过前 5 行数据,从第 6 行开始返回 5 条记录。


5. 实战案例:综合应用

假设我们有一个包含员工信息的 Employees 表,现在需要获取以下信息:

  • 薪水大于 60000 且职位为“Manager”的员工;
  • 只返回前 3 个薪水最高的员工;
  • 结果按姓氏降序排列。

我们可以通过以下 SQL 语句实现:

SELECT TOP (3) FirstName, LastName, Salary
FROM Employees
WHERE Salary > 60000 AND JobTitle = 'Manager'
ORDER BY LastName DESC;

6. 总结

通过本文的学习,您应该对 SQL Server 中数据查询的核心语法有了深入的了解。我们详细讲解了 SELECT 语句的基础使用、WHERE 子句的过滤条件、ORDER BY 的排序功能、DISTINCT 的去重查询,以及如何使用 TOP 和 OFFSET-FETCH 限制返回的数据量。

这些 SQL 查询技巧在实际应用中十分常用,无论是简单的报表生成,还是复杂的数据分析,都离不开这些基础操作。通过不断练习和应用,您将能够更加灵活、高效地操作 SQL Server 中的数据。


附录:员工表 (Employees) 数据示例

FirstName LastName JobTitle Salary
Alice Smith Manager 75000
Bob Johnson Developer 60000
Charlie Williams Manager 80000
David Brown Designer 50000
Eve Davis Developer 55000

读完了?给作者一点支持

本文采用 CC BY 4.0 协议转载 · © ZeroIsStart

评论(0)

登录 后参与评论。

  • 还没有评论,来抢沙发。

🔗 相关文章