AccueilđŸ‡«đŸ‡·Chercher

Langage de requĂȘte

Un langage de requĂȘte est un langage informatique utilisĂ© pour accĂ©der aux donnĂ©es d'une base de donnĂ©es ou d'autres systĂšmes d'information. Il permet d'obtenir les donnĂ©es vĂ©rifiant certaines conditions (on parle de critĂšres de sĂ©lection), comme toutes les personnes qui habitent une ville donnĂ©e. Les donnĂ©es peuvent ĂȘtre triĂ©es, elles peuvent Ă©galement ĂȘtre regroupĂ©es suivant les valeurs d'une donnĂ©e particuliĂšre (par exemple on va regrouper toutes les personnes qui habitent la mĂȘme rue).

La grammaire d'un langage de requĂȘte est adaptĂ©e Ă  la structure des donnĂ©es interrogĂ©es. Le langage de requĂȘte le plus connu et le plus utilisĂ© est SQL.

Exemples

Par ordre alphabétique :

Historique

L'idĂ©e initiale de langage de requĂȘte est introduite par Ted Codd dans son article sĂ©minal sur le modĂšle relationnel[1], c'est l'idĂ©e de la diffĂ©rence entre les donnĂ©es et leur implĂ©mentation : le langage de requĂȘte doit exprimer le quoi et non le comment, c'est-Ă -dire ce que veut savoir l'utilisateur et non le dĂ©tail de l'exĂ©cution elle-mĂȘme. L'idĂ©e est ici qu'Ă  mesure que la puissance des ordinateurs augmente et que les requĂȘtes se complexifient, le programme dispose de davantage de moyens pour optimiser la requĂȘte que l'utilisateur, quitte Ă  remanier celle-ci Ă  rĂ©sultat Ă©gal.

Codd introduit donc un langage, basĂ© sur le calcul des prĂ©dicats, pour interroger une base de donnĂ©es relationnelle (c'est-Ă -dire vue sous forme de tables). ll introduit aussi une autre façon d'interroger, via une algĂšbre, et montre l'Ă©quivalence entre les deux. Le projet de Codd, alors employĂ© d'IBM deviendra un projet de recherche Ă  forte visibilitĂ©, System R. Le projet de recherche donnera lieu Ă  un produit, DB2. C'est dans ce produit que nait le langage SQL qui deviendra le langage standard des langages de requĂȘtes relationnels.

SQL ou le langage d'interrogation de données (LID)

Une base de donnĂ©es peut ĂȘtre interrogĂ©e de maniĂšre formelle par le langage SQL ou par un langage algĂ©brique. Le langage SQL (Structured Query Langage) est une Ă©volution de SEQUEL dĂ©veloppĂ© en 1976 par IBM comme un langage de recherche. SQL est devenu un standard des bases de donnĂ©es relationnelles (en 1987, normalisation de ce langage par ANSI). SQL s'utilise sous deux formes, soit d'une maniĂšre interactive, soit Ă  l'intĂ©rieur d'un langage hĂŽte (C, fortran, cobol
). SQL ne comporte qu'une vingtaine d'instructions, il est dit procĂ©dural (l'accĂšs aux donnĂ©es se fait par leur contenu et non par leur chemin). SQL est un langage de dĂ©finition des donnĂ©es (LDD), de manipulation de donnĂ©es (LMD), de contrĂŽle des donnĂ©es (LCD) et d'interrogation des donnĂ©es (LID).MalgrĂ© le succĂšs du langage SQL qui a suivi, Edgar F. Codd dĂ©noncera cet outil qu'il considĂšre comme une interprĂ©tation incorrecte de ses thĂ©ories.

Le langage algébrique (LA) correspond à un pseudo algorithme du SQL. Il est composé de peu d'opérateurs (sélection, projection et jointure étant les opérateurs de base).

Terminologie

SQL comme le LA permettent la gestion et l'interrogation des bases de donnĂ©es. Une base de donnĂ©es peut ĂȘtre considĂ©rĂ©e comme une table Ă  deux dimensions, dont les colonnes sont les champs et les lignes sont les tuples. Plusieurs tables peuvent contenir des colonnes de mĂȘme noms, pour les diffĂ©rencier, il faudra prĂ©fixer les rubriques par le nom de la table.

Remarque : La base de données fournie en exemple est composée de 2 tables. La table Employe constituée d'un code employé, d'un nom, d'un prénom, d'une date de naissance, d'une adresse et d'un code emploi. La table Emploi constituée d'un code emploi (auquel fait référence la table EMPLOYE), d'un libellé d'emploi, de la ville concernée par cet emploi.

La projection

La projection est une opération qui consiste à ne sélectionner que certaines données pour l'affichage. La syntaxe est la suivante :

R1 ← PROJ(nomdelatable; liste des propriĂ©tĂ©s)
SELECT liste des propriétés
FROM nomdelatable ;

Exemples :

LA : PROJ(Employe; nom, prénom)
SQL : SELECT nom, prénom
      FROM Employe ;

Cette requĂȘte ne renvoie que les nom et prĂ©nom de la table Employe

LA : PROJ(Employe; *)
SQL : SELECT * 
      FROM Employe ;

Cette requĂȘte renvoie toutes les rubriques de la table Employe grĂące au caractĂšre joker *.

Le tri

Pour obtenir un affichage triĂ©, il est nĂ©cessaire de le prĂ©ciser. L'opĂ©rateur de tri est Ă  utiliser en langage algĂ©brique. La clause order by est Ă  ajouter Ă  la fin de la requĂȘte SQL, suivi du nom de la colonne qui doit ĂȘtre utilisĂ© pour ce tri Le tri par dĂ©faut s'effectue par ordre croissant ; pour obtenir un tri par ordre dĂ©croissant, il faut rajouter le paramĂštre DESC.

R2 ← TRI(R1; attribut du tri croissant)
SELECT Liste des propriétés
FROM nomdelatable
ORDER BY propriété ASC;

Ou :

R2 ← TRI(R1; attribut du tri dĂ©croissant)
SELECT Liste des propriétés
FROM nomdelatable
ORDER BY propriété DESC;

Attention ! : le tri ne s'effectue qu'à l'affichage, en aucun cas la base de données n'est modifiée.

Exemple :

  • SĂ©lection des employĂ©s (nom et prĂ©nom) triĂ©s par ordre alphabĂ©tique du nom et par date de naissance dĂ©croissante.
R1 ← PROJ(Employe; nom, prenom, datenais)
R2 ← TRI(R1; nom croissant, datenais dĂ©croissant)
SELECT nom, prenom, datenais
FROM Employe
ORDER BY nom ASC, datenais DESC ;

Attention ! : Pour un tri multi-critĂšres, l'ordre de tri est celui de la rubrique d'avant.

  • À partir du tri ci-dessus, nous rajoutons un tri par prĂ©nom croissant
R1 ← PROJ(Employe; nom, prenom, datenais)
R2 ← TRI(R1; nom croissant, datenais dĂ©croissant, prenom croissant)
SELECT nom, prenom, datenais
FROM Employe
ORDER BY nom ASC, datenais DESC, prenom ASC ;

La sélection

La sélection consiste à sélectionner des lignes répondant à certains critÚres. La syntaxe est la suivante :

R1 ← SEL(R; propriĂ©tĂ© opĂ©rateur valeur ET propriĂ©tĂ© opĂ©rateur valeur)

Attention ! : Le langage algébrique s'écrit à l'envers du SQL.

SELECT liste des propriétés
FROM nomdelatable
WHERE propriété op valeur
AND propriété op valeur ;
  • Qu'est-ce qu'un critĂšre de sĂ©lection (appelĂ© aussi prĂ©dicat) ?

C'est le résultat de la comparaison de deux expressions au moyen d'un opérateur de comparaison.

  • Qu'est-ce qu'un opĂ©rateur ?

Un opérateur décrit une opération de comparaison.

Egal = diffĂ©rent != ou ⇔ suivant le SGBDR SupĂ©rieur > SupĂ©rieur ou Ă©gal >= InfĂ©rieur < InfĂ©rieur ou Ă©gal ⇐

Attention ! : Les minuscules sont différenciées des majuscules

La jointure

C'est une opĂ©ration permettant de ramener sur une mĂȘme ligne des donnĂ©es venant de plusieurs tables. Une jointure s'effectue grĂące Ă  un produit cartĂ©sien de plusieurs tables (256 au maximum) et l'application de sĂ©lections.

R3 = JOIN(R1, R2; R1.propriété opérateur R2.propriété)

Les sous-interrogations

Une sous-interrogation est l'expression d'un prĂ©dicat Ă  l'aide du rĂ©sultat d'une sĂ©lection. Il peut y avoir jusqu’à 16 niveaux de sous-interrogations. Une erreur est gĂ©nĂ©rĂ©e si une sous-interrogation n'amĂšne rien ou si elle ramĂšne plus de valeurs que ne peut en accepter le champ.

ComplĂ©tude des langages de requĂȘtes

C'est Codd le premier qui dans son article A relational model of data for large shared data banks définit la complétude d'un langage comme l'équivalence à l'algÚbre relationnelle.

Plus gĂ©nĂ©ralement, un langage de requĂȘte est complet s'il permet de poser toutes les questions possibles sur une base de donnĂ©es. Une dĂ©finition "statique" a Ă©tĂ© introduite en parallĂšle par Bancilhon et Paredaens, qui Ă©nonce qu'un langage est complet s'il permet de produire toutes les relations invariantes par le groupe d'isomorphismes qui laissent les Ă©lĂ©ments du graphe invariants. Paredaens a dĂ©montrĂ© que l'algĂšbre relationnelle Ă©tait complĂšte et Bancilhon a dĂ©montrĂ© que le calcul relationnel Ă©tait complet.

Bibliographie

  • Relational completeness of database sublanguages E. F. Codd. IBM Research. Laboratory. San Jose, California. 1971
  • On the Completeness of Query Languages for Relational Data Bases. François Bancilhon, MFCS 1978: 112-123

Jan Paredaens:

  • On the Expressive Power of the Relational Algebra. Inf. Process. Jan Paredaens, Lett. 7(2): 107-111 (1978)

RĂ©fĂ©rences 

  1. (en) Codd, E. F., « A relational model of data for large shared data banks. », ACM, nos 13-6,‎ (ISSN 0001-0782, lire en ligne)

Liens externes

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