Previous Up Next
Université Lille 3-Charles de GaulleUFR de Mathématiques Sciences Économiques et Sociales

Chapitre 35  SQL : un langage algébrique

Pour bien comprendre le langage SQL, nous allons brièvement exposer les principes sur lesquels repose ce langage (algèbre relationnelle).

Une table (relation) est un ensemble de tuples. On peut donc appliquer à une table les opérateurs algébriques usuels. Le résultat d'une opération ou requête est une nouvelle table qui est exploitable à son tour dans une nouvelle opération. Tous les opérateurs peuvent être dérivés de cinq primitives de base : la PROJECTION, la SÉLECTION, l'UNION, la DIFFÉRENCE et le PRODUIT. L'opérateur de JOINTURE qui peut être déduit des cinq primitives de base est cependant fondamental.
La PROJECTION
permet de ne conserver que les attributs intéressants d'une table (sélection verticale). De plus, la projection élimine les répétitions de tuples résultant de cette sélection.

 

Exemple 2   CLIENTS2 = PROJECT CLIENTS OVER (cltnom, cltloc)

La SÉLECTION
permet de ne conserver que les tuples qui respectent une condition définie sur les valeurs des attributs (sélection horizontale).

 

Exemple 3   BONSCLIENTS = SELECT CLIENTS WHERE cltca>10000

L'UNION
réalise l'union de plusieurs tables.  

Exemple 4   CLIENTS3 = SELECT CLIENTS WHERE cltloc = 'PARIS' UNION SELECT BONSCLIENTS WHERE cltloc='BRUXELLES'

La DIFFÉRENCE
consiste à prendre les tuples appartenant à une table mais pas à une autre.  

Exemple 5   CLIENTS4 = SELECT CLIENTS WHERE cltloc = 'BRUXELLES' EXCEPT BONSCLIENTS

Le PRODUIT
réalise la juxtaposition de tous les tuples de la première table avec chaque tuple de la seconde. Celà signifie que, si les deux tables ont respectivement M et N tuples, la table résultante aura M× N tuples. Cette opération présente peu d'intérêt mais combinée avec une sélection, on obtient une opération fondamentale : la JOINTURE.
La JOINTURE
n'est possible que sur deux tables possédant un attribut de domaine commun. Elle consiste à juxtaposer les tuples dont la valeur d'un attribut est égal dans les deux tables. C'est une primitive dérivée car elle peut être définie à l'aide des primitives précédentes (exercice laissé au lecteur).  

Exemple 6   CMDCLIENTS = COMMANDES JOIN CLIENTS ON cmdclt=cltnum

Les primitives peuvent être combinées pour constituer des requêtes plus élaborées.La séquence d'opérateurs permettant de réaliser une requête élaborée devient assez vite complexe. Le langage SQL permet (heureusement) d'exprimer globalement une requête sans faire apparaître les tables et les primitives intermédiaires. Ce sera le moteur SQL qui sera chargé d'optimiser la requête.

 

Exemple 7   Une requête SQL qui permet de dresser la liste des noms des clients qui ont acheté des articles de moins de 200F est :

     SELECT DISTINCT cltnom
         FROM clients, commandes, ligcommandes, articles
         WHERE cltnum=cmdclt 
           AND artnum=lcdart 
           AND cmdnum=ldccmd 
           AND artpv<200
Une combinaison de primitives permettant d'exécuter cette requête est :
TEMP1 = SELECT ARTICLES WHERE artpv<200
TEMP2 = PROJECT TEMP1 OVER (artnum)
TEMP3 = PROJECT CLIENTS OVER (cltnum,cltnom)
TEMP4 = PROJECT COMMANDES OVER (cmdnum, cmdclt)
TEMP5 = PROJECT LIGCOMMANDES OVER (ldccmd,ldcart)
TEMP6 = TEMP2 JOIN TEMP5 ON artnum=ldcart
TEMP7 = PROJECT TEMP6 OVER (ldccmd)
TEMP8 = TEMP3 JOIN TEMP4 ON cltnum=cmdclt
TEMP9 = PROJECT TEMP8 OVER (cltnom, cmdnum)
TEMP10 = TEMP7 JOIN TEMP9 ON ldccmd=cmdnum
RESULTAT = PROJECT TEMP10 OVER (cltnom)
Une telle séquence n'est, en général, pas unique. La séquence fournie est une des plus efficaces (le lecteur peut s'exercer à en trouver d'autres).

D.Gonzalez (gonzalez@univ-lille3.fr) en date du th , 

Previous Up Next