SQL ORDER BY 语句
SQL中的ORDER BY语句用于根据一个或多个列对获取的数据进行升序或降序排序。
- 默认情况下,ORDER BY按升序排列数据。
- 我们可以使用关键字DESC对数据进行降序排序,使用关键字ASC对数据进行升序排序。
按一列排序
要按升序或降序排序,我们可以分别使用关键字ASC或DESC。
语法:
SELECT * FROM table_name ORDER BY column_name ASC|DESC
其中
table_name : 表名.
column_name : 需要排列数据的列的名称.
ASC : 按升序对数据排序.
DESC : 按降序对数据进行排序.
| : 使用ASC或DESC按升序或降序排序
按多列排序
要按升序或降序排序,我们可以分别使用关键字ASC或DESC。要根据多个列排序,请使用(,)操作符分隔列名。
语法:
SELECT * FROM table_name ORDER BY column1 ASC|DESC , column2 ASC|DESC
现在考虑上面的数据库表,找出不同查询的结果。
按单个列排序
在本例中,我们将从Student表中获取所有数据,并根据列ROLL_NO按降序对结果进行排序。
语法:
SELECT * FROM Student ORDER BY ROLL_NO DESC;
输出:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
---|---|---|---|---|
8 | NIRAJ | ALIPUR | XXXXXXXXXX | 19 |
7 | ROHIT | BALURGHAT | XXXXXXXXXX | 18 |
6 | DHANRAJ | BARABAJAR | XXXXXXXXXX | 20 |
5 | SAPTARHI | KOLKATA | XXXXXXXXXX | 19 |
4 | DEEP | RAMNAGAR | XXXXXXXXXX | 18 |
3 | RIYANKA | SILIGURI | XXXXXXXXXX | 20 |
2 | PRATIK | BIHAR | XXXXXXXXXX | 19 |
1 | HARSH | DELHI | XXXXXXXXXX | 18 |
在上面的例子中,如果我们想按升序排序,我们必须使用ASC来代替DESC。
按多列排序
在本例中,我们将从Student表中获取所有数据,然后根据列Age对结果进行升序排序。然后根据列ROLL_NO降序排列。
语法:
SELECT * FROM Student ORDER BY Age ASC , ROLL_NO DESC;
输出:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
---|---|---|---|---|
7 | ROHIT | BALURGHAT | XXXXXXXXXX | 18 |
4 | DEEP | RAMNAGAR | XXXXXXXXXX | 18 |
1 | HARSH | DELHI | XXXXXXXXXX | 18 |
8 | NIRAJ | ALIPUR | XXXXXXXXXX | 19 |
5 | SAPTARHI | KOLKATA | XXXXXXXXXX | 19 |
2 | PRATIK | BIHAR | XXXXXXXXXX | 19 |
6 | DHANRAJ | BARABAJAR | XXXXXXXXXX | 20 |
3 | RIYANKA | SILIGURI | XXXXXXXXXX | 20 |
在上面的输出中,我们可以看到,首先,结果是按照Age升序排序的。有多排相同的年龄。现在,根据ROLL_NO对结果集进一步排序,将根据ROLL_NO降序对具有相同年龄的行进行排序。
注意:
ASC是ORDER BY子句的默认值。因此,如果在ORDER BY子句中不指定列名之后的任何内容,默认情况下输出将按升序排序。
再举一个例子,下面的查询会给出类似的输出:
语法:
SELECT * FROM Student ORDER BY Age , ROLL_NO DESC;
输出:
ROLL_NO | NAME | ADDRESS | PHONE | Age |
---|---|---|---|---|
7 | ROHIT | BALURGHAT | XXXXXXXXXX | 18 |
4 | DEEP | RAMNAGAR | XXXXXXXXXX | 18 |
1 | HARSH | DELHI | XXXXXXXXXX | 18 |
8 | NIRAJ | ALIPUR | XXXXXXXXXX | 19 |
5 | SAPTARHI | KOLKATA | XXXXXXXXXX | 19 |
2 | PRATIK | BIHAR | XXXXXXXXXX | 19 |
6 | DHANRAJ | BARABAJAR | XXXXXXXXXX | 20 |
3 | RIYANKA | SILIGURI | XXXXXXXXXX | 20 |
按列号排序(而不是名称)
的基础查询中的SelectItems中标识列编号的整数 SELECT statement 。列号必须大于0,且不大于结果表中的列数。换句话说,如果我们希望按列排序,则必须在SELECT列表中指定该列。
规则检查ORDER BY子句 that 参考选择列表 columns 使用列号而不是列名。 ORDER BY子句中的列号会降低SQL语句的可读性。此外,当按名称而不是按数字引用列时,更改SELECT列表中的列的顺序不会影响ORDER BY。
语法:
Order by Column_Number asc/desc
这里我们以第1列(即Roll_Number)为例对数据库表进行排序。 为此,一个查询将是:
语法:
CREATE TABLE studentinfo
( Roll_no INT,
NAME VARCHAR(25),
Address VARCHAR(20),
CONTACTNO BIGINT NOT NULL,
Age INT );
INSERT INTO studentinfo
VALUES (7,'ROHIT','GAZIABAD',9193458625,18),
(4,'DEEP','RAMNAGAR',9193458546,18),
(1,'HARSH','DELHI',9193342625,18),
(8,'NIRAJ','ALIPUR',9193678625,19),
(5,'SAPTARHI','KOLKATA',9193789625,19),
(2,'PRATIK','BIHAR',9193457825,19),
(6,'DHANRAJ','BARABAJAR',9193358625,20),
(3,'RIYANKA','SILIGURI',9193218625,20);
SELECT Name, Address
FROM studentinfo
ORDER BY 1
输出: