web-dev-qa-db-fra.com

Liste SQL de tous les noms de colonnes par ordre alphabétique

Je le sais

SELECT * FROM Table

listera toutes les colonnes du tableau, mais je suis intéressé par les colonnes par ordre alphabétique.

Dis, j'ai trois colonnes, "nom", "âge" et "sexe".

Je veux les colonnes organisées dans le format

|age| |name| |sex|

Est-il possible de faire cela avec SQL?

18
Shamim Hafiz

Oui et non :-)

SQL lui-même ne se soucie pas de l'ordre dans lequel les colonnes apparaissent mais, si vous deviez utiliser:

select age, name, sex from ...

vous constaterez qu'ils sont probablement sortis dans cet ordre (même si je ne suis pas sûr que les normes SQL l'exigent).

Maintenant, vous ne pouvez pas voulez faire cela, mais parfois, la vie n’est pas juste :-)

Vous avez également l’autre possibilité d’utiliser les tables de définition de données du SGBD pour construire dynamiquement une requête. Ceci n'est pas portable, mais la plupart des SGBD fournissent ces tables (telles que SYSIBM.SYSCOLUMNS de DB/2) et vous pouvez sélectionner les noms de colonne à partir de là, de manière ordonnée. Quelque chose comme:

select column_name from sysibm.syscolumns
where owner = 'pax' and table_name = 'movies'
order by column_name;

Ensuite, vous utilisez les résultats de that query pour construire la requête réelle:

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.

Cependant, vous devriez vraiment examiner de manière critique toutes les requêtes qui sélectionnent * - dans la grande majorité des cas, cela est inutile et inefficace. Et la présentation des données est quelque chose qui devrait probablement être effectué par la couche de présentation, et non par le SGBD lui-même - le SGBD devrait être laissé pour renvoyer les données de la manière la plus efficace possible.

13
paxdiablo

Cela génère une requête avec toutes les colonnes classées par ordre alphabétique dans l'instruction 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)
11
Maykol Rypka
  • Il n'y a aucun moyen de le faire automatiquement sans SQL dynamique.
  • SELECT * n'est pas recommandé et ne triera pas les noms de colonnes
  • Vous devez explicitement faire SELECT age, name, sex FROM

Au niveau SQL, ce n'est pas grave. Cela n’a aucune importance pour tout objet de code client

Si cela est important, effectuez un tri lorsque vous présentez les données au client.

Désolé, c'est comme ça ...

4
gbn

SQL-92 Standard indique que, lorsque vous utilisez SELECT *, les colonnes sont référencées dans l'ordre croissant de leur position ordinale dans la table. Les sections pertinentes sont 4.8 (colonnes) et 7.9 (spécification de requête). Je ne connais aucune extension de fournisseur à la norme qui permettrait de renvoyer les colonnes dans un autre ordre, probablement parce que l'utilisation de SELECT * est généralement déconseillée.

Vous pouvez utiliser SQL DDL pour vous assurer que les positions ordinales des colonnes correspondent à l'ordre alphabétique souhaité. Toutefois, cela ne fonctionnera que comme vous le souhaitez lorsque vous référencez une table Sinlge dans la clause FROM. Si deux tables sont référencées, SELECT * renverra les colonnes de la première table dans l'ordre de la position ordinale, suivies des colonnes de la seconde table en position ordinale, de sorte que les colonnes de l'ensemble de résultats complet pourraient ne pas être dans l'ordre alphabétique.

3
onedaywhen

Vous pouvez simplement spécifier les colonnes que vous souhaitez sélectionner:

SELECT age, name, sex FROM Table

Les colonnes seront affichées dans le même ordre que vous les avez spécifiées dans la requête.

0
Kel

Oui. C'est possible avec la commande suivante.

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

Toutes les colonnes de votre tableau seront affichées dans l'ordre alphabétique.

0
Pamuleti Pullagura