SQL中的ORDER BY语句用于根据一列或多列按升序或降序对获取的数据进行排序。
- 默认情况下,按升序排列数据。
- 我们可以使用关键字DESC按降序排序数据,使用关键字ASC按升序排序。
按一列排序:
要按升序或降序排序,我们可以分别使用关键字ASC或DESC。
语法:
SELECT * FROM table_name ORDER BY column_name ASC|DESC //Where table_name: name of the table. column_name: name of the column according to which the data is needed to be arranged. ASC: to sort the data in ascending order. DESC: to sort the data in descending order. | : use either ASC or DESC to sort in ascending or descending order//
按多列排序:
要按升序或降序排序,我们可以分别使用关键字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;
输出:
滚不 | 名称 | 住址 | 电话 | 年龄 |
---|---|---|---|---|
8. | 尼拉杰 | 阿利普尔 | XXXXXXXXX | 19 |
7. | 罗希特 | 巴尔盖特 | XXXXXXXXX | 18 |
6. | 德纳拉吉 | 巴拉巴贾尔 | XXXXXXXXX | 20 |
5. | 萨普塔希 | 加尔各答 | XXXXXXXXX | 19 |
4. | 深的 | 拉姆纳加尔 | XXXXXXXXX | 18 |
3. | 里扬卡 | 西里古里 | XXXXXXXXX | 20 |
2. | 普拉蒂克 | 比哈尔邦 | XXXXXXXXX | 19 |
1. | 严厉的 | 德里 | XXXXXXXXX | 18 |
在上面的例子中,如果我们想按升序排序,我们必须使用ASC代替DESC。
按多列排序 :
在本例中,我们将从Student表中获取所有数据,然后首先根据列Age按升序对结果进行排序。然后根据列ROLL_NO按降序排列。 查询:
SELECT * FROM Student ORDER BY Age ASC , ROLL_NO DESC;
输出:
滚不 | 名称 | 住址 | 电话 | 年龄 |
---|---|---|---|---|
7. | 罗希特 | 巴尔盖特 | XXXXXXXXX | 18 |
4. | 深的 | 拉姆纳加尔 | XXXXXXXXX | 18 |
1. | 严厉的 | 德里 | XXXXXXXXX | 18 |
8. | 尼拉杰 | 阿利普尔 | XXXXXXXXX | 19 |
5. | 萨普塔希 | 加尔各答 | XXXXXXXXX | 19 |
2. | 普拉蒂克 | 比哈尔邦 | XXXXXXXXX | 19 |
6. | 德纳拉吉 | 巴拉巴贾尔 | XXXXXXXXX | 20 |
3. | 里扬卡 | 西里古里 | XXXXXXXXX | 20 |
在上面的输出中,我们可以看到,首先,结果按照年龄按升序排序。有多行具有相同的年龄。现在,根据ROLL_NO对这个结果集进行进一步排序,将根据ROLL_NO对具有相同年龄的行进行降序排序。
注:
ASC是ORDER BY子句的默认值。因此,如果我们在ORDER BY子句中的列名之后没有指定任何内容,那么默认情况下,输出将按升序排序。
再举一个例子,下面的查询将给出与上面类似的输出: 查询:
SELECT * FROM Student ORDER BY Age , ROLL_NO DESC;
输出:
滚不 | 名称 | 住址 | 电话 | 年龄 |
---|---|---|---|---|
7. | 罗希特 | 巴尔盖特 | XXXXXXXXX | 18 |
4. | 深的 | 拉姆纳加尔 | XXXXXXXXX | 18 |
1. | 严厉的 | 德里 | XXXXXXXXX | 18 |
8. | 尼拉杰 | 阿利普尔 | XXXXXXXXX | 19 |
5. | 萨普塔希 | 加尔各答 | XXXXXXXXX | 19 |
2. | 普拉蒂克 | 比哈尔邦 | XXXXXXXXX | 19 |
6. | 德纳拉吉 | 巴拉巴贾尔 | XXXXXXXXX | 20 |
3. | 里扬卡 | 西里古里 | XXXXXXXXX | 20 |
按列号(而不是名称)排序:
一个整数,用于标识数据库基础查询中SelectItems中的列数 SELECT语句 .列数必须大于0且不大于结果表中的列数。换句话说,如果我们想按列排序,必须在选择列表中指定该列。
该规则按条款检查顺序 那个 参考选择列表 柱 使用列号而不是列名。 ORDER BY子句中的列号会损害SQL语句的可读性。此外,更改“选择”列表中列的顺序不会影响按名称而不是数字引用列的顺序。
语法:
Order by Column_Number asc/desc
这里我们举一个例子,根据第1列(即Roll_编号)对数据库表进行排序。 为此,查询将是:
查询:
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
输出: