Article de reference

SQL

Le langage SQL ( prononcé S-QL ; historiquement « suite ») est un langage spécifique à un domaine utilisé pour gérer des données, en particulier dans un système de gestion de ba...

Le langage SQL ( prononcé S-QL ; historiquement « suite ») est un langage spécifique à un domaine utilisé pour gérer des données, en particulier dans un système de gestion de base de données relationnelle (SGBDR). Il est particulièrement utile pour gérer des données structurées , c'est-à-dire des données intégrant des relations entre entités et variables.

Introduit dans les années 1970, SQL offrait deux avantages principaux par rapport aux anciennes API de lecture-écriture telles qu'ISAM ou VSAM . Tout d'abord, il a introduit le concept d'accès à de nombreux enregistrements avec une seule commande . Ensuite, il élimine le besoin de spécifier comment atteindre 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ées de manière informelle comme sous-langages , communément : 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 domaine d'application de SQL comprend la requête de données, la manipulation de données (insertion, mise à jour et suppression), la définition de données ( création et modification de schémas ) et 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 a été l'un des premiers langages commerciaux à utiliser le modèle relationnel d' Edgar F. Codd . Le modèle a été 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 lors, la norme a été révisée à plusieurs reprises pour inclure un ensemble plus large de fonctionnalités et incorporer des extensions communes. Malgré l'existence de normes, pratiquement aucune implémentation existante n'y adhère pleinement, et la plupart du code SQL nécessite au moins quelques modifications avant d'être porté vers différents systèmes de base de données .

Histoire

SQL a été initialement développé chez 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 les données stockées dans le système de gestion de base de données quasi-relationnelle d'origine d'IBM, System R , qu'un groupe du laboratoire de recherche IBM de San Jose avait développé dans les 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 il était difficile à utiliser en raison de la notation en indice/exposant. Après avoir rejoint le laboratoire de recherche de San Jose en 1973, ils commencèrent à travailler sur une suite de SQUARE. Le nom d'origine SEQUEL, qui est largement considéré comme un jeu de mots sur QUEL , le langage de requête d' Ingres , fut plus tard changé en SQL (en supprimant les voyelles) car « SEQUEL » était une marque déposée de la société britannique Hawker Siddeley Dynamics Engineering Limited. Le label SQL devint plus tard l'acronyme de Structured Query Language.

Après avoir testé SQL sur des sites de test clients pour 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 , qui étaient disponibles dans le commerce respectivement en 1979, 1981 et 1983.

À la fin des années 1970, Relational Software, Inc. (aujourd'hui Oracle Corporation ) a vu le potentiel des concepts décrits par Codd, Chamberlin et Boyce et a développé son propre SGBDR basé sur SQL dans l'espoir de le vendre à la marine américaine , à la CIA et à d'autres agences gouvernementales américaines . En juin 1979, Relational Software a présenté l'une des premières implémentations commerciales de SQL, Oracle V2 (Version2) pour les ordinateurs VAX .

En 1986, les groupes de normalisation ANSI et ISO ont officiellement adopté la définition du langage standard « Database Language 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.

Syntaxe

Un graphique montrant plusieurs éléments du langage SQL constituant une seule instruction

Le langage SQL est subdivisé en plusieurs éléments de langage, notamment :

  • Clauses , qui sont des composants constitutifs des instructions et des requêtes. (Dans certains cas, elles sont facultatives.)
  • Expressions , qui peuvent produire soit des valeurs scalaires , soit des tableaux constitués de colonnes et de lignes de données
  • Prédicats , qui spécifient des conditions qui peuvent être évaluées selon la logique SQL à trois valeurs (3VL) (vrai/faux/inconnu) ou des valeurs de vérité booléennes et sont utilisés pour limiter les effets des instructions et des requêtes, ou pour modifier le flux du programme.
  • Les requêtes , qui récupèrent les données en fonction de critères spécifiques. Il s'agit d'un élément important de SQL .
  • Instructions qui 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 terminateur d'instruction point-virgule (« ; »). Bien qu'il ne soit pas obligatoire sur toutes les plateformes, il est défini comme un élément standard de la grammaire SQL.
  • Les espaces insignifiants sont généralement ignorés dans les instructions et requêtes SQL, ce qui facilite le formatage du code SQL pour plus de lisibilité.

Prolongations 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 basé sur des ensembles , et non un langage de programmation impératif comme C ou BASIC . Cependant, des extensions à SQL standard ajoutent des fonctionnalités de langage de programmation procédural , telles que les constructions 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 plates-formes SQL via 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 prendre en charge le code Java dans les bases de données SQL. Microsoft SQL Server 2005 utilise SQLCLR (SQL Server Common Language Runtime) pour héberger des assemblages .NET géré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 géré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.

Interopérabilité et normalisation

Aperçu

Les implémentations SQL sont incompatibles entre les fournisseurs et ne respectent pas nécessairement complètement les normes. En particulier, la syntaxe de date et d'heure, la concaténation de chaînes, NULLles s et la sensibilité à la casse des comparaisons varient d'un fournisseur à l'autre. PostgreSQL et Mimer SQL s'efforcent de se conformer aux normes, bien que PostgreSQL n'adhère pas à la norme dans tous les cas. Par exemple, le pliage des noms sans guillemets en minuscules dans PostgreSQL est incompatible avec la norme SQL, qui stipule que les noms sans guillemets doivent être pliés en majuscules. Ainsi, selon la norme, Foodevrait être équivalent à FOO, et non à foo.

Les implémentations les plus courantes de SQL omettent généralement de prendre en charge les fonctionnalités de base de SQL standard, telles que les types de données DATEou . Les exemples les plus évidents, et accessoirement les SGBD SQL commerciaux et propriétaires les plus populaires, sont Oracle (dont se comporte comme , et n'a pas de type) et MS SQL Server (avant la version 2008). Par conséquent, le code SQL peut rarement être porté entre les systèmes de base de données sans modifications. TIMEDATEDATETIMETIME

Raisons d'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 signifient que la plupart des implémenteurs 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 les implémentations décider comment se comporter.
  • La norme SQL renvoie certaines décisions aux implémentations individuelles, comme la manière 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 de langage est moins bien définie, ce qui peut conduire à une certaine ambiguïté.
  • De nombreux fournisseurs de bases de données disposent d'une large base de clients 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, celui-ci peut être réticent à rompre la compatibilité descendante .
  • Il existe peu d'incitations commerciales pour les fournisseurs à faciliter le changement de fournisseur de base de données (voir verrouillage du fournisseur ).
  • Les utilisateurs qui évaluent les logiciels de base de données ont tendance à placer d’autres facteurs tels que les performances plus haut dans leurs priorités que 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. Les fournisseurs certifient désormais eux-mêmes la conformité de leurs produits.

La norme originale déclarait que la prononciation officielle de « SQL » était un sigle : / ˌ ɛ s ˌ k juː ˈ ɛ l / (« ess cue el »). Quoi qu'il en soit, de nombreux professionnels anglophones des bases de données (dont Donald Chamberlin lui-même ) utilisent la prononciation de type acronyme de / ˈ s k w əl / (« sequel »), reflétant le nom de développement préliminaire du langage, « SEQUEL ».
La norme SQL a connu un certain nombre de révisions :

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 raccourci, ISO/IEC 9075 . Les parties intéressées peuvent acheter les documents normatifs auprès de l'ISO, de l'IEC ou de l'ANSI. Certains anciens projets sont disponibles gratuitement.

La norme ISO/IEC 9075 est complétée par la norme ISO/IEC 13249 : Packages multimédia et d'application SQL et certains rapports techniques .

Alternatives

Il convient de faire une distinction entre 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. Voir base de données de navigation et NoSQL pour les alternatives au modèle relationnel.

Traitement SQL distribué

L'architecture de base de données relationnelle distribuée (DRDA) a été conçue par un groupe de travail au sein d'IBM de 1988 à 1994. DRDA permet aux bases de données relationnelles connectées au réseau de coopérer pour répondre aux requêtes SQL.

Un utilisateur ou un programme interactif peut envoyer des instructions SQL à une RDB locale et recevoir des tables de données et des indicateurs d'état en réponse à partir de RDB distantes. Les instructions SQL peuvent également être compilées et stockées dans des RDB distantes sous forme de packages, puis appelées par nom de package. Cela est important pour le fonctionnement efficace des programmes d'application qui émettent des requêtes complexes à haute fréquence. Cela est particulièrement important lorsque les tables auxquelles il faut accéder sont situées dans des systèmes distants.

Les messages, les protocoles et les composants structurels de DRDA sont définis par l' architecture de gestion des données distribuées . Le traitement SQL distribué à la DRDA se distingue des bases de données SQL distribuées contemporaines .

Critiques

Conception

SQL s'écarte de plusieurs manières de son fondement théorique, le modèle relationnel et son calcul des tuples. Dans ce modèle, une table est un ensemble de tuples, alors que dans SQL, les tables et les résultats de requêtes sont des listes de lignes ; la même ligne peut apparaître plusieurs fois et l'ordre des lignes peut être utilisé dans les requêtes (par exemple, dans la clause LIMIT). Les critiques soutiennent que SQL devrait être remplacé par un langage qui revient strictement au fondement d'origine : par exemple, voir The Third Manifesto de Hugh Darwen et CJ Date (2006, ISBN 0-321-39942-0 ).

Orthogonalité et complétude

Les premières spécifications ne prenaient pas en charge les fonctionnalités majeures, telles que les clés primaires. Les ensembles de résultats ne pouvaient pas être nommés et les sous-requêtes n'avaient pas été définies. Ces spécifications ont été ajoutées en 1992.

L'absence de types de somme a été décrite comme un obstacle à l'utilisation complète des types définis par l'utilisateur de SQL. La prise en charge de JSON, par exemple, devait être ajoutée par une nouvelle norme en 2016.

Nul

Le concept de Null fait l'objet de débats . Le marqueur Null indique l'absence de valeur et est différent d'une valeur de 0 pour une colonne d'entiers ou d'une chaîne vide pour une colonne de texte. Le concept de valeurs Null renforce la logique à 3 valeurs dans SQL , qui est une implémentation concrète de la logique générale à 3 valeurs .

Doublons

Une autre critique courante est qu'il permet de dupliquer des lignes, ce qui rend l'intégration avec des langages tels que Python , dont les types de données peuvent rendre difficile la représentation précise des données, en termes d'analyse et par l'absence de modularité. Cela est généralement évité en déclarant une clé primaire, ou une contrainte unique, avec une ou plusieurs colonnes qui identifient de manière unique une ligne dans la table.

Désadaptation d'impédance

Dans un sens similaire à l'inadéquation d'impédance objet-relationnelle , une inadéquation se produit entre le langage SQL déclaratif et les langages procéduraux dans lesquels SQL est généralement intégré.

Types de données SQL

La norme SQL définit trois types de données (chapitre 4.1.1 de SQL/Foundation) :

  • types de données prédéfinis
  • types construits
  • types définis par l'utilisateur.

Les types construits sont de type ARRAY, MULTISET, REF(erence) ou ROW. Les types définis par l'utilisateur sont comparables aux classes d'un langage orienté objet avec leurs propres constructeurs, observateurs, mutateurs, méthodes, héritage, surcharge, écrasement, interfaces, etc. Les types de données prédéfinis sont intrinsèquement pris en charge par l'implémentation.

Types de données prédéfinis

  • Types de caractères
    • Caractère (CHAR)
    • Caractère variable (VARCHAR)
    • Objet de grande taille (CLOB)
  • Types de caractères nationaux
    • Caractère national (NCHAR)
    • Caractère national variable (NCHAR VARYING)
    • Objet de grande taille à caractère national (NCLOB)
  • Types binaires
    • Binaire (BINAIRE)
    • Variable binaire (VARBINARY)
    • Objet binaire volumineux (BLOB)
  • Types numériques
    • Types numériques exacts (NUMERIC, DECIMAL, SMALLINT, INTEGER, BIGINT)
    • Types numériques approximatifs (FLOAT, REAL, DOUBLE PRECISION)
    • Type à virgule flottante décimale (DECFLOAT)
  • Types de date et d'heure (DATE, HEURE, HORODATAGE)
  • Type d'intervalle (INTERVAL)
  • Booléen
  • XML (voir SQL/XML )
  • JSON

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index