Pas vraiment. Vous pouvez utiliser le *
caractère générique de colonne
pour sélectionner toutes les colonnes. Si vous rejoignez plusieurs tables, vous pouvez sélectionner toutes les colonnes d'une table spécifique en préfixant *
avec le nom ou l'alias de la table :
SELECT a.id, a.title, b.*
FROM articles AS a
JOIN blurbs AS b ON a.id = b.article
Cependant, vous ne devriez pas utiliser *
sauf si vous écrivez un programme d'administration de base de données.
Vous pouvez également créer une instruction dans SQL ou dans un autre langage en récupérant les métadonnées de table pour obtenir les noms de colonne. En utilisant uniquement MySQL, vous pouvez interroger les COLUMNS
table dans le INFORMATION_SCHEMA
base de données pour obtenir les noms de colonne et utiliser GROUP_CONCAT
pour créer la liste des colonnes de l'instruction.
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
' FROM ', :db, '.', :table,
' WHERE ...'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table
Remplacez ":db", ":table" et "..." par les valeurs appropriées. Vous pouvez même le transformer en une instruction préparée afin de pouvoir l'utiliser pour n'importe quelle table. À partir de là, PREPARE
et EXECUTE
l'instruction construite.
Si vous n'êtes pas limité à SQL pour la programmation, cela devrait être moins salissant. Le pilote de base de données pour la langue de votre choix propose probablement des méthodes pour obtenir des métadonnées. L'implémentation réelle serait similaire à l'approche SQL pure (obtenir les noms de colonne, assembler l'instruction, préparer, exécuter), mais ne devrait pas être si laide, car vous utiliseriez un langage algorithmique plutôt que déclaratif.
Je serais très intéressé de voir la situation dans laquelle cela est réellement nécessaire..