Nous apprenons que la plupart des langues sont classées comme l'une des deux, "basées sur les relations" ou "de haut niveau".
Ces concepts sont orthogonaux. "Basé sur les relations" signifie que la sémantique du langage est basée sur le concept d'une relation, c'est-à-dire une association plusieurs-à-plusieurs entre deux ensembles (les relations sont le fondement mathématique derrière les tables SQL). "De haut niveau" signifie que le langage contient beaucoup d'abstractions qui cachent une grande partie des détails techniques sous-jacents (tels que les emplacements de mémoire, les registres du processeur, l'accès au disque, les opérations au niveau du bit, etc.). SQL est certainement basé sur les relations, car son objectif principal est de décrire les données relationnelles et les opérations qui s'y rapportent. SQL est également un niveau assez élevé; il ne fournit aucun moyen d'accéder directement aux octets sur le disque, et il ne vous donne aucun détail sur la façon dont il stocke ses données (du moins, le SQL standard ne le fait pas;
En fait, il existe de nombreux autres axes le long desquels les langages de programmation (et de données) peuvent être classés; une déclaration particulièrement intéressante est déclarative et impérative . Langages déclaratifs décrivent ce que quelque chose est ; les langues impératives décrivent comment faire quelque chose. La partie de SQL DDL est la plupart du temps déclarative, malgré les mots - clés impératifs prospectifs ( » CREATE TABLE
», « DROP DATABASE
», etc.), et même la partie de manipulation de données ( SELECT
, UPDATE
, INSERT
, DELETE
) est encore assez déclarative. Une propriété très intéressante de SQL est qu'il n'est pas Turing complet: vous ne pouvez pas écrire une boucle illimitée en SQL ANSI standard standard.
La programmation fonctionnelle s'articule autour de quelques idées fondamentales:
- les fonctions sont des citoyens de première classe (c'est-à-dire qu'elles peuvent être utilisées comme valeurs, comme entrées pour d'autres fonctions et comme sortie d'autres fonctions)
- fonctions d'ordre supérieur (fonctions qui opèrent sur des fonctions ou fonctions qui renvoient des fonctions)
- pureté (une fonction pure est une fonction qui n'a pas d'effets secondaires; une fonction pure ne peut pas faire d'E / S, elle ne peut ni lire ni modifier aucun état global, et elle ne peut pas prendre d'arguments de référence non const. Les fonctions pures sont particulièrement intéressantes car elles toujours produire la même sortie pour les mêmes entrées)
SQL ne tourne certainement pas autour des fonctions comme outil principal pour modéliser les choses, mais il embrasse quelque peu l'idée de pureté - la même requête exécutée sur la même base de données donnera le même résultat, à chaque fois (sauf pour la commande). Appeler SQL un langage «fonctionnel» est un peu exagéré grâce à l'OMI.