Apparu dans les années 1970, SQL offrait deux avantages majeurs par rapport aux anciennes API de lecture - écriture telles qu'ISAM ou VSAM . Premièrement, il a introduit le concept d'accès à de nombreux enregistrements avec une seule commande . Deuxièmement, il élimine la nécessité de spécifier comment accéder à un enregistrement, c'est-à-dire avec ou sans index .
Initialement basé sur l'algèbre relationnelle et le calcul relationnel des tuples , SQL se compose de nombreux types d'instructions, qui peuvent être classés de manière informelle comme des sous-langages , généralement : langage de requête de données (DQL), langage de définition de données (DDL), langage de contrôle de données (DCL) et langage de manipulation de données (DML).
Le champ d'application de SQL englobe l'interrogation, la manipulation (insertion, mise à jour et suppression) et la définition ( création et modification de schémas ) des données, ainsi que le contrôle d'accès aux données. Bien que SQL soit essentiellement un langage déclaratif ( 4GL ), il comprend également des éléments procéduraux .
SQL fut l'un des premiers langages commerciaux à utiliser le modèle relationnel d' Edgar F. Codd . Ce modèle fut décrit dans son article influent de 1970, « A Relational Model of Data for Large Shared Data Banks » . Bien qu'il n'adhère pas entièrement au modèle relationnel décrit par Codd , SQL est devenu le langage de base de données le plus utilisé
SQL est devenu une norme de l' American National Standards Institute (ANSI) en 1986 et de l' Organisation internationale de normalisation (ISO) en 1987. Depuis, la norme a été révisée à plusieurs reprises afin d'inclure un plus grand nombre de fonctionnalités et d'intégrer des extensions courantes. Malgré l'existence de normes, pratiquement aucune implémentation existante ne les respecte pleinement, et la plupart du code SQL nécessite au moins quelques modifications avant d'être porté sur d'autres systèmes de bases de données .
IBM par Donald D. Chamberlin et Raymond F. Boyce après avoir découvert le modèle relationnel auprès d' Edgar F. Codd au début des années 1970. Cette version, initialement appelée SEQUEL (Structured English Query Language), a été conçue pour manipuler et récupérer des données stockées dans le système de gestion de base de données quasi-relationnel original d'IBM, System R , qu'un groupe du laboratoire de recherche IBM de San Jose avait développé au cours des années 1970.La première tentative de Chamberlin et Boyce pour créer un langage de base de données relationnelle fut SQUARE (Specifying Queries in A Relational Environment), mais son utilisation s'avérait complexe en raison de la notation indice/exposant. Après leur arrivée au Laboratoire de recherche de San José en 1973, ils entreprirent le développement d'une suite à SQUARE. Le nom original, SEQUEL, souvent considéré comme un jeu de mots avec QUEL , le langage de requêtes d' Ingres , fut par la suite simplifié en SQL (sans les voyelles) car « SEQUEL » était une marque déposée de la société britannique Hawker Siddeley Dynamics Engineering Limited. L'acronyme SQL est ensuite devenu celui de Structured Query Language (langage de requête structuré).
Après avoir testé SQL sur des sites clients afin de déterminer l'utilité et la praticité du système, IBM a commencé à développer des produits commerciaux basés sur son prototype System R, notamment System/38 , SQL/DS et IBM Db2 , commercialisés respectivement en 1979, 1981 et 1983. Le soutien d'IBM a incité l'industrie à adopter SQL, abandonnant des alternatives comme QUEL.
À la fin des années 1970, Relational Software, Inc. (aujourd'hui Oracle Corporation ) a perçu le potentiel des concepts décrits par Codd, Chamberlin et Boyce et a développé son propre SGBDR basé sur SQL , avec l'ambition de le vendre à l' US Navy , à la CIA et à d'autres agences gouvernementales américaines . En juin 1979, Relational Software a lancé l'une des premières implémentations commerciales de SQL, Oracle V2 (Version 2) pour ordinateurs VAX .
En 1986, les groupes de normalisation ANSI et ISO ont officiellement adopté la définition du langage standard « SQL ». De nouvelles versions de la norme ont été publiées en 1989, 1992 , 1996, 1999 , 2003 , 2006 , 2008 , 2011 , 2016 et, plus récemment , 2023.
Interopérabilité et normalisation
Foodevrait être équivalent à `a` FOO, et non à `b` foo.Les implémentations courantes de SQL omettent souvent la prise en charge de fonctionnalités de base du SQL standard, telles que les types de données ` DATET` ou ` WHERE`. Les exemples les plus flagrants, et par ailleurs les SGBD SQL commerciaux et propriétaires les plus répandus, sont Oracle (dont ` T` se comporte comme ` WHERE` et ne possède pas de type `WHERE`) et MS SQL Server (avant la version 2008). De ce fait, le code SQL est rarement portable d'un système de base de données à un autre sans modifications.TIMEDATEDATETIMETIME
Raisons de l'incompatibilité
Plusieurs raisons expliquent le manque de portabilité entre les systèmes de bases de données :
- La complexité et la taille de la norme SQL font que la plupart des développeurs ne prennent pas en charge l'intégralité de la norme.
- La norme SQL ne spécifie pas le comportement de la base de données dans certains domaines importants (par exemple, les index , le stockage de fichiers), laissant aux implémentations le soin de décider comment se comporter.
- La norme SQL laisse certaines décisions aux implémentations individuelles, comme la façon de nommer une colonne de résultats qui n'a pas été nommée explicitement.
- La norme SQL spécifie précisément la syntaxe qu'un système de base de données conforme doit implémenter. Cependant, la spécification de la sémantique des constructions du langage par cette norme est moins bien définie, ce qui engendre des ambiguïtés.
- De nombreux fournisseurs de bases de données disposent d'une large clientèle existante ; lorsque la nouvelle version de la norme SQL entre en conflit avec le comportement antérieur de la base de données du fournisseur, ce dernier peut être réticent à rompre la rétrocompatibilité .
- Les fournisseurs ont peu d’incitations commerciales à faciliter le changement de fournisseur de bases de données (voir dépendance vis-à-vis du fournisseur ).
- Les utilisateurs qui évaluent les logiciels de bases de données ont tendance à accorder plus de priorité à d'autres facteurs, tels que les performances, qu'à la conformité aux normes.
Historique de la normalisation
SQL a été adopté comme norme par l'ANSI en 1986 sous le nom de SQL-86 et par l'ISO en 1987. Il est maintenu par l'ISO/IEC JTC 1, Technologies de l'information, Sous-comité SC 32, Gestion et échange de données .
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 SQL à la norme SQL. Désormais, les fournisseurs auto-certifient la conformité de leurs produits.
: / abrégée Année Norme officielle Nom informel Commentaires 1986 1987 ANSI X3.135:1986 ISO/CEI 9075 :1987 FIPS PUB 127 FIPS PUB 127 1989 ANSI X3.135-1989 ISO/IEC 9075:1989 FIPS PUB 127-1 SQL-92 SQL2 Révision majeure (ISO 9075), SQL-92 de niveau d'entrée , adoptée comme FIPS PUB 127-2 1999 ISO/CEI 9075:1999 SQL:1999 SQL3 Ajout de la correspondance d'expressions régulières, des requêtes récursives (par exemple, fermeture transitive ), des déclencheurs , de la prise en charge des instructions procédurales et de contrôle de flux, des types non scalaires (tableaux) et de certaines fonctionnalités orientées objet (par exemple, types structurés ), de la prise en charge de l'intégration de SQL dans Java ( SQL/OLB ) et vice versa ( SQL/JRT ). 2003 ISO/CEI 9075:2003 SQL:2003 Introduction de fonctionnalités liées à XML ( SQL/XML ), de fonctions de fenêtrage , de séquences standardisées et de colonnes à valeurs auto-générées (y compris les colonnes d'identité). 2006 XQuery , le langage de requêtes XML publié par le World Wide Web Consortium ( W3C ), afin d'accéder simultanément à des données SQL et à des documents XML. 2008 ISO/IEC 9075:2008 SQL:2008 Légalise l'utilisation de ORDER BY en dehors des définitions de curseur. Ajoute les déclencheurs INSTEAD OF, l'instruction TRUNCATE et la clause FETCH 2011 ISO/IEC 9075:2011 SQL:2011 Ajoute des données temporelles (PERIOD FOR) (plus d'informations dans Base de données temporelle#Historique ). Améliorations des fonctions de fenêtre et de la clause FETCH. 2016 ISO/IEC 9075:2016 SQL:2016 Ajoute la correspondance de modèles de lignes, les fonctions de table polymorphes et les opérations sur les données JSON stockées dans des champs de chaînes de caractères. 2019 ISO/IEC 9075-15:2019 Ajoute la partie 15, tableaux multidimensionnels (type MDarray et opérateurs) 2023 ISO/IEC 9075:2023 SQL:2023 Ajoute le type de données JSON (SQL/Foundation) ; ajoute la partie 16, Requêtes de graphe de propriétés (SQL/PGQ)
Norme actuelle
La norme est généralement désignée par le modèle suivant : ISO/IEC 9075-n:yyyy Partie n: titre , ou, en abrégé, ISO/IEC 9075. Les parties intéressées peuvent se procurer les documents normatifs auprès de l’ISO, de la CEI ou de l’ANSI. Certaines versions préliminaires anciennes sont disponibles gratuitement.
La norme ISO/IEC 9075 est complétée par la norme ISO/IEC 13249 : SQL Multimedia et packages d’applications et par certains rapports techniques .
Syntaxe
Le langage SQL est subdivisé en plusieurs éléments, notamment :
- Les clauses sont des éléments constitutifs des instructions et des requêtes. (Dans certains cas, elles sont facultatives.)
- Les expressions peuvent produire soit des valeurs scalaires , soit des tableaux composés de colonnes et de lignes de données.
- Les prédicats , qui spécifient des conditions pouvant être évaluées en logique à trois valeurs SQL (3VL) (vrai/faux/inconnu) ou en valeurs de vérité booléennes , sont utilisés pour limiter les effets des instructions et des requêtes, ou pour modifier le flux du programme.
- Les requêtes permettent de récupérer des données en fonction de critères spécifiques. Il s'agit d'un élément important du SQL .
- Les instructions peuvent avoir un effet persistant sur les schémas et les données, ou peuvent contrôler les transactions , le flux du programme, les connexions, les sessions ou les diagnostics.
- Les instructions SQL incluent également le point-virgule (« ; ») comme terminateur. Bien que non obligatoire sur toutes les plateformes, il fait partie intégrante de la syntaxe SQL.
- Les espaces blancs insignifiants sont généralement ignorés dans les instructions et les requêtes SQL, ce qui facilite la mise en forme du code SQL pour une meilleure lisibilité.
Extensions procédurales
SQL est conçu dans un but précis : interroger les données contenues dans une base de données relationnelle . SQL est un langage de programmation déclaratif , orienté ensembliste , et non un langage impératif comme C ou BASIC . Cependant, des extensions à SQL standard ajoutent des fonctionnalités de programmation procédurale , telles que les structures de contrôle de flux.
Outre les extensions SQL/PSM standard et les extensions SQL propriétaires, la programmabilité procédurale et orientée objet est disponible sur de nombreuses plateformes SQL grâce à l'intégration de SGBD avec d'autres langages. La norme SQL définit les extensions SQL/JRT (SQL Routines and Types for the Java Programming Language) pour la prise en charge du code Java dans les bases de données SQL. Microsoft SQL Server 2005 utilise SQLCLR (SQL Server Common Language Runtime) pour héberger des assemblys .NET managés dans la base de données , tandis que les versions précédentes de SQL Server étaient limitées aux procédures stockées étendues non managées, principalement écrites en C. PostgreSQL permet aux utilisateurs d'écrire des fonctions dans une grande variété de langages, notamment Perl , Python , Tcl , JavaScript (PL/V8) et C.
Alternatives
Il convient de distinguer les alternatives au langage SQL et les alternatives au modèle relationnel lui-même. Vous trouverez ci-dessous des alternatives relationnelles proposées au langage SQL. Pour des alternatives au modèle relationnel, veuillez consulter les sections Bases de données navigationnelles et NoSQL .
.QL : Datalog orienté objet