Sunteți pe pagina 1din 27

5.

2 SQL

SQL
Structure de base Conditions dans le Where Expression des jointures Fonctions ensemblistes Fonctions quantifies Oprateurs ensemblistes Fonctions de calcul Partitionnement Tri du rsultat

Schmas relationnel utilis dans les exemples: Employe (NoEmp, NomE, Salaire, Annee, TelE, Nodept) Fournisseur (NumF, NomF, VilleF, AdresseF) Piece (NomP, Prix, Couleur) Livraison (#NumF, DateLiv, #NomP, Quantite)

167

Structure de base des requtes


SELECT * ou <liste dattributs afficher> FROM <Nom des relations utilises> [ WHERE <condition> ] ;

SELECT correspond loprateur de projection sur la liste dattributs demande; il peut aussi tre suivi de fonctions dattributs. FROM indique les relations concernes par la requte. WHERE prcise une condition et correspond loprateur de slection.

168

Structure de base des requtes


Liste des noms et villes des fournisseurs SELECT NomF, VilleF FROM Fournisseur; limination des tuples en double dans le rsultat : mot-cl DISTINCT Liste de toutes les villes des fournisseurs SELECT DISTINCT VilleF FROM Fournisseur; Liste des fournisseurs habitant Londres ou habitant Paris SELECT DISTINCT NomF FROM Fournisseur WHERE ( VilleF ='Londres') OR ( VilleF ='Paris') ; Le symbole * permet de slectionner tous les attributs de la relation SELECT * FROM Fournisseur;
169

Conditions dans le WHERE


Expression logique avec des oprateurs NOT, AND, OR Comparaison avec des oprateurs : =, <>, >,<, >=, <= SELECT NomF, VilleF FROM Fournisseur WHERE NomF <>'Carrefour' AND VilleF <> 'Paris'; Test dintervalle permettant de vrifier si la valeur dun attribut est comprise entre deux constantes BETWEEN SELECT NomE FROM Employe WHERE Annee BETWEEN '22-Jun-2003' AND '25-sep-2003'; Ou (selon les SGBD) BETWEEN TO_DATE(22/06/2003', 'dd/mm/yyyy') AND TO_DATE(25/09/2003', 'dd/mm/yyyy');
170

Conditions dans le WHERE


Comparaison de texte LIKE permettant de vrifier si un attribut de type chane de caractres contient une ou plusieurs sous-chanes
_ remplace un caractre, % remplace une chane de caractres SELECT VilleF FROM Fournisseur WHERE VilleF LIKE 'Saint%' OR villeF LIKE '_%a_%' ;

Test de valeur nulle, NULL signifiant que la valeur est inconnue


SELECT * FROM Employe WHERE TelE IS NULL;
171

Conditions dans le WHERE


Test dappartenance IN qui permet de vrifier si la valeur dun attribut appartient une liste de constantes SELECT * FROM Fournisseur WHERE VilleF IN ('Paris','Londres');

172

Expression des jointures


On slectionne des tuples du produit cartsien des relations cites dans la clause FROM, le WHERE permet dexprimer les prdicats de jointure. Noms des fournisseurs qui ont des livraisons et dates de ces livraisons

SELECT NomF, DateLiv, Fournisseur.NumF FROM Fournisseur, Livraison WHERE Fournisseur.NumF= Livraison.NumF;
Utilisation de variables (alias) :

SELECT NomF, DateLiv FROM Fournisseur F, Livraison L WHERE F.NumF = L.NumF ;

173

Fonctions ensemblistes
Le rsultat dune requte SELECT est un ensemble de tuples. On peut utiliser ce rsultat, avec des fonctions ensemblistes, dans un prdicat de la clause WHERE <nom_attribut> [NOT] IN ( < sous-requte > ) Evalu VRAI si nom_attribut appartient l'ensemble des rsultats de <sous-requte> Lister les pices qui nont pas t livres SELECT NomP FROM Piece P WHERE NomP NOT IN (SELECT NomP FROM Livraison);

174

Fonctions ensemblistes
Liste des fournisseurs qui ont livr la pice 'XXA2' SELECT NomF FROM Fournisseur WHERE NumF IN ( SELECT NumF FROM Livraison WHERE NomP ='XXA2' ); quivaut SELECT DISTINCT F.NomF FROM Fournisseur F, Livraison L WHERE ( F. NumF = L. NumF ) AND ( L. NomP ='XXA2' );

175

Fonctions ensemblistes
Lister les couleurs de pices livres par les fournisseurs habitant Paris SELECT DISTINCT Couleur FROM Piece WHERE NomP IN ( SELECT NomP FROM Livraison WHERE NumF IN (SELECT NumF FROM Fournisseur WHERE VilleF ='Paris')); quivaut SELECT DISTINCT Couleur FROM Piece P, Livraison L, Fournisseur F WHERE P. NomP = L. NomP AND L. NumF =F. NumF AND VilleF ='Paris';
176

Fonctions quantifies
<nom_attribut> = | <= | < | > | >= ANY ( < sous-requte > )
Evalu VRAI sil existe au moins un lment de <sous-requte> qui vrifie la comparaison

Liste des employs gagnant plus quun employ du dpartement n10 SELECT * FROM Employe WHERE salaire > ANY ( SELECT Salaire FROM Employe WHERE Nodept =10); Donner le nom de fournisseurs ayant livr la pice AAX2 SELECT nomF FROM Fournisseur WHERE numF = ANY (SELECT numF FROM Livraison WHERE NomP = AAX2); = ANY quivalent de IN
177

Fonctions quantifies
<nom_attribut> = | <= | < | > | >= ALL ( < sous-requte > ) Evalu VRAI si pour tout lment de < sous- requte >, loprateur de comparaison retourne VRAI Liste des employs gagnant plus que tous les employs du dpartement n10 SELECT * FROM Employe WHERE salaire > ALL (SELECT Salaire FROM Employe WHERE Nodept =10); Lister la plus grande quantit livre SELECT * FROM Livraison WHERE Quantite >= ALL (

SELECT Quantite FROM Livraison);

178

Fonctions quantifies
[NOT] EXISTS ( < sous-requte > ) Evalu VRAI si <sous-requte> retourne au moins un lment Lister les pices qui ont t livres SELECT NomP FROM Piece P WHERE EXISTS (SELECT * FROM Livraison WHERE Livraison.NomP = P.NomP);

179

Oprateurs ensemblistes
< requte > UNION < requte > < requte > INTERSECT < requte > < requte > EXCEPT < requte > Numro des fournisseurs qui livrent la pice SSZ4 mais pas la pice A2 SELECT NumF quivaut SELECT NumF
FROM Livraison WHERE NomP ='SSZ4') EXCEPT (SELECT NumF FROM Livraison WHERE NomP ='A2'); FROM Livraison WHERE NomP ='SSZ4' AND NumF NOT IN (SELECT NumF FROM Livraison WHERE NomP ='A2');

EXCEPT = MINUS selon les SGBD


180

Fonctions de calcul
Une fonction de calcul est une fonction qui sapplique sur un ensemble de tuples et qui renvoie une valeur unique. Calcul sur les valeurs prises par un attribut.
AVG ( DISTINCT | ALL nom_attribut )
moyenne des valeurs prises par nom_attribut (entier ou rel)

SUM ( DISTINCT | ALL nom_attribut )


somme des valeurs prises par nom_attribut (entier ou rel)

MAX ( nom_attribut )
maximum des valeurs prises par nom_attribut (entier, rel, caractres ou date)

MIN ( nom_attribut )
minimum des valeurs prises par nom_attribut (entier, rel, caractres ou date)
181

Fonctions de calcul
La quantit livre totale de larticle Peluche Winnie The Pooh SELECT SUM (ALL Quantite) FROM Livraison WHERE NomP = 'Peluche Winnie The Pooh'; La quantit maximale livre de larticle Peluche Winnie The Pooh SELECT MAX (Quantite) FROM Livraison WHERE NomP = 'Peluche Winnie The Pooh ';

182

Fonctions de calcul
Comptage du nombre de tuples
COUNT( * | [ ALL | DISTINCT nom_attribut ]) =

nombre de valeurs de lensemble rsultat


dans le cas de * : y compris les valeurs nulles avec DISTINCT : sans les doublons avec ALL : avec les doublons

Expression arithmtique
SELECT L.NomP, Quantite * Prix FROM Livraison L, Piece P WHERE L.nomP=P.nomP;

183

Fonctions de calcul
Nombre de livraisons de la pice de nom 'xxa1' SELECT COUNT(*) FROM Livraison WHERE NomP = 'xxa1'; Nombre de couleurs diffrentes dans les pices SELECT COUNT( DISTINCT Couleur) FROM Piece;

184

Fonctions de calcul
Les fonctions de calcul peuvent tre utilises dans la clause WHERE, elles portent alors sur un SELECT Donner les noms de pice ayant fait l'objet d'au moins 10 livraisons SELECT P.NomP FROM Piece P WHERE (SELECT Count (*) FROM Livraison L WHERE P.NomP = L.NomP) >= 10);

185

Partitionnement
GROUP BY < attribut1, , attributn >
permet de partitionner la relation en sous-relations ayant les mmes valeurs sur les attributs prciss
SELECT nomP, numF, quantite FROM Livraison Sous-relation GROUP BY NomP
Sous-relation nomP A A B B B Sous-relation C numF X Y X T U V quantit 2 3 2 4 1 4

On peut alors appliquer des fonctions (dclares derrire SELECT) aux attributs de chaque sous-relation. On trouve dans le rsultat une ligne par sousrelation.
186

Partitionnement
Les fonctions AVG, SUM, MIN, MAX, COUNT, places dans la clause SELECT sappliquent chacune des sous-relations cre par le GROUP BY
SELECT NomP, COUNT(*), SUM(quantite) FROM Livraison GROUP BY NomP

Les attributs prsents aprs SELECT sont forcment prsents dans la clause GROUP BY.
nomP A B C COUNT(*) 2 3 1 SUM(quantit) 5 7 4
187

Partitionnement
La clause HAVING permet de poser une condition portant sur chacune des sous-relations gnres par le GROUP BY. Les sous-relations ne vrifiant pas la condition sont cartes du rsultat.
Liste des fournisseurs qui ont effectu plus de 3 livraisons.
SELECT NumF FROM Livraison GROUP BY NumF HAVING COUNT(*) >= 3;

188

Tri du rsultat
La clause ORDER BY permet de trier le rsultat de la requte, en fournissant la liste des attributs (ou de n de colonnes) sur lesquels effectuer le tri et en spcifiant le sens du tri (ascendant ou descendant).
Liste des employs trie par ordre alphabtique sur le nom
SELECT * FROM Employe ORDER BY NomE ASC;

Liste des employs trie sur le salaire et sur le nom par ordre dcroissant
SELECT * FROM Employe ORDER BY Salaire, NomE DESC;

189

Forme gnrale dune requte SQL


SELECT attributs rsultats [avec fonctions] FROM relations utilises [WHERE condition de slection indpendante du GroupBy] [GROUP BY attributs de partitionnement ] [HAVING condition de slection portant sur les agrgats] [ORDER BY critre de tri du rsultat]

190

Cration des vues


CREATE VIEW
CREATE VIEW Nom_Vue [(attribut [, attribut]*)] AS SELECT
CREATE VIEW LivraisonsPrevues

(Fournisseur, DateLivraison)

AS

SELECT F.NomF, DateLiv FROM Fournisseur F, Livraison L WHERE F.NumF = L. NumF ;

Utiliser une vue


select * from LivraisonsPrevues;

191

Rfrences
J. Akoka, I. Comyn-Wattiau. Conception des Bases de Donnes Relationnelles en Pratique Concepts, Mthodes et Cas Corrigs. Vuibert Informatique. 2001. Flory, F. Forest. Les Bases de Donnes Relationnelles. Economica. 1996. C.J. Date. Introduction aux Bases de Donnes. Vuibert Informatique. 2000. G. Gardarin. Bases de Donnes Objet et Relationnel. Eyrolles. 2001. http://georges.gardarin.free.fr/
192