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;
он отобразит все столбцы вашей таблицы в алфавитном порядке.