Accueil🇫🇷Chercher

Structured Query Language

SQL (sigle de Structured Query Language, en français langage de requête structurée) est un langage informatique normalisé servant à exploiter des bases de données relationnelles. La partie langage de manipulation des données de SQL permet de rechercher, d'ajouter, de modifier ou de supprimer des données dans les bases de données relationnelles.

SQL
Image illustrative de l’article Structured Query Language

Date de première version 1974
Paradigme déclaratif, procédural, orienté objet
Auteur Donald D. Chamberlin et Raymond F. Boyce
DĂ©veloppeur IBM
Dernière version SQL:2016 (2016)
Typage statique et fort
Dialectes SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003, SQL:2008, SQL:2011, SQL:2016
Influencé par Datalog
Logique du premier ordre
A influencé CQL, LINQ, Windows PowerShell
Implémentations nombreuses
Système d'exploitation Multiplate-forme
Site web www.iso.org/standard/76583.html
Extension de fichier sql
SQL
Structured Query Language
Caractéristiques
Extension
.sql
Type MIME
application/x-sql, application/sql
Développé par
Version initiale
Type de format
Base de données
Basé sur
Norme
ISO/CEI 9075
Site web

Outre le langage de manipulation des données :

  • le langage de dĂ©finition des donnĂ©es permet de crĂ©er et de modifier l'organisation des donnĂ©es dans la base de donnĂ©es,
  • le langage de contrĂ´le de transaction permet de commencer et de terminer des transactions,
  • le langage de contrĂ´le des donnĂ©es permet d'autoriser ou d'interdire l'accès Ă  certaines donnĂ©es Ă  certaines personnes.

Créé en 1974, normalisé depuis 1986, le langage est reconnu par la grande majorité des systèmes de gestion de bases de données relationnelles (abrégé SGBDR) du marché.

SQL fait partie de la même famille que les langages ALPHA (dont il est le descendant), SQUARE, QUEL (intégré à Ingres) ou QBE (Zloof). Il a été appelé SEQUEL à sa naissance, mais ce nom a été changé en SQL du fait que SEQUEL était une marque déposée de l'avionneur Hawker-Siddeley.

Historique

En juin 1970, Edgar Frank Codd publia l'article A Relational Model of Data for Large Shared Data Banks (« Un référentiel de données relationnel pour de grandes banques de données partagées ») dans la revue Communications of the ACM (Association for Computing Machinery). Ce référentiel relationnel fondé sur la logique des prédicats du premier ordre a été rapidement reconnu comme un modèle théorique intéressant, pour l'interrogation des bases de données, et a inspiré le développement du langage Structured English QUEry Language (SEQUEL) (« langage d'interrogation structuré en anglais »), renommé ultérieurement SQL pour cause de conflit de marque déposée.

Développée chez IBM en 1970 par Donald Chamberlin et Raymond Boyce, cette première version a été conçue pour manipuler et éditer des données stockées dans la base de données relationnelle à l'aide du système de gestion de base de données IBM System R. Le nom SEQUEL, qui était déposé commercialement par l'avionneur Hawker Siddeley pour un système d'acquisition de données, a été abandonné et contracté en SQL en 1975[1]. SQL était censé alors devenir un élément clé du futur projet FS.

En 1979, Relational Software, Inc. (actuellement Oracle Corporation) présenta la première version commercialement disponible de SQL, rapidement imité par d'autres fournisseurs.

SQL a été adopté comme recommandation par l'Institut de normalisation américaine (ANSI) en 1986, puis comme norme internationale par l'ISO en 1987 sous le nom de ISO/CEI 9075 - Technologies de l'information - Langages de base de données - SQL[2].

La norme internationale SQL est passée par un certain nombre de révisions :

AnnéeNomAppellationCommentaires
1986ISO/CEI 9075:1986SQL-86 ou SQL-87Édité par l'ANSI puis adopté par l'ISO en 1987.
1989ISO/CEI 9075:1989SQL-89 ou SQL-1RĂ©vision mineure.
1992ISO/CEI 9075:1992SQL-92 (en) alias SQL2RĂ©vision majeure.
1999ISO/CEI 9075:1999SQL-99 (en) alias SQL3Expressions rationnelles, requêtes récursives, déclencheurs, types non-scalaires et quelques fonctions orientées objet (les deux derniers points sont quelque peu controversés et pas encore largement implémentés).
2003ISO/CEI 9075:2003SQL:2003 (en)Introduction de fonctions pour la manipulation XML, « window functions », ordres standardisés et colonnes avec valeurs auto-produites (y compris colonnes d'identité).
2008ISO/CEI 9075:2008SQL:2008 (en)Ajout de quelques fonctions de fenêtrage (ntile, lead, lag, first value, last value, nth value), limitation du nombre de lignes (OFFSET / FETCH), amélioration mineure sur les types distincts, curseurs et mécanismes d'auto-incrémentation.
2011ISO/CEI 9075:2011SQL:2011 (en)Ajout du support des tables temporelles (historisation automatique).

Comme toute norme internationale publiée par l'ISO, ISO/CEI 9075 est disponible à l'achat sur le site de cette organisation[3]. Le dernier brouillon de la norme est disponible sur wiscorp.com[4].

Utilisation

Le langage SQL s'utilise principalement de trois manières :

  • un programme Ă©crit dans un langage de programmation donnĂ© utilise l'interface de programmation du SGBD pour lui transmettre des instructions en langage SQL. Ces programmes utilisent des composants logiciels tels que ODBC ou JDBC. Cette technique est utilisĂ©e par l'invite de commande qui permet Ă  un administrateur d'effectuer des opĂ©rations sur les bases de donnĂ©es, opĂ©rations qu'il dĂ©crit en SQL ;
  • technique dite embedded SQL : des instructions en langage SQL sont incorporĂ©es dans le code source d'un programme Ă©crit dans un autre langage ;
  • technique des procĂ©dures stockĂ©es : des fonctions Ă©crites dans un langage procĂ©dural propre Ă  chaque SGBD (PL/SQL pour Oracle, SQL/PSM pour MySQL ...) sont enregistrĂ©es dans la base de donnĂ©es en vue d'ĂŞtre exĂ©cutĂ©es par le SGBD. Cette technique est aussi utilisĂ©e pour les triggers - procĂ©dures dĂ©clenchĂ©es automatiquement sur modification du contenu de la base de donnĂ©es.

Syntaxe générale

Les instructions SQL s'écrivent d'une manière qui ressemble à celle de phrases ordinaires en anglais. Cette ressemblance voulue vise à faciliter l'apprentissage et la lecture[5].

C'est un langage déclaratif c'est-à-dire qu'il permet de décrire le résultat escompté, sans décrire la manière de l'obtenir. Les SGBD sont équipés d'optimiseurs de requêtes - des mécanismes qui déterminent automatiquement la manière optimale d'effectuer les opérations, notamment par une estimation de la complexité algorithmique. Celle-ci est fondée sur des statistiques récoltées à partir des données contenues dans la base de données (nombre d'enregistrements, nombre de valeurs distinctes dans une colonne, etc.).

Les instructions SQL couvrent 4 domaines :

langage de manipulation de données

Les instructions de manipulation du contenu de la base de données commencent par les mots clés SELECT, UPDATE, INSERT ou DELETE qui correspondent respectivement aux opérations de recherche de contenu, modification, ajout et suppression.

Divers autres mots-clés tels que FROM, JOIN et GROUP BY permettent d'indiquer les opérations d'algèbre relationnelle à effectuer en vue d'obtenir le contenu à manipuler.

langage de définition de données

Les instructions de manipulation des métadonnées - description de la structure, l'organisation et les caractéristiques de la base de données - commencent avec les mots-clés CREATE, ALTER, DROP, RENAME, COMMENT ou TRUNCATE qui correspondent aux opérations d'ajouter, modifier, supprimer, renommer, commenter ou vider une métadonnée. Ces mots clés sont immédiatement suivis du type de métadonnée à manipuler - TABLE, VIEW, INDEX...

langage de contrôle de données et langage de contrôle des transactions

Les mots clés GRANT et REVOKE permettent d'autoriser des opérations à certaines personnes, d'ajouter ou de supprimer des autorisations. Tandis que les mots clés COMMIT et ROLLBACK permettent de confirmer ou annuler l'exécution de transactions.

La syntaxe de SQL fait l'objet de la norme ISO 9075. Cette norme laisse la possibilité aux producteurs de SGBD d'y ajouter des instructions spécifiques et non normalisées. La norme a évolué au cours des années en vue de s'adapter aux demandes, et les éditeurs de SGBD ont souvent ajouté des possibilités à leurs produits avant que celles-ci fassent objet de normes[6], ce qui provoque des variations dans la compréhension et l'interprétation qui est faite d'un code source en SQL par les différents logiciels de SGBD[7]. Ces différences font qu'un code source écrit sans précautions pour un SGBD donné ne fonctionnera pas forcément avec un autre SGBD.

Exemples de code

  • Choix de la base

SQL peut gérer, et gère en général, plusieurs bases de données. Il faut indiquer au départ avec laquelle on veut travailler par une instruction USE

USE mabase;
  • Recherche
SELECT nom, service
FROM   employe
WHERE  statut = 'stagiaire'
ORDER  BY nom;
  • procĂ©dure stockĂ©e
 DECLARE N INTEGER;
 SET N = 1;
 FOR C 
 AS C_USR_MISE_A_JOUR 
    CURSOR FOR 
       SELECT USR_ID, USR_NOM
       FROM   T_UTILISATEUR_USR
       ORDER  BY USR_ID
    FOR UPDATE OF USR_NOM
 DO
    IF MOD(N, 2) = 0
    THEN
       UPDATE T_UTILISATEUR_USR
...
  • Supprimer totalement une base de donnĂ©es et tout ce qu'elle contient :
DROP DATABASE nom_base_de_donnees;

Manipulation de données

Le Langage de manipulation de données LMD, soit Data Manipulation Language, DML, en anglais, est un sous-ensemble du SQL utilisé pour ajouter, modifier, et supprimer des données :

  • INSERT insère des n-uplets (informellement appelĂ©s lignes et appelĂ©s tuples en anglais) dans une table existante, exemple :
INSERT INTO a_table (field1, field2, field3)
    VALUES ('test', 'N', NULL);
  • UPDATE Modifie un ensemble de n-uplets existant dans une table, exemple :
UPDATE a_table
    SET field1 = 'updated value'
WHERE field2 = 'N';
  • DELETE Supprime un ensemble de n-uplets existant dans une table, exemple :
DELETE FROM a_table
    WHERE field2 = 'N';
  • MERGE Combine les donnĂ©es de plusieurs tables. C'est la combinaison de INSERT et UPDATE. Il peut ĂŞtre nommĂ© UPSERT, INSERT OR REPLACE INTO, ou encore INSERT ON DUPLICATE KEY UPDATE dans certains moteurs de base de donnĂ©es.
 MERGE INTO table_name USING table_reference ON (condition)
   WHEN MATCHED THEN
   UPDATE SET column1 = value1 [, column2 = value2 ...]
   WHEN NOT MATCHED THEN
   INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...

NULL et la logique ternaire

Le mot-clef NULL fut introduit dans SQL pour exprimer les informations manquantes dans le modèle relationnel. L'introduction de NULL, avec TRUE et FALSE est le fondement de la logique ternaire. NULL n'a pas de valeur en SQL (et n'est membre d'aucun type de données), c'est un mot-clé réservé, indiquant qu'une information est manquante. Par conséquent, la comparaison avec NULL, même avec NULL lui-même, ne peut ni être VRAI ni être FAUX, elle est obligatoirement inconnue et ne possède aucune valeur booléenne. En effet, NULL ne peut pas être considéré égal à NULL, puisque les deux informations manquantes, que ces deux NULL distincts représentent, peuvent s'avérer différentes. On dit généralement que NULL est un « marqueur ».

Langages apparentés

Dialectes inspirés par SQL

De nombreux dialectes ont été créés en s'inspirant de SQL. Par exemple :

  • Par Salesforce, le SOQL reprenant une partie de la syntaxe SQL mais gĂ©rant les jointures diffĂ©remment (Ă  partir des tables de relation)
  • Par Apache Hive, le HiveQL ou HQL qui reprend le SQL et vise Ă  s'en rapprocher le plus possible

Il en existe Ă©galement d'autre :

  • par exemple, Snowflake (DataWareHouse Cloud ou DataLake Cloud) prĂ©sente le Snowflake SQL qui est un sous-ensemble de SQL-99.

Langages concurrents

Parmi les autres langages de requêtes, citons les ancêtres de SQL comme QUEL (QUery English Language) ou encore le langage QBE (Query By Example). Cependant le langage QBE, très différent de SQL, est encore en vigueur dans les SGBDR de type « fichier » que sont Paradox (Ansa Software/Borland/Corel) ou Microsoft Access (base de données) de Microsoft.

Alternatives

  • Le langage Tutorial D est prĂ©sentĂ© comme Ă©tant plus cohĂ©rent et plus simple d'emploi par ses inventeurs. Il permet, de surcroĂ®t, pour allĂ©ger le libellĂ© des requĂŞtes, l'emploi d'une clause WITH inspirĂ©e du langage Pascal, bien que WITH ne contribue pas Ă  faciliter la lecture du code.

À noter que la technique du WITH a été en partie reprise dans la norme SQL:1999 pour réaliser des « Common Table Expression » (CTE ou Table d'Expression Partagées en français), c'est-à-dire des vues non instanciées utilisables par la requête dans laquelle elles figurent, et ce afin de factoriser des expressions ou encore de permettre l'écriture de requêtes récursives de manière à résoudre élégamment des parcours d'arbres ou de graphes.

Parmi les autres candidats, on compte :

  • BS12[8], qui lui aussi s'est attaquĂ© Ă  ce problème de l'enchâssement et de la perte de lisibilitĂ© qu'il entraĂ®ne.

Systèmes de gestion de base de données avec SQL

Tous ces systèmes présentent certaines particularités dont certaines ne se retrouvent pas chez d'autres. Il est d'ailleurs toujours intéressant de se référer au manuel de référence du SGBDR, lors de requêtes particulières ou complexes, ainsi que pour leur optimisation.

Ouvrages sur le langage SQL

En français

  • SQL Synthèse de cours et exercices - 4e Ă©dition (2 chapitres supplĂ©mentaires sur l'indexation et l'administration) - FrĂ©dĂ©ric Brouard, Christian Soutou, Rudi Bruchez - Pearson Education, 2012
  • Bases de donnĂ©es - de la modĂ©lisation au SQL - Laurent Audibert - Ellipses, 2009
  • SQL Synthèse de cours et exercices - 2e Ă©dition - FrĂ©dĂ©ric Brouard, Christian Soutou, Rudi Bruchez - Pearson Education, 2008
  • SQL par l'exemple - Antony Molinaro - O'Reilly, 2007
  • SQL en concentrĂ© - Kevin Kline - O'Reilly, 2005
  • SQL pour les nuls - Allen G. Taylor - First Interactive, 2001
  • SQL dĂ©veloppement - FrĂ©dĂ©ric Brouard - Campus Press, 2001
  • SQL2 - SQL3, Applications Ă  Oracle (3e Ă©dition) - Pierre Delmal - De Boeck UniversitĂ©, 2001
  • SQL avancĂ© (2e Ă©dition) - Joe Celko - Vuibert, 2000

En anglais

  • The Art of SQL - StĂ©phane Faroult - O'Reilly, 2006
  • Advanced SQL:1999 - Jim Melton - Morgan Kaufmann, 2003
  • SQL bible - A. Kriegel, B. M. Trukhnov - John Wiley, 2003
  • SQL:1999, Understanding Relational Language Components - Jim Melton, Alan R. Simon - Morgan Kauffman, 2002
  • SQL in a nutshell - Kevin Kline, Daniel Kline - O'Reilly, 2001
  • SQL 3, Implementing the SQL Foundation Standard - Paul Fortier - McGraw-Hill, 1999
  • SQL-99 complete really - Peter Gulutzan, Trudy Pelzer - R&D Books, 1999
  • The Complete Reference SQL - J. R. Groff, P. N. Weinberg - Osborne, 1999
  • A guide to the SQL standard - Chris J. Date, Hugh Darwen - Addison Wesley - USA, 1997
  • Understanding the new SQL - Jim Melton, Alan R. Simon - Morgan Kaufmann, 1993

Notes et références

  1. (en)Interview de Donald Chamberlain.
  2. 14:00-17:00, « ISO/IEC 9075-1:2011 », sur ISO (consulté le )
  3. (en) « International Organization for Standardization », sur ISO (consulté le ).
  4. http://www.wiscorp.com/sql_2003_standard.zip
  5. S. Sumathi et S. Esakkirajan, Fundamentals of Relational Database Management Systems, Volume 47 de Studies in computational intelligence, Springer, 2007 (ISBN 978-3-540-48397-7).
  6. Kevin E. Kline - Daniel Kline et Brand Hunt, SQL in a Nutshell, O'Reilly Media, Inc. - 2004 (ISBN 978-0-596-00481-1).
  7. (en) « Comparison of the different SQL implementations ».
  8. BS12.

Voir aussi

Articles connexes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.