Retour à la liste des articles Articles
13 minutes de lecture

L'histoire des normes SQL

La norme SQL a-t-elle évolué depuis plus de 30 ans ? Tout à fait ! Découvrez le parcours du SQL-86 au SQL moderne, le langage de données standard d'aujourd'hui.

SQL a été créé au début des années 1970 par IBM. En 1974, Donald Chamberlin et Raymond Boyce ont publié l'article SEQUEL : A Structured English Query Language, qui a présenté SQL au monde entier. L'article contenait la grammaire BNF (une description technique détaillée de la syntaxe du langage) du langage, ce qu'IBM a considéré plus tard comme une erreur. La publication de la grammaire a permis à différents fournisseurs d'implémenter SQL dans leurs propres moteurs de base de données. Cependant, il y avait beaucoup de variations entre les implémentations SQL des fournisseurs, car chaque fournisseur a introduit ses propres extensions de SQL. Au milieu des années 80, des incompatibilités importantes sont apparues entre les différentes versions de SQL.

Toujours dans les années 1980, l'American National Standards Institute (ANSI) a commencé à travailler sur la norme SQL. L'objectif de l'introduction d'une norme était de permettre la portabilité des applications SQL entre les produits conformes.

SQL-86

La première norme SQL était SQL-86. Elle a été publiée en 1986 comme norme ANSI et en 1987 comme norme ISO (International Organization for Standardization). Le point de départ de la norme ISO était la mise en œuvre de la norme SQL d'IBM. Cette version de la norme SQL est également connue sous le nom de SQL 1.

La norme SQL-86 compte 120 pages. Elle contient la syntaxe des instructions SELECT, INSERT, UPDATE et DELETE. La syntaxe SELECT permet de filtrer avec WHERE, d'utiliser GROUP BY avec plusieurs colonnes (mais pas par des expressions) et de filtrer des groupes avec HAVING. Il n'existe pas de syntaxe JOIN explicite ; vous pouvez énumérer plusieurs tables dans la clause FROM pour obtenir essentiellement une jointure croisée que vous pouvez filtrer ultérieurement avec WHERE. Il n'y a aucun moyen de faire OUTER JOINs avec cette syntaxe. En revanche, la syntaxe SELECT autorise les sous-requêtes.

La norme comporte également une syntaxe de définition de schéma : vous pouvez créer des tables (avec les contraintes UNIQUE et NOT NULL uniquement), créer des vues et accorder des privilèges. Les types de données introduits dans la norme sont des chaînes de caractères et des nombres (NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL et DOUBLE PRECISION). Il n'y a pas d'instructions ALTER, DROP, ou REVOKE. Il existe également des intégrations de SQL dans divers langages de programmation (Cobol, Fortran, Pascal et PL/1).

En général, vous pouvez acheter les documents standard auprès de l'ISO ou de l'ANSI, même les versions anciennes et retirées. Cependant, comme Evan Carroll l'indique dans son billet sur Stack Overflow, il n'est pas facile de mettre la main sur la norme SQL-86 de nos jours. Mais si vous êtes intéressé, vous pouvez trouver SQL-86 sous le nom de FIPS-127.

SQL-89

La norme SQL suivante était SQL-89, publiée en 1989. Il s'agissait d'une révision mineure de la norme précédente, un sur-ensemble de SQL-86 qui a remplacé SQL-86. La taille de la norme n'a pas changé.

Les nouvelles fonctionnalités les plus importantes étaient les contraintes d'intégrité : en plus des options UNIQUE, NOT NULL et de vérification dans les vues qui étaient déjà disponibles, elle a ajouté les clés primaires, les clés étrangères et les contraintes DEFAULT et CHECK. La norme a également ajouté de nouvelles liaisons de langage pour C et Ada.

SQL-92

La révision suivante de la norme était SQL-92 - et c'était une révision majeure. Le langage introduit par SQL-92 est parfois appelé SQL 2. Le document standard est passé de 120 à 579 pages. Cependant, une grande partie de cette augmentation est due à des spécifications plus précises des fonctionnalités existantes.

Les nouvelles fonctionnalités les plus importantes sont les suivantes

  • Une syntaxe explicite JOIN et l'introduction de jointures externes : LEFT JOIN, RIGHT JOIN, FULL JOIN.
  • L'introduction de NATURAL JOIN et CROSS JOIN
  • L'introduction des opérations sur les ensembles (union d'ensembles, intersection d'ensembles et différence d'ensembles).
  • L'introduction de l'expression conditionnelle CASE WHEN.
  • De nouvelles opérations scalaires : concaténation de chaînes de caractères, extraction de sous-chaînes et calcul de la date et de l'heure.
  • L'opérateur CAST, qui permet le casting explicite de valeurs en types.

SQL-92 a également introduit de nouvelles instructions de définition de données : ALTER et DROP pour les tables et les vues, ainsi que de nouveaux types de données (date, time, timestamp, interval, bit string, varchar string et national character strings). Cette version a ajouté un schéma d'information (le moyen standard d'obtenir des métadonnées de base de données, telles que les noms de table, les colonnes de table, les types de colonne et les contraintes de table). Elle a également introduit les tables temporaires, les niveaux d'isolation des transactions et l'exécution dynamique des requêtes (SQL dynamique).

La norme SQL a été divisée en trois niveaux de conformité : entrée (le niveau d'entrée SQL-92 était similaire à SQL-89 avec des contraintes d'intégrité), intermédiaire et complet.

SQL-92 est le fondement du langage de requête utilisé aujourd'hui dans les bases de données relationnelles. Lorsqu'ils parlent de "SQL", la plupart des gens font référence à SQL-92. Les bases de données qui existaient déjà en 1992 ont modifié leur implémentation de SQL pour se conformer à la norme. Les bases de données plus récentes ont utilisé la norme comme référence pour leur implémentation.

SQL-92 est toujours ce que les gens enseignent comme "SQL" dans les écoles. Et à juste titre, SQL-92 est un très bon point de départ pour apprendre SQL. Pour beaucoup de gens, c'est suffisant pour effectuer leur travail quotidien. Vous pourrez apprendre les fonctionnalités avancées plus tard, lorsque vous en aurez besoin. Et la plupart des bases de données prennent en charge SQL-92. Aucune implémentation n'est conforme à 100 % à la norme, mais les incompatibilités ne sont pas si importantes, surtout lorsque vous débutez.

Sur LearnSQL.fr, le SQL standard est le dialecte le plus important que nous enseignons. Nous pensons que si vous apprenez le langage standard, vous pouvez l'utiliser pour travailler avec la plupart des bases de données. C'est la base de nos cours de niveau débutant ; SQL pour les débutants vous enseignera l'instruction SELECT avec toutes les fonctionnalités disponibles en SQL-92, y compris les différents types de JOIN, GROUP BY, les opérations de set et les sous-requêtes. Le cours Comment modifier une base de données avec SQL vous enseignera les instructions INSERT, UPDATE, et DELETE, tandis que Les jointures en SQL vous permettra de pratiquer différents types de JOINs.

Pour les personnes intéressées par la création de tables, nous recommandons notre parcours d'apprentissage Créer une structure de base de données. Ce parcours se compose de cinq cours qui vous apprendront à créer des tables, à définir des contraintes, à sélectionner les types de données appropriés et à créer des vues à l'aide de la syntaxe SQL standard, qui est facilement transférable entre différents moteurs de base de données.

SQL:1999

SQL:1999 (également appelé SQL 3) est la quatrième révision de la norme SQL. À partir de cette version, le nom de la norme utilise deux points au lieu d'un trait d'union pour être cohérent avec les noms des autres normes ISO. Cette norme a été publiée en plusieurs versions entre 1999 et 2002.

La première version de SQL:1999 comportait cinq parties :

  • Partie 1 : SQL/Framework (100 pages) définissait les concepts fondamentaux de SQL.
  • La partie 2 : SQL/Foundation (1050 pages) définit la syntaxe et les opérations fondamentales de SQL : types, schémas, tables, vues, instructions de requête et de mise à jour, expressions, etc. Cette partie est la plus importante pour les utilisateurs réguliers de SQL.
  • Partie 3 : SQL/CLI (Call Level Interface) (514 pages) définit une interface de programmation d'application pour SQL.
  • Partie 4 : SQL/PSM (Persistent Stored Modules) (193 pages) définit les extensions qui rendent SQL procédural.
  • Partie 5 : SQL/Bindings (270 pages) définit les méthodes d'intégration des instructions SQL dans les programmes d'application écrits dans un langage de programmation standard.

Trois autres parties, également considérées comme faisant partie de SQL:1999, ont été publiées ultérieurement.

SQL:1999 a introduit de nombreuses fonctionnalités importantes qui font partie du SQL moderne. Parmi les plus importantes figurent les expressions de table communes (CTE). Il s'agit d'une fonctionnalité très utile qui vous permet d'organiser des requêtes SQL longues et complexes et de les rendre plus lisibles. Lorsque la syntaxe WITH [RECURSIVE] est utilisée, les CTE peuvent également traiter récursivement des données hiérarchiques. Vous pouvez apprendre à écrire des requêtes récursives en SQL grâce au cours interactif de LearnSQL.fr. Requêtes récursives interactif.

SQL:1999 a également introduit les capacités OLAP (Online Analytical Processing), qui comprennent des fonctionnalités utiles pour la préparation de rapports d'entreprise. Les extensions GROUP BY ROLLUP , CUBE, et GROUPING SETS sont entrées dans la norme à cette époque. Vous pouvez les apprendre dans notre cours sur les extensions GROUP BY (ou lire l' article sur le cours et les extensions dans notre série de cours du mois de novembre 2020).

Parmi les ajouts mineurs à SQL dans la norme SQL:1999 figurent l'utilisation d'expressions dans ORDER BY, l'inclusion de types de données pour les grands objets binaires (LOB et CLOB) et l'introduction des déclencheurs.

La taille de la norme SQL a considérablement augmenté entre 1992 et 1999. La norme SQL-92 comptait près de 600 pages, mais elle restait accessible aux utilisateurs réguliers de SQL. Des livres comme A Guide to the SQL Standard de Christopher Date et Hugh Darwen discutaient et expliquaient la norme SQL-92.

À partir de SQL:1999, la norme, qui compte désormais plus de 2 000 pages, n'est plus accessible aux utilisateurs ordinaires de SQL. Elle est devenue une ressource pour les experts en bases de données et les vendeurs de bases de données. La norme guide le développement de SQL dans les principales bases de données ; elle indique quelles sont les nouvelles fonctionnalités du langage qu'il convient de mettre en œuvre pour rester à jour. Elle standardise également la syntaxe des nouvelles fonctionnalités SQL, en veillant à ce que les principales bases de données les mettent en œuvre de manière similaire, en utilisant une syntaxe et une sémantique similaires.

Le changement de rôle de la norme SQL est souligné par le fait qu'il n'y a plus d'organisme officiel qui certifie la conformité à la norme. Jusqu'en 1996, le programme de normes de gestion des données du National Institute of Standards and Technology (NIST) certifiait la conformité des SGBD à la norme SQL. Désormais, les fournisseurs auto-certifient la conformité de leurs produits.

SQL:2003 et au-delà

Au 21e siècle, la norme SQL a été régulièrement mise à jour.

La norme SQL:2003 a été publiée le 1er mars 2004. Son principal ajout était les fonctions de fenêtre, une puissante fonction analytique qui vous permet de calculer des statistiques récapitulatives sans réduire les lignes. Les fonctions de fenêtre ont considérablement augmenté la puissance expressive de SQL. Elles sont extrêmement utiles pour la préparation de toutes sortes de rapports d'entreprise, l'analyse de données de séries chronologiques et l'analyse de tendances. L'ajout des fonctions de fenêtre à la norme a coïncidé avec la popularité de l'OLAP et des entrepôts de données. Les gens ont commencé à utiliser les bases de données pour prendre des décisions commerciales basées sur les données. Cette tendance ne fait que s'accentuer, grâce à la quantité croissante de données que toutes les entreprises collectent. Vous pouvez apprendre les fonctions de fenêtre avec notre Fonctions de fenêtrage cours. () SQL:2003 a également introduit des fonctions liées à XML, des générateurs de séquence et des colonnes d'identité.

Après 2004, il n'y a pas eu d'ajouts majeurs et révolutionnaires au langage. Les modifications apportées à la norme SQL ont reflété les changements technologiques de l'époque. SQL:2003 a introduit des fonctions liées à XML pour permettre l'interopérabilité entre les bases de données et les technologies XML, qui étaient à la mode au début des années 2000. SQL:2006 a précisé davantage la manière d'utiliser SQL avec XML. Il ne s'agissait pas d'une révision de l'ensemble de la norme SQL, mais uniquement de la partie 14, qui traite de l'interopérabilité SQL-XML.

Les révisions suivantes de la norme ont apporté des améliorations mineures au langage. SQL:2008 a légalisé l'utilisation de ORDER BY en dehors des définitions de curseur ( !), et a ajouté les déclencheurs INSTEAD OF, l'instruction TRUNCATE et la clause FETCH. SQL:2011 a ajouté les données temporelles et quelques améliorations aux fonctions de fenêtre et à la clause FETCH.

SQL:2016 a ajouté la correspondance des motifs de ligne et les fonctions de table polymorphes, ainsi que le support JSON tant attendu. Dans les années 2010, JSON a remplacé XML comme format commun d'échange de données ; les applications Internet modernes utilisent JSON au lieu de XML comme format de données. Le mouvement NoSQL émergent a également popularisé JSON ; les bases de données documentaires stockent des fichiers JSON, et les magasins de valeurs clés sont compatibles avec le format JSON. La norme SQL a ajouté la prise en charge de JSON pour permettre l'interopérabilité avec les applications modernes et les nouveaux types de bases de données.

La norme SQL actuelle est SQL:2019. Elle a ajouté la partie 15, qui définit la prise en charge des tableaux multidimensionnels dans SQL.

Quel est votre avenir avec SQL ?

Si l'on considère plus de 30 ans d'histoire de SQL, on peut voir les différentes étapes de son développement. SQL 1 dans les années 1980 (SQL-86, SQL-89) a constitué le premier effort de normalisation et de formalisation de la définition du langage. SQL-92 a fourni les bases du langage stable que nous connaissons aujourd'hui, celui qui est désormais le langage de données standard pour toutes les principales technologies de données.

SQL:1999 et SQL:2003 ont jeté les bases du SQL moderne, avec l'ajout de fonctions de fenêtre, de Common Table Expressions et d'extensions GROUP BY. Après 2003, le langage a atteint la phase de stabilité et de maturité. Le cœur du langage ne change pas, mais de nouvelles fonctionnalités sont ajoutées pour améliorer le langage existant et pour prendre en charge les technologies émergentes, telles que XML ou JSON.

infographie

La norme SQL n'est plus une référence pour les utilisateurs réguliers de SQL. Cependant, les avantages de l'existence d'un standard sont nombreux. La norme :

  • Indique les extensions de langage qui sont importantes et utiles.
  • Guide le développement des implémentations SQL dans les bases de données et autres technologies de traitement des données.
  • fournit la syntaxe et la sémantique communes que la plupart des technologies de traitement des données mettront en œuvre.

La norme ne garantit pas que toutes les implémentations SQL soient parfaitement compatibles, mais elle garantit qu'elles sont pour la plupart alignées et qu'elles évoluent toutes dans la même direction.

Sur LearnSQL.fr, vous pouvez apprendre toutes les fonctionnalités modernes de SQL grâce à nos cours interactifs :

Maintenant que vous connaissez l'histoire de SQL, quel sera votre avenir avec ce langage ? Nous espérons que vous l'apprendrez et que vous constaterez par vous-même à quel point SQL est puissant et efficace !

Sources :