You are on page 1of 9
Langages de manipuiaiion reiaiionneis: | sow SQL (Structured Query Language) est le langage de manipulation des données relationnelles le plus uti aujourd’hui. I! est devenu un standard de fait pour les relationnels. Il posséde des caractéristiques proches de Valgébre relationnelle (jointure par emboitement) et d'autres proches du calcul des tuples (variables sur les relations). Les exemples dans ce chapiue s’appuient sur la base de données relativ usines (U) et livraisons (PUF), décrite par le schéma suivant: F (NE, nomF, statu, ville) P (NP, nomP, poids, couleur) UNU, nom), ville) PUF (NP_NU_ NF, qt) ‘aux fournisseurs (F), produits (P), 1. Format de base d'une requéte SELECT Liste des noms dattributs du résultat FROM Nom dune relation (ou de plusieurs relations) [WHERE Condition logique qui définit les tuples du résultat] Exemple: nom et poids des produits rouges SELECT nomP, poids FROM P WHERE couleur= “rouse” /Exemple : tous les renseignements sur tous les fournisseurs. | SELECT NF, nom, statu, ville FROM F ou | SELECT * /*rétoile signifie: tous les attri {FROM F i Un résultat sans doubles Les SGBD commercialisés (dont les SQL...) ne suppriment pas automatiquement les doubles. La clause DISTINCT permet &'utilisateur avoir un résultat sans double. [ Baemle ie a cones ga TER) SELECT DISTINCT couleur FROM P Un résultat trig La clause ORDER BY pormct de définir un ordre de tri pour fes tuples du résultat ‘Exemple : liste des fournisseurs de Lausanne par ordre alphabétique: 1 SELECT nomF, NF, statut FROM F \ WHERE ville~ "Lausanne" | ORDER BY nomF ASC, NF ASC ee Si plusieurs foumnisseurs ont le méme nom, ils serontclassés selon leurs numéros. 2. Recherche avec blocs emboités | ~ ensemble des numéros des produits rouges 7) SELECT NP [ FROM P ‘ensembi SELECTNF FROM PUF WHERE NP IN (SELECT NP FROM P L WHERE couleur = "rouge" ) 1 clef IN signifie “appartient", lopérateur mathématique de la théonie des ensembles (€), La phrase NP IN (SELECT NP FROM P WHERE couleur = “rouge") est une condition logique, signifiant “la valeur de NP est dans l'ensemble des numéros de produits rouges", ce qui est vrai ou faux, |. exécute la requéte interne (calcul de l'ensemble des numéros des produits rouges), 2. exécute la requeéte exteme SELECT NF FROM PUF WHERE NP IN (...) en balayant PUF et en testant pour chaque tuple si ce NP appartient a l'ensemble des muméros de produits rouges. Dans le WHERE , la condition logique peut avoir plusieurs formes ~ elle peut étre composée de conditions élémentaires connectées par AND, OR, NOT, et par des parentheses; les conditions élémentaires sont du type | | Pour répondre a cette requéte, le SGBD | avec == nom ¢attribut | constante :=>|<|>|<|=|# “= IN | NOT IN est soit un ensemble constant, par exemple (1,2,3), soit un ensemble défini par une requéte SELECT, soit une union, différence ou intersection densembles 108 ee ee ee a ee ‘Chapiere 8: SQL :="(" ")" | | ~ constante | constante”," == UNION | MINUS | INTERSECT | Exemple noms des fourisseurs n°, 2,3 SELECT _nomF FROM F WHERE NF=1 OR NF =2 OR NF =3 SELECT nomF FROM F | WHERE NF IN (1,2,3) oF. 3. Qualification des noms d'ativibuts Notations NP. = attribut PNP, PUT NP antrihuts qualifids par le nom dune relation Régle 1: Un nom dattnbut non qualifié, référence la relation la plus inteme qui a un attribut de ce nom- la ume relation dans fa clause FROM Résle 2: On peut renommer localem: Exemple: .. FROM PUF PUF! la relation PUF s'appelle alors PUF1 pour le SELECT correspondant & ce FROM uniquement. [ Exemple : noms des fournisseurs ne livrant pas le produit muméro 2 ii SELECT — nomF FROM F WHERE 2 NOT IN (SELECT NP * ensemble des NP \ FROM PUF livrés par ce t WHERE © PUFNF =FNF) —foumisseur */ Exemple © numéras des Fournisseurs Wivrant Te meme promi que Te Tournisceir Tah une quanhie pis” Uxemnte _ a sande, Sur le schéma, la requéte peut étre décrite comme suit =1 PUF ( NP, NU, NF, at) = B PUF ( NP, NU, NF, at ) Ce qui sécriten SQL, SELECT NF FROM —PUF PUFX /* PUF est renommé*/ i‘ Chapire 8: 90% WHERE NP IN (SELECT NP /* ensemble: FROM PUF des produits du WHERE NF=LANDat AND < condition(s) de la requéte > if ss ene, Leasiaiibis | _Exemple : pour chaque produit livré, le nom du produit et les villes de leurs fournisseurs | SELECT nomP, ville FROM P, F, PUF WHERE _PUFNP=PNP AND PUFNI 5. Recherche avec quaatificateurs : SOME, ANY, ALL SQL permet déerire des conditions ot apparaissent des quantificateurs proches de ceux de la logique ("il existe” (3), "quelque soit” (¥) ), gréce aux mots clefs SOME, ANY et ALL. Les mots clefs SOME et ANY cont exactement! ke mene signification, ce sunt des synoymnes, Le format général clune condition élémentaire avec quantificateur est le suivant avec “= SOME | ANY | ATI ce qui signifie -.pour SOME et ANY =" existe-til dans Yensemble au moins un élément e qui satisfait la condition: i ?” = pour ALL :" tous les éléments de l'ensemble satisfont-ils la condition ? * ‘comparaison dégalité. SOME et ANY sont done plus puissants. De méme, les requétes avec un quantificateur universel (ALL) et un comparateur d'égalité peuvent s'écrire avec une condition ensembliste (voir le paragraphe suivant). Cependant le mot clef ALL ne permet pas dexprimer toutes les requétes contenant un quantificateur du type “quelque soit”. On peut alors éerire la requéte inverse avec un "NOT EXISTS" (voir paragraphe plus loin). Par exemple la requéte "chercher les X qui pour tout Y satisfonttelle condition” peut aussi stexprimer: "chercher les X tels quil nfexiste aucun Y qui ne satisfait pas telle | Le mot clef IN est équivalent 4 un quantificateur existentiel (SOME ou ANY) avec lopérateur de condition” ! Exemples ei a I Ensemble des numéros des fournisseurs de produits rouges | SELECT NF | FROM —PUF | HERE NP=ANY | (SELECT NP \ FROM P | ie WHERE couleur = "rouge" ) WHERE couleur= "rouge" ) _ SELECT NF | | FROM F | | WHERE ‘rouge"= ALL | i | (SELECT couleur | ' FROM P | WHERE NP-ANY (SELECT NP_ FROM PUF NF)) | ee WHERE PUF.N! 6. Recherche avee des conditions sur des ensembles Dans les paragraphes précédents, les conditions élémentaires portant sur une valeur dTattribut ont été définies. D'autres types de conditions élémentaires permettent de comparer des ensembles entre eux. Ce sont: 6.1. Test d’égalité d’ensembles: = # d’ensembles: PAINS 6.2. Test di ensemble Cette condition signifie que ensemble 1 contient (ou est égal a) a Vensemble 2, ce qui en théorie des ‘ensembles s'éerirait: 2 ~ NOT CONTAINS est la négation de la précédente; elle est vraie si un élément de Tensemble 2 nlappartient pas & Yensemble 1 [Exemple : noms des fournisseurs qui fournissent tous les produits rouges. SELECT nomF FROM F WHERE (SELECT NP FROMPUF —_/* ensemble des produit WHERE — NF =F. NF) fournisseur F*/ CONTAINS (SELECT NP FROMP —_/* ensemble des produits rouges*/ WHERE couleur ~ 6.3. EXISTS Cette condition teste si ensemble nest pas vide (ensemble #8) “Exemple : noms des Fournisseurs qui Tounnissenr axrmmotns Ur prot rouge— SELECT nom F FROM F WHERE EXISTS (SELECT * | FROM PUF,P WHERE NF=FNF AND couleur ="rouge" ee AND PUF NP-P NP) / Il existe aussi la condition inverse NOT EXISTS qui teste si Tensemble est vide Chapitre 8: SOL \ | 7. Fonetions d'agrégation ‘SQL offre les fonctions d'agrégation usuelles: j cardinal : COUNT moyenne : AVG j ‘minimum et maximum : MIN, MAX | tora" SUM ‘qui opérent sur un ensemble de valeurs prises par un attribut, ou pour COUNT uniquement, sur un ensemble de tuples. i Exemple quel est le nombre de ivraisons fates parle fournisseur 1? | / SELECT . COUNT(*}. /* on compte ies tuples de PUF tels \ FROM PUP que NF=1 7 WHI a Exemple : combien de produits différents a livré le fournisseur |? Attention : il faut éter les doubles, car | COUNT compte toutes les valeurs, y compris les valeurs doubles. SELECT COUNT (DISTINCT NP) FROM PUF | WHERE _NF=1 8. Recherche avec partition des tuples d'une relation 8.1. Clause Group by Example. combien de produits différents ont été livrés par chacun des fournisseurs ? | 1 faut partitionner l'ensemble des tuples de PUF en un sous-ensemble (ou groupe) par numéro de’ fournisseur. C'est ce que permet la clause GROUP BY. SELECT NF, COUNT (DISTINCT NP) FROM PUF GROUP BY Cette instruction génére dans le SGBD es actions suivantes 1 Classer les tuples de PUP, groupe par groupe (un groupe ~ ensemble des tuples ayant méme NT‘, 2, Pour chaque groupe ~ évaluer le résultat du SELECT (compter le nombre de NP différents dans ce groupe) 8.2. Clause Having ein NO ae tates tees Paana ia, | de produits livrés par ce foumisseur soit supérieure & 1000 ? SELECT NF, COUNT (DISTINCT NP) FROM PUR GROUP BY NF HAVING ___ SUM (qt) > 1000 La clause "HAVING ", la condition ne porte pas sur un tuple mais sur ensemble des tuples d'un groupe Le format général du SELECT avec GROUP BY est le sui Soit une relation R (A1, A2,..., An) SELECT [Ail] LAi2]... [Amu] [£1 (Aj1)] L (Aj2)] .. [fv (Aiv)] FROM R (WHERE. } Chapitre 8: SQL GROUP BY Aki [,Ak2] .. [Akw] [HAVING ] avec i= fonction @'agrégation (COUNT, SUM, MIN, MAX, AVG), et (AKI, AK2,... ,Akw} > {Ail, Ai2,... ,Aiu}, et (AKI, AK2,... , Akw} 9 {Ajl, Aj2,. , Av} - La condition du HAVING peut étro de dew types 1) Condition comparant le résuitat dune fonction d'agrégation portant sur un attribut qui ne fait pas partie de la clause GROUP BY (Aix) valeur Cette fonction porte alors sur fensemble des valeurs prises par 'atribut pour Ie groupe de tuples; 2) Condition comparant l'ensemble des valeurs prises par un attribut (qui ne fait pas partie de la clause GROUP BY) pour les tuples du groupe; cette comparaison se fait en général par rapport 4 un autre ‘ensemble, a l'aide des comparateurs logiques densembles: =, #, CONTAINS, NOT CONTAINS. Dans ce demier cas, afin d'exprimer le fait quil s'agit de ensemble des valeurs prises par l'attribut pour tous Jes tuples du groupe, le nom de lattribut est précédé du mot clé SET. La condition du HAVING peut done s'éerire ‘SET nom-attribut avec = =| #| CONTAINS | NOT CONTAINS instruction ci-dessus génére dans le SGBD les actions suivantes 1, Créer une relation de travail, R’ qui est une copie de R; éliminer de R' les tuples qui ne satisfont pas la condition du WHERE. 2. Classer les tuples de R', groupe par groupe (un groupe = ensemble des tuples ayant méme AKI [Ak2] ... LAkw)), 3. Pour chaque groupe de tuples de R’ faire: = tester la condition du HAVING - sielle est vérifiée, alors évaluer le résultat du SELECT. Exemple- numéros des fournisseurs qui fournissent an moins tous les produits fournis par te fournisseur | |numéro 100. SELECT NF FROM PUF | GROUP BY NF HAVING SETNP__/* ensemble des produi CONTAINS (SELECT NP FROM PUF WHERE NF=100) ee ' s du fournisseur NF*/ | 9. Mise a jour de la base de données 9.4. Inséror des tuples - Insérer un tuple: INSERT INTO nomrelation : < tuple constant> - Insérer un ensemble de tuples. INSERT INTO nomrelation , rnomattm = [WHERE condition) | Cxemple : pour les produits vers, changer leur couleur, elie devient "ven d' a UPDATE P SET couleur \ WHERE — coule 4 10. Piusieurs types d'utilisation de SQL Le langage SQL a essentiellement été utilisé pour offrir une interface de manipulation d'une base de données des utilisateurs finaux (non informaticiens), dans un contexte dinterrogation/mise a jour ponctuelle interactive Par ailleurs, dans plusieurs systémes on a développé des passerelles entre SQL et un langage de programmation (C, Cobol, Ada, ..) de fagon & permettre T'écriture de programmes qui peuvent ainsi, entre autres, manipuler les données d'une base de données par des instructions SOL. Enfin, il existe des environnements de programmation, dits de 4¢me génération, oii un langage de type SQL permet de spécifier les traitements souhaités sur les données, ces spécifications étant ensuite traduites en langage exécutable (invisible 4 Tutlisateur) par un générateus de programmes. Ces deux demiers types dutilisation de SQL (inclus dans un langage de programmation et inclus dans un langage de spévifications type 4éme génération) ont nécessité de développer des mécanismes pour faire ccohabiter deux philosophies différentes: celle de SQL dont les instructions "SELECT..." donnent en résultat ‘un ensemble de tuples, et celle des langages type programmation qui travaillent sur un article/tuple a la fois. Pour cela, la solution généralement adoptée est de déclarer le "SELECT...". puis dans une boule itérative de récupérer, un par un, es tuples du résultat m4 Chapire 8: Par exemple, pour inclure SQL dans un langage de programmation, la notion de “curseur” est employée. Un curseur est 'équivalent dun fichier séquentiel temporaire dont le contenu est constitué d'une copie de ensemble des tuples résultat d'un SELECT. Exemple de programme en pseudo code + SQL ave curseur trouver la iste des noms et villes des fourisseurs du produit de numéro numprod. DECLARE Foun CURSOR FOR SELECT — nomF, ville FROM F WHERE — NF IN (SELECT NF FROM PUF WHERE NP = numprod) , /* déclaration du curseur effectuée */ Lire (numprod) ; _/* entrée du numéro du produit */ OPEN Four; | /* LOPEN fait exécuter le SFILECT du curseur; les tuples résultat sont charges dans le fichier eurseur Four */ FETCH Foun INTO Fnom, Fville, /* un premier tuple est chargé en mémoire centrale Tom et Fville sont des variables du langage hite */ Tant que Rep-SGBD = “ok” faire /* itération pour chaque tuple résultat du curseur */ Afficher (From, Fille) FETCH Fourn INTO Fnom, Fville; _/* le tuple suivant est chargé */ Fin tant que; CLOSE Foum; — / te curseur est fermé */

You might also like