我知道
SELECT * FROM Table
将列出表中的所有列,但我有兴趣按字母顺序列出这些列。
比如说,我有三列,“姓名”、“年龄”和“性别”。
我想要按格式组织的列
|age| |name| |sex|
可以用 SQL 做到这一点吗?
最佳答案
是的,也不是 :-)
SQL 本身并不关心列出现的顺序,但是,如果您要使用:
select age, name, sex from ...
你会发现它们可能是按这个顺序出现的(尽管我不确定 SQL 标准是否要求这样做)。
现在您可能不想这样做,但有时生活并不公平:-)
您还可以使用 DBMS 数据定义表来动态构建查询。这是不可移植的,但大多数 DBMS 提供这些表(例如 DB/2 的
SYSIBM.SYSCOLUMNS
),您可以从那里以有序的方式选择列名。就像是:select column_name from sysibm.syscolumns
where owner = 'pax' and table_name = 'movies'
order by column_name;
然后使用该查询的结果来构建真正的查询:
query1 = "select column_name from sysibm.syscolumns" +
" where owner = 'pax' and table_name = 'movies'" +
" order by column_name"
rs = exec(query1)
query2 = "select"
sep = " "
foreach colm in rs:
query2 += sep + colm["column_name"]
sep = ", "
query2 += " from movies order by rating"
rs = exec(query2)
// Now you have the rs recordset with sorted columns.
但是,您确实应该仔细检查所有选择
*
的查询。 - 在绝大多数情况下,这是不必要且低效的。数据的表示可能应该由表示层完成,而不是 DBMS 本身——应该让 DBMS 以尽可能有效的方式返回数据。
关于SQL 按字母顺序列出所有列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075800/