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?
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.
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)
SELECT *
n'est pas recommandé et ne triera pas les noms de colonnesSELECT 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 ...
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.
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.
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.