CREATE TABLE #cities(city_id INT, city_name VARCHAR(100))
INSERT INTO #cities(city_id,city_name)
SELECT 5,'New york' UNION ALL
SELECT 4,'tokyo' UNION ALL
SELECT 2,'Alaska' UNION ALL
SELECT 3,'London' UNION ALL
SELECT 1,'Banglore' UNION ALL
SELECT 1,'New york' UNION ALL
SELECT 2,'tokyo' UNION ALL
SELECT 3,'Alaska' UNION ALL
SELECT 4,'London' UNION ALL
SELECT 5,'Banglore'
我写下如下的查询:
SELECT *
FROM #cities
ORDER BY 2, 1 DESC
SELECT *
FROM #cities
ORDER BY 2 ASC, 1 DESC
正如您所看到的那样,两个查询都给出了相同的结果。
查看查询输出
那么,SQL Server中是否特定使用ASC
关键字?
答案 0 :(得分:7)
SQL服务器以这种方式实现它,因为 SQL ANSI specifications 明确说明了实现
ORDER BY子句为您的DBMS提供要排序的项目列表,以及对它们进行排序的顺序:升序(ASC,默认)或降序(DESC)。
和
这是一个简单的例子:
SELECT column_1 FROM Table_1 ORDER BY column_1;
此SQL语句从TABLE_1检索所有COLUMN_1值,并按升序返回它们。此SQL语句完全相同:
`SELECT column_1 FROM Table_1 ORDER BY column_1 ASC;`
因此,关键字ASC
在MS SQL服务器的ORDER BY
子句中也是omit-table,因为它正确实现了ANSI规范。
我想相信它可以帮助人们轻松理解他人写的查询。
另请注意,您无法在SQL Server中将ASC的默认顺序更改为DESC。
正如MSDN documentation中所述,请不要在语法中使用2,1 DESC
样式。
避免在ORDER BY子句中指定整数作为选择列表中列的位置表示。例如,虽然诸如SELECT ProductID,Name FROM Production.Production ORDER BY 2之类的语句是有效的,但与指定实际列名相比,其他语句并不容易理解。此外,对选择列表的更改(例如更改列顺序或添加新列)将需要修改ORDER BY子句以避免意外结果。
答案 1 :(得分:3)
在ASC
中提及Order by
没有具体用途。如果你提到它,一些新的Sql可以更好地理解它。默认情况下,如果您未提及asc/desc
中列的排序顺序(Order By
),则sql server会将其视为ASC
顺序。这就是为什么你得到相同的结果。
答案 2 :(得分:0)
除代码清晰度外,没有具体用途 - 显示代码的意图。由于代码不仅仅是用于写入,而且也用于其他人阅读,即使不需要,也可以放入ASC
,可以使该段代码的意图更加清晰,如果它的提升这一事实在那里很重要。
请参阅this article关于故意编程的内容,其中包含:
程序员可以在代码中明确表达意图 而不是隐含地通过不充分的语言特征
在guiding principles of the Python编程语言之一中也说了同样的原则:
明确比隐含更好。
答案 3 :(得分:-1)
ORDER BY
默认顺序为ASC
。
所以你的查询与:
相同SELECT *
FROM #cities
ORDER BY 2, 1 DESC
SELECT *
FROM #cities
ORDER BY 2 ASC, 1 DESC