C'est vrai que describe provient d'oracle (pas spécialement de sqlplus mais bien d'oracle vu qu'à priori n'importe quel requêteur peut l'exécuter) et a également été implémenté dans MySQL
Je ne connaissais pas "SHOW COLUMNS" mais apparement il ne fonctionne ni sous oracle ni sous sql server (j'ai pas de db2 sous la main mais connaissant ibm, c'est pas gagné non plus)... je note que cela fonctionne également pour MySQL, mais je ne suis du coup pas spécialement convaincu par l'argument "c'est du sql"
Describe est une commande de SQL*Plus ; elle a peut être été implémentée dans d'autres requêteurs. Mais il ne s'agit pas de SQL : c'est juste un raccourci qui va lancer une commande SQL, récupérer le résultat et l'afficher. Tu ne peux pas faire
oci_parse ($conn, "describe ma_table");
Tu dis que tu doutes que SHOW COLUMNS soit du SQL. Et pourtant ... Bien sûr, ce n'est pas du SQL normalisé (lequel d'ailleurs a une syntaxe tellement réduite qu'on se demande si le SQL standard existe vraiment), mais c'est le dialecte SQL parlé par MySQL. Tout comme les ordres FLASHBACK DATABASE, EXPLAIN PLAN ou encore CREATE TYPE BODY sont des ordres du dialecte SQL vu par Oracle. En plus du CREATE, DROP, SELECT, INSERT, UPDATE et DELETE, chacun a monté son propre SQL. Et encore, même les syntaxes "évoluées" de ces 6 ordres de base sont entièrement différentes d'une base à l'autre.
Voici les
ordres SQL d'Oracle (chapitre 10). La commande describe n'y figure pas, pas plus que la commande SHOW. Mais on y trouve des ordres SQL qui ne tourneront pas ailleurs.
Concernant la recherche d'informations similaires sur la description des champs dans d'autres bases de données que MySQL, il n'y a aucune règle commune : chacun stocke les descriptions de tables comme il l'entend. Par exemple, sous Oracle, il faut aller faire des SELECT dans des vues du style ALL_TAB_COLUMNS, USER_TAB_COLUMNS ou USER_IND_COLUMNS.