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

Я знаю, что

SELECT * FROM Table

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

Скажем, у меня три столбца: "имя", "возраст" и "секс".

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

|age| |name| |sex|

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

Ответы

Ответ 1

Да, и нет: -)

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.

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

Ответ 2

Это генерирует запрос со всеми столбцами, упорядоченными по алфавиту в инструкции 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)

Ответ 3

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

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

Если это важно, то сортируйте, когда вы представляете данные клиенту.

Извините, это именно так...

Ответ 4

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

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

Ответ 5

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

SELECT age, name, sex FROM Table

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