22

26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Embed Size (px)

Citation preview

Page 1: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 2: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

26/ 04/ 2007

Page 3: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Auto-Jointure :SELECT *FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON

Condition_de_jointure;

ProblèmesSi des attributs de même nom et de signification différente apparaissent dans les tables jointes, ils seront utilisés pour réaliser la jointure naturelle. D'où un fort risque d'erreur non maîtrisées !Si un attribut possède deux noms différent dans les deux tables, la jointure ne peut pas avoir lieu

Page 4: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 5: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 6: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Jointure externe: SELECT *FROM Nom_relation1 R1, Nom_relation2 R2WHERE R1.Attr1= R2.Attr2 (+);

Page 7: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 8: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 9: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 10: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Jointure externe SQL2:SELECT *FROM Nom_relation1 LEFT OUTER JOIN Nom_relation2 ON

Condition_de_jointure;

SELECT *FROM Nom_relation2 RIGHT OUTER JOIN Nom_relation1 ON

Condition_de_jointure;

SELECT *FROM Nom_relation1 FULL OUTER JOIN Nom_relation2 ON

Condition_de_jointure;

Page 11: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 12: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Jointure procédurale:SELECT *FROM Nom_de_relation1

WHERE Nom_Attribut1 IN (SELECT Nom_attribut2FROM Relation2);

Sous interrogation dans la clause FROM:SELECT *FROM Nom_relation1, (SELECT…FROM Nom_relation2) alias_rel2

WHERE (condition);

Page 13: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Sous interrogations synchronisées:SELECT *FROM Nom_relation1 alias_rel1

WHERE Nom_col (SELECT …FROM Nom_relation2 alias_rel2WHERE alias_rel1.x alias rel2.y)

[ AND…..];

à prendre parmi { <, >, <=, >=, IN }

Page 14: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Cherchons donc à trouver les clients qui ont un prénom en commun. Autrement dit pour qu'un client soit sélectionné, il faut qu'un autre client porte le même prénom.

Page 15: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom
Page 16: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Différence :

SELECT Liste_attributs FROM Nom_De_Relation1MINUSSELECT Liste_attributs FROM Nom_De_Relation2

SELECT CODCAT, LIB_CAT FROM CATEGORIE

MINUS

(SELECT C.CODCAT, LIB_CAT FROM CATEGORIE C, PRODUIT P

WHERE C.CODCAT=P.CODCAT AND PRIX_HT> 100);

SELECT Liste_attributs FROM Nom_De_Relation1WHERE Nom_attribut NOT IN( SELECT Nom_attribut FROM Nom_De_Relation2[WHERE <Condition de restriction>]);

OUSELECT Liste_attributs FROM Nom_De_Relation1 R1WHERE NOT EXISTS

(SELECT *FROM Nom_De_Relation2 R2WHERE R2.Nom_attribut = R1.Nom_attribut):

Page 17: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Union :

SELECT Liste_attributsFROM Nom_De_Relation1[WHERE <Condition de restriction> ]

UNIONSELECT Liste_attributs

FROM Nom_De_Relation2[WHERE <Condition de restriction>]

Intersection :

SELECT Liste_attributsFROM Nom_De_Relation1[WHERE <Condition de restriction> ]

INTERSECTSELECT Liste_attributs

FROM Nom_De_Relation2[WHERE <Condition de restriction>]

Page 18: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Division (inclusion d’un ensemble dans un autre):SELECT Liste FROM Nom_Relation R

WHERE NOT EXISTS(SELECT Liste1 FROM Nom_Relation1

MINUSSELECT Liste2 FROM Nom_Relation2

WHERE Nom_Relation2.attr=R.attr )

Division exacte (égalité des ensembles) :SELECT Liste FROM Nom_Relation R

WHERE NOT EXISTS(SELECT Liste1 FROM Nom_Relation1

MINUSSELECT Liste2 FROM Nom_Relation2

WHERE Nom_Relation2.attr=R.attr )AND NOT EXISTS(SELECT Liste2 FROM Nom_Relation2

WHERE Nom_Relation2.attr=R.attrMINUS

SELECT Liste1 FROM Nom_Relation1)

Page 19: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Requête hiérarchique (interrogation d’une structure arborescente) :

SELECT [LEVEL] Liste_résultat FROM Nom_Relation [WHERE Condition][START WITH condition]CONNECT BY PRIOR Condition;

START WITH : Point de départ du parcours de l ’arbre

CONNECT BY PRIOR : Introduit la condition portant sur les colonnes de jointures (Colonne_sup, Colonne_inf)

-Parcours du bas vers le haut

CONNECT BY PRIOR colonne_sup = colonne_inf;

-Parcours du haut vers le bas

CONNECT BY PRIOR colonne_inf = colonne_sup;

Page 20: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Utilisation des fonctions sur les ensembles :Moyenne : AVG([DISTINCT|ALL] expr) Comptage : COUNT([DISTINCT|ALL]{*|expr}) Maximum : MAX([DISTINCT|ALL] expr) Minimum : MIN([DISTINCT|ALL] expr) Somme : SUM([DISTINCT|ALL] expr)

SELECT COUNT(*) FROM PRODUIT;

SELECT MAX(PRIX_HT*TAUX_TVA)

FROM PRODUIT P, CATEGORIE C

WHERE P.CODCAT= C.CODCAT;

Page 21: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Regroupement de n-uplets – Sous ensembles

Sous ensembles constitués par rapport à un ou plusieurs critères de regroupement :

Dans un sous ensemble les critères de regroupement ont même valeur

Autant de sous-ensembles que de valeurs différentes

Page 22: 26/ 04/ 2007 Auto-Jointure : SELECT * FROM Nom_relation R1 INNER JOIN Nom_relation R2 ON Condition_de_jointure; Problèmes Si des attributs de même nom

Regroupement de n-uplets – Sous ensembles

SELECT Liste_attributs FROM Nom_De_RelationGROUP BY Liste_attributs_de_regroupement

SELECT CODCAT, Count(*) FROM PRODUIT GROUP BY CODCAT;

SELECT CODCAT, Count(*) FROM PRODUIT WHERE PRIX > 100 GROUP BY CODCAT;

SELECT Liste_attributs FROM Nom_De_RelationGROUP BY Liste_attributs_de_regroupementHAVING Condition

SELECT CODCAT, Count(*) FROM PRODUIT WHERE PRIX > 100

GROUP BY CODCAT HAVING Count (*) > 20;