SQL Перечисление всех имен столбцов в алфавитном порядке - PullRequest
19 голосов
/ 02 ноября 2010

Я знаю, что

SELECT * FROM Table

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

Скажем, у меня три столбца, "name"," age "и" sex ".

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

|age| |name| |sex|

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

Ответы [ 6 ]

13 голосов
/ 02 ноября 2010

Да, и нет: -)

Самому 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.

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

12 голосов
/ 08 мая 2012

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

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)
4 голосов
/ 02 ноября 2010
  • Нет способа сделать это автоматически без динамического SQL.
  • SELECT * не рекомендуется и не будет сортировать имена столбцов
  • Вы должны явно сделать SELECT age, name, sex FROM

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

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

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

3 голосов
/ 02 ноября 2010

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

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

0 голосов
/ 29 марта 2018

Да.Это возможно с помощью следующей команды.

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

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

0 голосов
/ 02 ноября 2010

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

SELECT age, name, sex FROM Table

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

...