MS SQL Server 中的 Order by
Order by 是 SQL 中的一个子句。它用于按升序或降序对查询的结果集进行排序。它可以使用一个或多个列进行排序。在本文中,我们将讨论 MS SQL Server 中的 Order by 子句。
语法
在 MS SQL Server 中使用 Order by 子句的语法如下 −
SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
语法说明
SELECT column1, column2, ... :指定我们要从表中检索的列。
FROM table_name:指定我们要从中检索数据的表的名称。
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...:根据指定的列按升序或降序对结果集进行排序。
按升序排序
默认情况下,Order by 子句按升序对结果集进行排序。要按升序对结果集进行排序,我们不需要明确指定 ASC 关键字。
示例 1
SELECT * FROM customers ORDER BY customer_name;
在此示例中,结果集将根据 customer_name 列按升序排序。
示例 2
假设我们有一个名为"Employees"的表,其中包含以下列和数据 -
EmployeeID |
EmployeeName |
Department |
Salary |
---|---|---|---|
1 |
John |
IT |
50000 |
2 |
Jane |
Sales |
45000 |
3 |
Bob |
IT |
55000 |
4 |
Alice |
HR |
40000 |
5 |
Tom |
HR |
42000 |
如果我们想从 Employees 表中检索所有数据并按 Salary 列按升序排序,则 SQL 查询将是 −
SELECT * FROM Employees ORDER BY Salary;
上述查询的输出将是 −
EmployeeID |
EmployeeName |
Department |
Salary |
---|---|---|---|
4 |
Alice |
HR |
40000 |
5 |
Tom |
HR |
42000 |
2 |
Jane |
Sales |
45000 |
1 |
John |
IT |
50000 |
3 |
Bob |
IT |
55000 |
按降序排序
要按降序对结果集进行排序,我们需要在列名后指定 DESC 关键字。
示例 1
SELECT * FROM customers ORDER BY customer_name DESC;
在此示例中,结果集将根据 customer_name 列按降序排序。
示例 2
如果我们想从 Employees 表中检索所有数据并按 Department 列按降序排序,则 SQL 查询将是 −
SELECT * FROM Employees ORDER BY Department DESC;
上述查询的输出将是
EmployeeID |
EmployeeName |
Department |
Salary |
---|---|---|---|
2 |
Jane |
Sales |
45000 |
1 |
John |
IT |
50000 |
3 |
Bob |
IT |
55000 |
5 |
Tom |
HR |
42000 |
4 |
Alice |
HR |
40000 |
按多列排序
我们还可以按多列对结果集进行排序。在这种情况下,Order by 子句首先根据第一列对结果集进行排序,然后根据第二列进行排序。
示例 1
SELECT * FROM customers ORDER BY country, customer_name;
在此示例中,结果集将根据 country 列按升序排序。如果两行或多行具有相同的国家/地区,则这些行将根据 customer_name 列按升序排序。
示例 2
如果我们想从 Employees 表中检索所有数据,并首先按 Department 列按升序排序,然后按 Salary 列按升序排序,则 SQL 查询将是 −
SELECT * FROM Employees ORDER BY Department DESC;
上述查询的输出将是
EmployeeID |
EmployeeName |
Department |
Salary |
---|---|---|---|
2 |
Jane |
Sales |
45000 |
1 | John |
IT |
50000 |
3 |
Bob |
IT |
55000 |
5 |
Tom |
HR |
42000 |
4 |
Alice |
HR |
40000 |
按多列排序
我们还可以按多列对结果集进行排序。在这种情况下,Order by 子句首先根据第一列对结果集进行排序,然后根据第二列进行排序。
示例 1
SELECT * FROM customers ORDER BY country, customer_name;
在此示例中,结果集将根据 country 列按升序排序。如果两行或多行具有相同的国家/地区,则这些行将根据 customer_name 列按升序排序。
示例 2
如果我们想从 Employees 表中检索所有数据,并首先按 Department 列按升序排序,然后按 Salary 列按升序排序,则 SQL 查询将是
SELECT * FROM Employees ORDER BY Department ASC, Salary ASC;
上述查询的输出将是
EmployeeID |
EmployeeName |
Department |
Salary |
---|---|---|---|
4 |
Alice |
HR |
40000 |
5 |
Tom |
HR |
42000 |
1 |
John |
IT |
50000 |
3 |
Bob |
IT |
55000 |
2 |
Jane |
Sales |
45000 |
这些示例演示了如何使用 Order by 子句对 MS SQL Server 中的查询结果集进行排序。
使用 NULL 值排序
当我们使用 Order by 子句时,NULL 值的排序方式取决于我们是按升序还是降序排序。按升序排列时,NULL 值会首先显示,而按降序排列时,NULL 值会最后显示。
例如
SELECT * FROM customers ORDER BY city DESC;
在此示例中,结果集将根据 city 列按降序排序。 NULL 值将最后显示。
结论
MS SQL Server 中的 Order by 子句是一个强大的工具,它允许我们根据一个或多个列按升序或降序对查询的结果集进行排序。通过了解 Order by 子句的语法和用法,我们可以创建更复杂、更有意义的查询来从数据库中检索数据。