SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by tes desc ;
SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by ReAmount desc ;
SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by 1 desc ;
SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by 4 desc ;思考下,这四个sql执行结果如何呢?
1.SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by tes desc ; //第一个sql执行成功,结果是按照tes字段进行的排序undefined2.SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by ReAmount desc ; //第二个sql执行成功,结果是按照ReAmount字段进行的排序(前提是表中有这个字段)undefined3.SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by 1 desc ; //第三个sql执行成功,结果是按照第一个字段amount进行的排序undefined4.SELECT Amount,PackageNum,Amount*PackageNum as tes FROM StudentAccount order by 4 desc ; //第四个sql执行失败,结果是不存在第4列-->Unknown column '4' in 'order clause'
这是不是说明了 order by 中的列是建立在select的字段上进行的,且select中隐藏的字段也是可以参与orderby 的
SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果。sql的执行引擎会根据你声明的数据结果去获取对应的数据
SQL 语句的语法顺序是:
SELECT[DISTINCT]
FROM
WHERE
GROUP BY
HAVING
UNION
ORDER BY执行顺序
FROM
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
UNION
ORDER BY并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。
版权属于:dingzhenhua
本文链接:https://cloud.tencent.com/developer/article/2019192
转载时须注明出处及本声明