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
Столбцы будут показаны в том же порядке, в котором вы указали их в запросе.