Sql 简明教程

SQL - SORTING Results

SQL ORDER BY 子句用于基于一列或多列以升序或降序对数据进行排序。默认情况下,一些数据库按升序对查询结果进行排序。

此外,ORDER BY 子句还可以按首选顺序对数据库表中的数据进行排序。在这种情况下,可能不会按任何标准顺序(如按字母顺序或按字典顺序)对表的记录进行排序,但它们可以基于任何外部条件进行排序。例如,在包含由组织的多个客户下的订单列表的 ORDERS 表中,可以基于下订单的日期对下订单的详细信息进行排序。这不必按字母顺序排序,而应该基于“先到先得”。

Syntax

将用于按升序或降序对结果进行排序的 ORDER BY 子句的基本语法如下:

SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

你可以在 ORDER BY 子句中使用多列。确保你用于排序的任何列都应位于列列表中。

Sorting Results in Ascending Order

使用 SQL 中的 Order By 子句,可以按升序或基于默认或通过在子句条件中指定“ASC”关键字对数据库表中的记录进行排序。让我们看一个示例来理解这一点。

Example

假设已使用如下所示的 CREATE TABLE 语句创建了一个名为 CUSTOMERS 的表:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,使用如下所示的 INSERT 语句向此表中插入值:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'kaushik', 23, 'Kota', 2000.00 ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', 4500.00 ),
(7, 'Muffy', 24, 'Indore', 10000.00 );

该表将被创建为:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

以下是按 NAME 和 SALARY 升序对结果进行排序的示例。

SELECT * FROM CUSTOMERS ORDER BY NAME;

Output

这将产生以下结果 -

ID

NAME

AGE

ADDRESS

SALARY

4

Chaitali

25

Mumbai

6500.00

5

Hardik

27

Bhopal

8500.00

3

kaushik

23

Kota

2000.00

2

Khilan

25

Delhi

1500.00

6

Komal

22

Hyderabad

4500.00

7

Muffy

24

Indore

10000.00

1

Ramesh

32

Ahmedabad

2000.00

Sorting Results in Descending Order

但是,要按降序对数据库表中的记录进行排序,我们需要在子句条件中指定“DESC”关键字。让我们看一个示例来理解这一点。

Example

以下查询按 NAME 列对 CUSTOMERS 表的记录按降序进行排序。

SELECT * FROM CUSTOMERS ORDER BY NAME DESC;

Output

这将产生以下结果 -

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

7

Muffy

24

Indore

10000.00

6

Komal

22

Hyderabad

4500.00

2

Khilan

25

Delhi

1500.00

3

kaushik

23

Kota

2000.00

5

Hardik

27

Bhopal

8500.00

4

Chaitali

25

Mumbai

6500.00

Sorting Results in a Preferred Order

还可以使用 ORDER BY 子句中的 CASE 语句按自己的首选顺序对表的记录进行排序。该子句中指定了所有值以及它们应该被排序的位置;如果值没有给出任何数字,它们将自动按升序排序。

Example

要按自己的首选顺序提取行,将使用以下 SELECT 查询:

SELECT * FROM CUSTOMERS
ORDER BY ( CASE ADDRESS
   WHEN 'DELHI' 	 THEN 1
   WHEN 'BHOPAL' 	 THEN 2
   WHEN 'KOTA' 	 THEN 3
   WHEN 'AHMEDABAD' THEN 4
   WHEN 'Hyderabad' 	THEN 5
   ELSE 100 END) ASC, ADDRESS DESC;

Output

这将产生以下结果 -

ID

NAME

AGE

ADDRESS

SALARY

2

Khilan

25

Delhi

1500.00

5

Hardik

27

Bhopal

8500.00

3

kaushik

23

Kota

2000.00

1

Ramesh

32

Ahmedabad

2000.00

6

Komal

22

Hyderabad

4500.00

4

Chaitali

25

Mumbai

6500.00

7

Muffy

24

Indore

10000.00

这会按你 own order 中的首选顺序先按 ADDRESS 对客户进行排序,并按自然顺序对剩余地址进行排序。此外,剩余的地址将按反向字母顺序进行排序。