SQL перечисление всех имен столбцов в алфавитном порядке

Я знаю, что

SELECT * FROM Table

перечислит все столбцы в таблице, но мне интересно перечислить столбцы в алфавитном порядке.

Я хочу, чтобы столбцы были организованы в формате

|age| |name| |sex|

можно ли это сделать с помощью SQL?

6 ответов


да, и нет :-)

SQL сам по себе не заботится о том, в каком порядке столбцы выходят, но, если вы должны были использовать:

select age, name, sex from ...

вы обнаружите, что они, вероятно, вышли в этом порядке (хотя я не уверен, что стандарты SQL санкционируют это).

теперь вы не можете хочу сделать это, но иногда жизнь не справедлива :-)

у вас также есть другая возможность использовать таблицы определения данных СУБД для динамического построения запроса. Это непереносимые, но большинство СУБД предоставляют эту таблицу (например, 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.

однако, вы действительно должны критически рассмотреть все запросы, выберите * - в подавляющем большинстве случаев это ненужно и неэффективно. И представление данных-это то, что должно вероятно, это будет сделано слоем представления, а не самой СУБД - СУБД следует оставить для максимально эффективного возврата данных.


это создает запрос со всеми столбцами, упорядоченными в алфавитном порядке в инструкции select.

DECLARE @QUERY VARCHAR(2000)
DECLARE @TABLENAME VARCHAR(50) = '<YOU_TABLE>'

SET @QUERY = 'SELECT '
SELECT @QUERY = @QUERY + Column_name + ', 
'
  FROM INFORMATION_SCHEMA.COLUMNS 
 WHERE TABLE_NAME = @TABLENAME
 ORDER BY Column_name

SET @QUERY =  LEFT(@QUERY, LEN(@QUERY) - 4) + ' 
FROM '+ @TABLENAME

PRINT @QUERY
EXEC(@QUERY)

  • нет способа сделать это автоматически без динамического SQL.
  • SELECT * Не рекомендуется и не будет сортировать имена столбцов
  • вам придется явно сделать SELECT age, name, sex FROM

на уровне SQL это не имеет значения. Не имеет значения для любого объекта клиентского кода -

если это важно, то сортировка при представлении данных клиенту.

извините,это просто так...


SQL-92 Standard указывает, что при использовании SELECT * столбцы указываются в порядке возрастания их порядкового номера в таблице. Соответствующие разделы 4.8 (столбцы) и 7.9 (спецификации запроса). Я не знаю никаких расширений поставщика к стандарту, которые позволили бы возвращать столбцы в любом другом порядке, вероятно, из-за использования SELECT * Не рекомендуется.

вы можете использовать SQL DDL, чтобы убедиться, что порядковые позиции столбцов соответствуют желаемому алфавитный порядок. Однако это будет работать только так, как вы хотите, когда ссылаетесь на таблицу sinlge в FROM предложения. Если ссылаются на две таблицы,SELECT * возвращает столбцы из первой таблицы в порядковом порядке, за которыми следуют столбцы второй таблицы в порядковом порядке, поэтому столбцы полного набора результатов могут быть не в алфавитном порядке.


вы можете просто указать столбцы, которые вы хотите выбрать:

SELECT age, name, sex FROM Table

столбцы будут отображаться в том же порядке, в котором вы указали их в запросе.


да. Можно с помощью следующей команды.

SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('Your_Table_Name') order by column_name;

он отобразит все столбцы вашей таблицы в алфавитном порядке.