0% ont trouvé ce document utile (0 vote)
7 vues85 pages

Interrogation de Données

Transféré par

arame2001.an
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues85 pages

Interrogation de Données

Transféré par

arame2001.an
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

Interrogation de

données
&
Bases de données et notions connexes
Notions de base de données
BASE DE DONNEES :
ENSEMBLE STRUCTURE D'INFORMATIONS MIS A LA

DISPOSITION D'UN ENSEMBLE D'UTILISATEURS

ADMINISTRATEUR

Une BD peut aussi apparaître comme une collection d’informations modélisant une
entreprise du monde réel.

Une BD peut être définie comme une collection de fichiers reliés par des pointeurs
multiples, aussi cohérents entre eux que possible, organisés de manière à répondre
efficacement à une grande variété de questions.
OBJECTIFS :
→ CENTRALISATION DE L'INFORMATION :
NON REDONDANCE
UNICITE DE LA SAISIE
CONTROLES CENTRALISE
→ COUT DE LA SAISIE D’INFORMATIONS

D
I
S
P
O
S
I
T
I
F
S

D
E

S
A
I
S
I
E
COMPOSANTS :
→ Données :
TABLES
INDEX

→ Dictionnaire des données : informations sur les
données

DICTIONNAIRE DES
DONNEES

DESCRIPTION DE LA
STRUCTURE, DES DONNEES
CONTRAINTES, DES
UTILISATEURS, …
PLUSIEURS NIVEAUX D’ABSTRACTION
SCHEMA SCHEMA SCHEMA -Vues utilisateurs
EXTERNE 1 EXTERNE 2 …...... EXTERNE n

-Représentation du monde réel


REEL SCHEMA
-Non redondant.
CONCEPTUEL -validé par les traitements

-Contraintes du système de gestion


I SCHEMA de bases de données utilisé
N LOGIQUE -Chemins d’accès
-Performances des traitements
T -Redondances autorisées

E
R -Répartition physique des données :
choix des unités physiques de stockage,
N SCHEMA taille des blocs, des fichiers, ...
PHYSIQUE -Choix des paramètres physiques de
E stockage.
Le modèle relationnel
LE RELATIONNEL
RAPPELS COMPLEMENTS

NOTION DE TABLE : Toutes les données de la base


sont enregistrées dans des tables (RELATIONS)

RELATION : Partie du produit cartésien d’une liste de


domaines (ensemble de valeurs)

CODEP NOM_PERSONNE PRENOM_PERS AN_NAISS


SCHEMA DE LA RELATION
(Description en intention)

R (A1, A2, ........, An)


R : Nom de la relation

A1, A2, ..An : Nom des attributs de la relation

(a1i, a2j, ..., ank) : n-uplet

n : Degré de la relation (Relation n-aires)


CONTRAINTES D’INTEGRITE :
• Contrôles effectués lors de la saisie, modification ou suppression des données.
• Assertions qui doivent être vérifiées par les données contenues dans la base.

Unicité de la clé :
• Une relation est un ensemble de tuples, il ne peut y avoir 2 tuples identiques
dans une relation.
• Plus petit sous ensemble d’attributs qui permet d’identifier chaque ligne.

F012 Mozart Wolfgang


S234 Beethoven Ludvig
G087 Berlioz Hector
B555 Haydn
X007 Ravel Maurice
A631 Chopin Frédéric
G087 Halliday Johnny

Impossible : Valeur refusée lors de la saisie


CONTRAINTES D’INTEGRITE :
• Contrôles effectués lors de la saisie, modification ou suppression des données.
• Assertions qui doivent être vérifiées par les données contenues dans la base.

Unicité de la clé :
• Une relation est un ensemble de tuples, il ne peut y avoir 2 tuples identiques
dans une relation.
• Plus petit sous ensemble d’attributs qui permet d’identifier chaque ligne.
Contrainte référentielle:
• Présence de la clé d’une relation dans une autre relation. Elle définit la notion de
clé étrangère (attribut qui est clé primaire dans une autre relation).
CONTRAINTES D’INTEGRITE :
• Contrôles effectués lors de la saisie, modification ou suppression des données.
• Assertions qui doivent être vérifiées par les données contenues dans la base.

Unicité de la clé :
• Une relation est un ensemble de tuples, il ne peut y avoir 2 tuples identiques
dans une relation.
• Plus petit sous ensemble d’attributs qui permet d’identifier chaque ligne.
Contrainte référentielle:
• Présence de la clé d’une relation dans une autre relation. Elle définit la notion de
clé étrangère (attribut qui est clé primaire dans une autre relation).

Contrainte d’entité:
• Lorsque la valeur d’un attribut est inconnue, on utilise une valeur
conventionnelle appelée valeur nulle.
• Elle impose que tout attribut participant à une clé primaire soit non nul.
CONTRAINTES D’INTEGRITE :
• Contrôles effectués lors de la saisie, modification ou suppression des données.
• Assertions qui doivent être vérifiées par les données contenues dans la base.

Unicité de la clé : F012 Mozart Wolfgang


• Une relation est un ensemble S234 de tuples,Beethoven
il ne peut y avoir Ludvig
2 tuples identiques
dans une relation. G087 Berlioz Hector
B555qui permet
• Plus petit sous ensemble d’attributs Haydnd’identifier chaque ligne.
X007 Ravel Maurice
Contrainte référentielle: A631 Chopin Frédéric
• Présence de la clé d’une relation dans une autre relation. Elle définit la notion de
F132
clé étrangère (attribut qui est clé primaire dans une autre relation).

Contrainte d’entité:
• Lorsque la valeur d’un attribut est inconnue, on utilise une valeur
conventionnelle appelée valeur nulle.
• Elle impose que tout attribut participant à une clé primaire soit non nul.
CONTRAINTES D’INTEGRITE :
• Contrôles effectués lors de la saisie, modification ou suppression des données.
• Assertions qui doivent être vérifiées par les données contenues dans la base.

Unicité de la clé :
• Une relation est un ensemble de tuples, il ne peut y avoir 2 tuples identiques
dans une relation.
• Plus petit sous ensemble d’attributs qui permet d’identifier chaque ligne.
Contrainte référentielle:
• Présence de la clé d’une relation dans une autre relation. Elle définit la notion de
clé étrangère (attribut qui est clé primaire dans une autre relation).

Contrainte d’entité:
• Lorsque la valeur d’un attribut est inconnue, on utilise une valeur
conventionnelle appelée valeur nulle.
• Elle impose que tout attribut participant à une clé primaire soit non nul.

Contrainte de domaine:
• Obligation pour tout attribut de prendre des valeurs dans le domaine qu’on lui a
définit.
ILLUSTRATION DE LA NOTION DE CLE ETRANGERE :
Attribut clé primaire dans une autre table. Vérification de la contrainte
d’intégrité réferentielle
F012 Mozart Wolfgang
S234 Beethoven Ludvig

? G087
B555
Berlioz
Haydn
Hector

X007 Ravel Maurice


A631 Chopin Frédéric

S234
F012
G087
A631 Valeur
G087 inexistante dans
B555 la table
S234
G087
A831
Système de Gestion de
Bases de Données
C’est quoi un SGBD ?

Un SGBD peut être défini comme un ensemble de logiciels systèmes permettant de


stocker et d’interroger un ensemble de fichiers interdépendants, mais aussi comme un
outil permettant de modéliser et de gérer les données d’une entreprise.
Défis des SGBD
Les problèmes sont de stocker des données (BD) et de manipuler des données
(SGBD)
• Gestion du stockage : faire face à des tailles énormes de données.
• Persistance: Les données «survivent» aux programmes qui les créent.
• Fiabilité : Mécanismes de reprise sur pannes (logiciel ou matériel)
• Sécurité - Confidentialité : Droits d'accès aux données
• Cohérence : Contraintes d'intégrité contrôle de concurrence: Conflits
d'accès.
Répercussions sur la cohérence
• Interfaces homme – machine : Convivialité + différents types d'utilisateurs
• Distribution : Données stockées sur différents sites
• Optimisation : Transferts MC-MS
Fonctions des SGBD

I- Indépendance
Physique

X - Standards II- Indépendance


Logique

IX - Gestion de la III – Langage de


confidentialité manipulation

VIII - Concurrence BD IV - Gestion des


d’accès vues

VII - Gestion des V - Optimisation des


pannes questions

VI - Gestion de la
cohérence
ARCHITECTURE FONCTIONNELLE D’UN SGBD
RELATIONNEL
SGBD CONTRÔLE :
BD
Interface
Gestion des vues DICTIONNAIRE
Intégrité
Autorisation d’accès

RESULTATS STATISTIQUES
TRAITEMENT DES
REQUETES :
Optimisation
Plan d’éxécution
Contrôle d’éxécution
Exécution opérateurs DONNEES

GESTION DES ACCES


PHYSIQUES : INDEX
Buffers
Mécanismes d’accès

SECURITE : JOURNAL
Accès concurrents
Journalisation
Algèbre relationnelle
PRINCIPES D ’INTERROGATION
ALGEBRE RELATIONNELLE

• OPERATIONS ALGEBRIQUES APPLIQUEES AUX TABLES


UNAIRES (Un opérande)
BINAIRES (Deux opérandes)
• 5 OPERATIONS ALGEBRIQUES ELEMENTAIRES
RESTRICTION
PROJECTION
PRODUIT
DIFFERENCE
UNION
• OPERATIONS COMPLEMENTAIRES
JOINTURE
SEMI JOINTURE
INTERSECTION
DIVISION
RESTRICTION

R1 = RESTRICTION (R, <prédicat_de_restriction>)


<prédicat_de_restriction> : condition_simple : opérande1 θ opérande2
θ est un opérateur à prendre parmi {=, ≠, >, <, >=, <=}
condition_composée : conditions simples liées par les
opérateurs logiques et, ou, non (AND, OR, NOT)

R1 contient les n_uplets de R qui vérifient le prédicat de restriction

R1 = σ(Prédicat) R

R
R1
PROJECTION

R1 = PROJECTION (R, <liste_attributs_projection>)


<liste_attributs_projection> : Attributs Ai, avec Ai ∈ R

R1 est une relation de schéma ( liste_attributs_projection) qui contient les


n_uplets de R qui n’apparaissent qu’une fois. Lors de la projection des n_uplets
identiques peuvent être constitués ils n’apparaitront qu’une seule fois dans R1.

R1 = Π (Liste des attributs) R

R
R1
PRODUIT

R = PRODUIT (R1, R2)

R contient le produit cartésien des ensembles de n_uplets de R1 et R2. Toutes


les combinaisons des n_uplets de R1 avec les n_uplets de R2 se retrouvent dans R.

Si S1, S2 sont les schémas respectifs de R1, R2 le schéma de R est (S1, S2).

R =R1 X R2

R
R1
(4 n-uplets)
R2
(3 n-uplets)
(3x4 = 12 n-uplets)
UNION

R = UNION ( R1 , R2)

R contient les n-uplets de R1 et les n-uplets de R2 qui n’apparaîssent pas dans R1.

R1 et R2 sont deux relations de même schéma.

R = R1 ∪ R2

R1
R
R2
DIFFERENCE
R = DIFFERENCE (R1, R2)
R contient les n-uplets de R1 qui n’appartiennent pas à R2.

R1et R2 doivent avoir le même schéma.

R =R1 - R2

R1
R

R2
JOINTURE
R = JOINTURE (R1, R2, <Prédicat_de_Restriction>)
R contient les combinaisons des n-uplets de R1 avec les n-uplets de R2
qui vérifient le prédicat de jointure.

JOINTURE NATURELLE : Prédicat de jointure porte sur l’égalité des


attributs communs aux deux tables
R =R1 ⊗ R2

R
R1

R2
=

EQUI-JOINTURE : Prédicat de jointure porte sur l’égalité des attributs des


tables
θ-JOINTURE : Prédicat de jointure utilise un opérateurθ à prendre parmi
{ <, >, <=, >=, ≠ }

AUTO-JOINTURE : Jointure entre n-uplets d’une même table

JOINTURE EXTERNE: Prise en compte des n-uplets d ’une table (ou des
deux) pour lesquels le prédicat n ’est pas vérifié (Jointure externe droite,
jointure externe gauche). Tous les n-uplets de la table dominante sont
affichés même ceux qui ne vérifient pas la condition de jointure

R
R1

= R2
SEMI-JOINTURE
R = SEMI JOINTURE (R1, R2, <Prédicat_de_Jointure>)

R a le même schéma que R1


R contient les combinaisons des n-uplets de R1 avec les n-uplets de R2 qui
vérifient le prédicat de jointure.

R =R1 R2

R1
R

R2
INTERSECTION

R = INTERSECT(R1, R2)
R contient les n-uplets de R1 qui appartiennent à R2

R1 et R2 sont deux relations de même schéma.

R = R1 ∩ R2

R1

R
R2
DIVISION

R2 = DIVISION ( R, R1)

R a pour schéma (S1, S2), R1 a pour schéma S1, R2 a pour schéma S2

Soient n1 un n-uplet de R1, n2 un n-uplet de R2, R2 contient les n-uplets tels que :

∀ n2 ∈ R2, ∀ n1 ∈ R1 toutes les combinaisons de n1 et n2 sont des n-uplets


appartenant à R, (R2 x R1 ⊂ R)

R2 = R / R1

R2

R1
GRAPHE DES REQUETES

REPRESENTATION GRAPHIQUE DE LA REQUETE

X
Prédicat de
Attributs Jointure
Prédicat

Restriction Projection Produit Jointure

∪ ∩

Différence Union Intersectio Division


n
Quelques exemples
Le modèle relationnel d’une société multi-agences
de location de voiture
Client
Location
idCli
nom 1,n effectuer 1,1 idLoc
prenom ddebut
sexe dfin
tel montant
ville
1,1

Agence Voiture
1,n avoir 1,1 1,n concerner
idAg imm
nom Marque
ville annee

Client (idCli, nom, prenom, sexe, tel, ville)


Agence (idAg, nom, ville)
Voiture (imm, marque, annee, #idAg)
Location (idLoc, #imm, #idCli, ddebut, dfin, montant)
Une instance de la base de données de cette société
Voiture
imm marque annee idAg Agence
1 Toyota 2012 1 idAg nom ville

2 Dacia 2013 1 1 Thiès Ouest Thiès

3 Toyota 2014 1 2 Yoff Dakar

4 KIA 2010 2 3 Dakar Plateau Dakar

5 Renault 2009 2

6 Peugeot 2015 3

Location Client
idLoc imm idCli ddebut dfin montant idCli nom

1 1 1 22/11/2014 21/01/2015 1.500.000 1 Gueye

2 3 2 02/01/2015 17/01/2015 876.000 2 Dia

3 6 3 12/01/2015 18/02/2015 514.500 3 Sagna


Quelques requêtes algébriques
✔ Liste des voitures de marques Toyota:

σ(marque = “toyota”) (Voiture)

Voiture
imm marque annee idAg

1 Toyota 2012 1

2 Dacia 2013 1

3 Toyota 2014 1

4 KIA 2010 2

5 Renault 2009 2

6 Peugeot 2015 3
Quelques requêtes algébriques
✔ Liste des voitures de moins de 4 ans:

σ(annee >= 2013) (Voiture)

Voiture
imm marque annee idAg

1 Toyota 2012 1

2 Dacia 2013 1

3 Toyota 2014 1

4 KIA 2010 2

5 Renault 2009 2

6 Peugeot 2015 3
Quelques requêtes algébriques
✔ Liste des voitures de marques Toyota ayant moins de 4 ans:

σ(marque = “toyota”) ˄ (annee >= 2013) (Voiture)

Voiture
imm marque annee idAg

1 Toyota 2012 1

2 Dacia 2013 1

3 Toyota 2014 1

4 KIA 2010 2

5 Renault 2009 2

6 Peugeot 2015 3
Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))


Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

idAg nom ville

1 Thiès Ouest Thiès


Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

Voiture
imm marque annee idAg Agence
1 Toyota 2012 1 idAg nom ville

2 Dacia 2013 1 1 Thiès Ouest Thiès

3 Toyota 2014 1 2 Yoff Dakar

4 KIA 2010 2 3 Dakar Plateau Dakar

5 Renault 2009 2

6 Peugeot 2015 3
Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

imm marque annee idAg nom ville

1 Toyota 2012 1 Thiès Ouest Thiès

2 Dacia 2013 1 Thiès Ouest Thiès

3 Toyota 2014 1 Thiès Ouest Thiès

4 KIA 2010 2 Yoff Dakar

5 Renault 2009 2 Yoff Dakar

6 Peugeot 2015 3 Dakar Plateau Dakar


Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

imm marque annee idAg nom ville

1 Toyota 2012 1 Thiès Ouest Thiès

2 Dacia 2013 1 Thiès Ouest Thiès

3 Toyota 2014 1 Thiès Ouest Thiès

4 KIA 2010 2 Yoff Dakar

5 Renault 2009 2 Yoff Dakar

6 Peugeot 2015 3 Dakar Plateau Dakar


Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

imm marque annee idAg nom ville

1 Toyota 2012 1 Thiès Ouest Thiès

3 Toyota 2014 1 Thiès Ouest Thiès


Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

imm marque annee idAg nom ville

1 Toyota 2012 1 Thiès Ouest Thiès

3 Toyota 2014 1 Thiès Ouest Thiès


Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

idAg nom ville

1 Thiès Ouest Thiès

1 Thiès Ouest Thiès

Pas de doublons
Quelques requêtes algébriques
✔ Liste des agences louant des voitures de marques Toyota :

Π idAg, nom, ville (σ(marque = “toyota”) (Voiture Agence))

idAg nom ville

1 Thiès Ouest Thiès


Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)


Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

Agence
idAg nom ville

2 Yoff Dakar
Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

imm marque annee idAg idLoc idCli ddebut dfin montant

1 Toyota 2012 1 1 1 22/11/2014 21/01/2015 1.500.000

3 Toyota 2014 1 2 2 02/01/2015 17/01/2015 876.000

6 Peugeot 2015 3 3 3 12/01/2015 18/02/2015 514.500


Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

imm marque annee idAg idLoc idCli ddebut dfin montant nom ville
Thiès
1 Toyota 2012 1 1 1 22/11/2014 21/01/2015 1.500.000 Thiès
Ouest
Thiès
3 Toyota 2014 1 2 2 02/01/2015 17/01/2015 876.000 Thiès
Ouest
Dakar
6 Peugeot 2015 3 3 3 12/01/2015 18/02/2015 514.500 Dakar
Plateau
Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

imm marque annee idAg idLoc idCli ddebut dfin montant nom ville
Thiès
1 Toyota 2012 1 1 1 22/11/2014 21/01/2015 1.500.000 Thiès
Ouest
Thiès
3 Toyota 2014 1 2 2 02/01/2015 17/01/2015 876.000 Thiès
Ouest
Dakar
6 Peugeot 2015 3 3 3 12/01/2015 18/02/2015 514.500 Dakar
Plateau
Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

idAg nom ville

1 Thiès Ouest Thiès

3 Dakar Plateau Dakar


Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

Agence
idAg nom ville
idAg nom ville
1 Thiès Ouest Thiès ▬
1 Thiès Ouest Thiès
2 Yoff Dakar
3 Dakar Plateau Dakar
3 Dakar Plateau Dakar
Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

Agence
idAg nom ville
idAg nom ville
1 Thiès Ouest Thiès ▬
1 Thiès Ouest Thiès
2 Yoff Dakar
3 Dakar Plateau Dakar
3 Dakar Plateau Dakar
Quelques requêtes algébriques
✔ Liste des agences n’ayant pas encore louer une voiture:

Agence ▬ Π idAg, nom, ville ((Voiture Location) Agence)

Agence
idAg nom ville

2 Yoff Dakar
Structured Query Language
INTERROGATION DES DONNEES EN SQL
REQUETE SQL DE LA FORME :
SELECT Liste_Résultat
FROM Liste de Tables
WHERE Condition

SELECT [ ALL | DISTINCT ] { * | liste_expression }


FROM { Nomtable [alias Nomalias] | Nomvue [alias Nomalias]} [, {…..}]...
[WHERE condition ]
[GROUP BY liste_expression] [ HAVING condition ]
[ {UNION | INTERSECT | MINUS} SELECT ......]
[ORDER BY expr1 [ASC|DESC], expr2 [ASC|DESC],.... ];
Affichage de la table en extension :

SELECT * FROM Nom_Relation;

SELECT * FROM PERSO_HIST;

NOM AN_NAISS REGNE PAYS AN_DECES NOM_EPOUSE


-------------------- ---------- --------- ------------ ---------- --------------------
HENRI IV 1553 1559-1610 FRANCE 1610 Marie de Médicis
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav
LOUIS Le Gd Dauphin 1661 1711 Marie Anne de Bavièr
LOUIS XIII 1601 1610-1643 FRANCE 1643 Anne d’Autriche
LOUIS XIV 1638 1643-1715 FRANCE 1715 MarieThérèse Autri.
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart
PHILIPPE V 1683 1700-1746 ESPAGNE 1746 Marie Louise de Sav
Projection :
SELECT DISTINCT liste_des_attributs_de projection FROM Nom_Relation;

Pays où les personnages ont régné ?

SELECT DISTINCT PAYS FROM PERSO_HIST;

PAYS
---------------
FRANCE
ESPAGNE

SELECT PAYS FROM PERSO_HIST;

PAYS
---------------
FRANCE

FRANCE
FRANCE

ESPAGNE
7 ligne(s) sélectionnée(s).
Produit cartesien :
SELECT * FROM Nom_de_relation1, Nom_de_relation2 ;

Soit la table PAYS :


CODE_PAYS NOM_PAYS
SELECT * FROM PAYS;
------------------ ---------------
01 FRANCE
02 ESPAGNE

SELECT * FROM PERSO_HIST, PAYS;

NOM AN_NAISS REGNE PAYS AN_DECES NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- --------------- ---------- -------------------- -- ---------------

LOUIS XIII 1601 1610-1643 FRANCE 1643 Anne d’Autriche 01 FRANCE


PHILIPPE Ier 1640 1701 HenrietteAnne Stuart 01 FRANCE
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav 01 FRANCE
LOUIS Le Gd Dauphin 1661 1711 Marie Anne de Bavièr 01 FRANCE
PHILIPPE V 1683 1700-1746 ESPAGNE 1746 Marie Louise de Sav 01 FRANCE
HENRI IV 1553 1559-1610 FRANCE 1610 Marie de Médicis 01 FRANCE
LOUIS XIV 1638 1643-1715 FRANCE 1715 MarieThérèse Autri. 01 FRANCE
LOUIS XIII 1601 1610-1643 FRANCE 1643 Anne d’Autriche 02 ESPAGNE
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart 02 ESPAGNE
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav 02 ESPAGNE
LOUIS Le Gd Dauphin 1661 1711 Marie Anne de Bavièr 02 ESPAGNE
PHILIPPE V 1683 1700-1746 ESPAGNE 1746 Marie Louise de Sav 02 ESPAGNE
HENRI IV 1553 1559-1610 FRANCE 1610 Marie de Médicis 02 ESPAGNE
LOUIS XIV 1638 1643-1715 FRANCE 1715 MarieThérèse Autri. 02 ESPAGNE
14 ligne(s) sélectionnée(s).
Restriction (selection) :
SELECT * FROM Nom_De_Relation
WHERE Condition_de_restriction ;

Personnages nés avant 1650 ?


SELECT * FROM PERSO_HIST
WHERE AN_NAISS<1650;

NOM AN_NAISS REGNE PAYS AN_DECES NOM_EPOUSE


-------------------- ---------- --------- ------ ---------- --------------------
HENRI IV 1553 1559-1610 FRANCE 1610 Marie de Médicis
LOUIS XIII 1601 1610-1643 FRANCE 1643 Anne d’Autriche
LOUIS XIV 1638 1643-1715 FRANCE 1715 MarieThérèse Autri.
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart

Rois nés avant 1650 ?


SELECT * FROM PERSO_HIST
WHERE AN_NAISS < 1650
AND REGNE IS NOT NULL;

NOM AN_NAISS REGNE PAYS AN_DECES NOM_EPOUSE


-------------------- ---------- --------- ------ ---------- --------------------
HENRI IV 1553 1559-1610 FRANCE 1610 Marie de Médicis
LOUIS XIII 1601 1610-1643 FRANCE 1643 Anne d’Autriche
LOUIS XIV 1638 1643-1715 FRANCE 1715 MarieThérèse Autri.
Personnages ayant une épouse dont le prénom contient Marie ?
SELECT NOM, AN_NAISS, NOM_EPOUSE FROM PERSO_HIST
WHERE NOM_EPOUSE LIKE ('%Marie%');

NOM AN_NAISS NOM_EPOUSE


-------------------- ---------- --------------------
HENRI IV 1553 Marie de Médicis
LOUIS Duc de Bourg. 1682 Marie Adel. de Sav
LOUIS Le Gd Dauphin 1661 Marie Anne de Bavièr
LOUIS XIV 1638 MarieThérèse Autri.
PHILIPPE V 1683 Marie Louise de Sav

Personnages ayant une épouse dont le prénom commence par Anne ?


SELECT NOM, AN_NAISS, NOM_EPOUSE FROM PERSO_HIST
WHERE NOM_EPOUSE LIKE ('Anne%');

NOM AN_NAISS NOM_EPOUSE


-------------------- ---------- --------------------
LOUIS XIII 1601 Anne d’Autriche

SELECT NOM, AN_NAISS, NOM_EPOUSE FROM PERSO_HIST


WHERE NOM_EPOUSE LIKE ('%Anne%');

NOM AN_NAISS NOM_EPOUSE


-------------------- ---------- --------------------
LOUIS Le Gd Dauphin 1661 Marie Anne de Bavièr
LOUIS XIII 1601 Anne d’Autriche
PHILIPPE Ier 1640 HenrietteAnne Stuart
Personnages ayant une épouse dont le prénom se termine par Anne ?
SELECT NOM, AN_NAISS, NOM_EPOUSE FROM PERSO_HIST
WHERE NOM_EPOUSE LIKE ('%Anne');

aucune ligne sélectionnée


Jointure relationnelle:

SELECT * FROM Nom_de_relation1Alias1, Nom_de_relation2 Alias2


WHERE Condition_de_jointure;

PERSO_HISTO
NOM AN_NAISS REGNE CODE_PAYS AN_DECES NOM_EPOUSE
-------------------- ---------- --------- -------- ---------- --------------- ----------------------
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav
LOUIS Le Gd Dauphin 1661 1711 Marie Anne de Bavièr
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri.
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav

PAYS
CODE_PAYS NOM_PAYS
------------------ ---------------
01 FRANCE
02 ESPAGNE

SELECT * FROM PERSO_HIST PH, PAYS P


WHERE PH.CODE_PAYS=P.CODE_PAYS;

NOM AN_NAISS REGNE CO AN_DE NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- -- ----- -------------------- ---- -----------------
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis 01 FRANCE
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche 01 FRANCE
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri. 01 FRANCE
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav 02 ESPAGNE
SELECT * FROM PERSO_HIST PH, PAYS P
WHERE PH.CODE_PAYS=P.CODE_PAYS
AND NOM_PAYS = ‘FRANCE’;

NOM AN_NAISS REGNE CO AN_DE NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- -- ----- -------------------- ---- -----------------
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis 01 FRANCE
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche 01 FRANCE
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri. 01 FRANCE

Jointure SQL2:
SELECT * FROM Nom_de_relation1 INNER JOIN Nom_de_relation2
ON
Condition_de_jointure;
SELECT * FROM PERSO_HIST PH INNER JOIN PAYS P
ON PH.CODE_PAYS=P.CODE_PAYS;

Jointure naturelle SQL2:

SELECT * FROM Nom_relation1 NATURAL JOIN Nom_de_relation2;

SELECT * FROM PERSO_HIST NATURAL JOIN PAYS;


Auto jointure SQL2:

SELECT * FROM Nom_relation Alias1 INNER JOIN Nom_relation Alias2 ON


Condition_de_jointure;

Personnages nés après le décès de LOUIS XIII ?


SELECT [Link]
FROM PERSO_HIST R1 INNER JOIN PERSO_HIST R2
ON R1.AN_NAISS > R2.AN_DECES
WHERE [Link]='LOUIS XIII';

NOM
--------------------
LOUIS Le Gd Dauphin
LOUIS Duc de Bourg.
PHILIPPE V

SELECT [Link] FROM PERSO_HIST R1, PERSO_HIST R2


WHERE [Link]='LOUIS XIII'
AND R1.AN_NAISS > R2.AN_DECES;
Jointure externe relationnelle:

SELECT * FROM Nom_relation1 Alias1, Nom_relation2 Alias2


WHERE Alias1.Attr1=Alias2.Attr2 (+);
ou
SELECT * FROM Nom_relation1 Alias1, Nom_relation2 Alias2
WHERE Alias2.Attr2 (+) = Alias1.Attr1 ;

SELECT * FROM PERSO_HIST PH, PAYS P


WHERE PH.CODE_PAYS=P.CODE_PAYS(+);

NOM AN_NAISS REGNE CO AN_DE NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- ----- ------- -------------------- -- --- ------------
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche 01 FRANCE
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis 01 FRANCE
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri. 01 FRANCE
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav 02 ESPAGNE
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav
LOUIS Le Gd Dauphin1661 1711 Marie Anne de Bavièr
7 ligne(s) sélectionnée(s).

SELECT * FROM PERSO_HIST PH, PAYS P


WHERE P.CODE_PAYS(+)=PH.CODE_PAYS;
Jointure externe SQL2:
SELECT * FROM Nom_relation1 LEFT OUTER JOIN Nom_relation2 ON
Condition_de_jointure;

SELECT * FROM PERSO_HIST PH LEFT OUTER JOIN PAYS P


ON PH.CODE_PAYS=P.CODE_PAYS;
Equivalent à
SELECT * FROM Nom_relation2 RIGHT OUTER JOIN Nom_relation1 ON
Condition_de_jointure;

SELECT * FROM PAYS P RIGHT OUTER JOIN PERSO_HIST PH


ON PH.CODE_PAYS=P.CODE_PAYS;

NOM AN_NAISS REGNE CO AN_DE NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- ----- ------- -------------------- -- --- ------------
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche 01 FRANCE
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis 01 FRANCE
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri. 01 FRANCE
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav 02 ESPAGNE
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav
LOUIS Le Gd Dauphin1661 1711 Marie Anne de Bavièr
7 ligne(s) sélectionnée(s).
SELECT * FROM PAYS P LEFT OUTER JOIN PERSO_HIST PH
ON PH.CODE_PAYS=P.CODE_PAYS;

Equivalent à

SELECT * FROM PERSO_HIST PH RIGTH OUTER JOIN PAYS P


ON PH.CODE_PAYS=P.CODE_PAYS;

CO NOM_PAYS NOM AN_NAISS REGNE CO AN_DECES NOM_EPOUSE


-- --------------- -------------------- ---------- --------- ---- ---------- --------------------
01 FRANCE HENRI IV 1553 1559-1610 01 1610 Marie de Médicis
01 FRANCE LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche
01 FRANCE LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri.
02 ESPAGNE PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav

03 ANGLETERRE
SELECT * FROM Nom_relation1 FULL OUTER JOIN Nom_relation2 ON
Condition_de_jointure;

PAYS
CODE_PAYS NOM_PAYS
------------------ ---------------
01 FRANCE
02 ESPAGNE
03 ANGLETERRE

SELECT * FROM PERSO_HIST PH FULL OUTER JOIN PAYS P


ON PH.CODE_PAYS=P.CODE_PAYS;

NOM AN_NAISS REGNE CO AN_DE NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- ----- ------- -------------------- -- --- ------------
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche 01 FRANCE
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis 01 FRANCE
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri. 01 FRANCE
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav 02 ESPAGNE
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav
LOUIS Le Gd Dauphin1661 1711 Marie Anne de Bavièr
03 ANGLETERRE

8 ligne(s) sélectionnée(s).
Jointure procédurale :
SELECT * FROM Nom_de_relation1
WHERE Nom_Attribut1
IN (SELECT Nom_attribut2 FROM Nom_de_Relation2);

SELECT * FROM PERSO_HIST


WHERE CODE_PAYS IN (SELECT CODE_PAYS FROM PAYS);

NOM AN_NAISS REGNE CO AN_DECES NOM_EPOUSE


-------------------- ---------- ------------- -- ------ -------------------------
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri.
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav

SELECT * FROM PERSO_HIST


WHERE CODE_PAYS IN (SELECT CODE_PAYS FROM PAYS
WHERE NOM_PAYS=‘FRANCE’);

NOM AN_NAISS REGNE CO AN_DECES NOM_EPOUSE


-------------------- ---------- ------------- -- ------ -------------------------
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri.
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis
Jointure procédurale :

Personnages nés après le décès de LOUIS XIII ?

SELECT NOM FROM PERSO_HIST


WHERE AN_NAISS > (SELECT AN_DECES FROM PERSO_HIST
WHERE NOM='LOUIS XIII' );

Nom et age lors du décès du (des) personnage(s) ayant vécu le plus longtemps ?

SELECT NOM, AN_DECES – AN_NAISS


FROM PERSO_HIST
WHERE AN_DECES – AN_NAISS >= ALL (SELECT AN_DECES – AN_NAISS
FROM PERSO_HIST);

NOM AN_DECES-AN_NAISS
-------------------- ------------------------------
LOUIS XIV 77

Sous interrogation dans la clause FROM:

SELECT * FROM Nom_relation1, (SELECT…FROM Nom_relation2) alias_rel2


WHERE condition;
Sous interrogations synchronisées:

SELECT *
FROM Nom_relation1 alias_rel1
WHERE Nom_col θ (SELECT …
FROM Nom_relation2
alias_rel2
WHERE alias_rel1.x θ alias
rel2.y)
[ AND…..];

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


Personnages ayant vécu le plus longtemps pour chaque pays où ils ont régné ?

SELECT NOM, AN_DECES - AN_NAISS


FROM PERSO_HIST PH
WHERE AN_DECES-AN_NAISS >= ALL (SELECT AN_DECES- AN_NAISS
FROM PERSO_HIST
WHERE CODE_PAYS=PH.CODE_PAYS)
AND CODE_PAYS IS NOT NULL;

NOM AN_DECES-AN_NAISS
-------------------- -----------------
LOUIS XIV 77
PHILIPPE V 63
SELECT NOM, AN_DECES - AN_NAISS, NOM_PAYS
FROM PERSO_HIST PH, PAYS P
WHERE AN_DECES-AN_NAISS >= ALL (SELECT AN_DECES- AN_NAISS
FROM PERSO_HIST
WHERE CODE_PAYS=PH.CODE_PAYS)
AND PH.CODE_PAYS=P.CODE_PAYS;

NOM AN_DECES-AN_NAISS NOM_PAYS


-------------------- ------------------------------- ---------------
LOUIS XIV 77 FRANCE
PHILIPPE V 63 ESPAGNE

SELECT NOM, AN_DECES-AN_NAISS


FROM PERSO_HIST PH
WHERE AN_DECES-AN_NAISS >= ALL (SELECT AN_DECES- AN_NAISS
FROM PERSO_HIST
WHERE CODE_PAYS=PH.CODE_PAYS);

ATTENTION :
NOM AN_DECES-AN_NAISS
---------------- --------------------------------
LOUIS Duc de Bourg. 30
LOUIS Le Gd Dauphin 50
LOUIS XIV 77
PHILIPPE Ier 61
PHILIPPE V 63
SELECT *
FROM Nom_relation1 alias_rel1
WHERE EXISTS (SELECT …
FROM Nom_relation2
alias_rel2
WHERE alias_rel1.x θ alias
rel2.y)
[ AND…..];

Pays pour lesquels on a enregistré des Rois ?

SELECT NOM_PAYS FROM PAYS


WHERE EXISTS (SELECT *
FROM PERSO_HIST WHERE
CODE_PAYS = PAYS.CODE_PAYS);

NOM_PAYS
---------------
FRANCE
ESPAGNE
Différence :

SELECT Liste_attributs FROM Nom_De_Relation1


MINUS
SELECT Liste_attributs FROM Nom_De_Relation2;

ou
SELECT Liste_attributs FROM Nom_De_Relation1
WHERE Nom_attribut
NOT IN
( SELECT Nom_attribut FROM Nom_De_Relation2
[WHERE Condition ]);

ou

SELECT Liste_attributs FROM Nom_De_Relation1 R1


WHERE NOT EXISTS
(SELECT *
FROM Nom_De_Relation2 R2
WHERE R2.Nom_attribut = R1.Nom_attribut);
Pays pour lesquels il n’y a pas de rois enregistrés ?

SELECT NOM_PAYS FROM PAYS


MINUS
SELECT NOM_PAYS FROM PAYS P, PERSO_HIST PH
WHERE P.CODE_PAYS = PH.CODE_PAYS;

SELECT NOM_PAYS FROM PAYS


WHERE CODE_PAYS NOT IN (SELECT CODE_PAYS
FROM PERSO_HIST
WHERE CODE_PAYS IS NOT NULL);

SELECT NOM_PAYS FROM PAYS


WHERE NOT EXISTS (SELECT *
FROM PERSO_HIST WHERE
CODE_PAYS = PAYS.CODE_PAYS);

NOM_PAYS
---------------
ANGLETERRE

SELECT NOM_PAYS FROM PAYS


WHERE CODE_PAYS NOT IN (SELECT CODE_PAYS
FROM PERSO_HIST);

aucune ligne sélectionnée

ATTENTION AUX VALEURS NULLES


Union :

SELECT Liste_attributs
FROM Nom_De_Relation1
[WHERE Condition1 ]
UNION
SELECT Liste_attributs
FROM Nom_De_Relation2
[WHERE Condition2];

SELECT * FROM PERSO_HIST PH, PAYS P


WHERE PH.CODE_PAYS=P.CODE_PAYS(+)
UNION
SELECT * FROM PERSO_HIST PH, PAYS P
WHERE PH.CODE_PAYS(+)=P.CODE_PAYS;

NOM AN_NAISS REGNE CO AN_DE NOM_EPOUSE CO NOM_PAYS


-------------------- ---------- --------- ----- ------- -------------------- -- --- ------------
LOUIS XIII 1601 1610-1643 01 1643 Anne d’Autriche 01 FRANCE
HENRI IV 1553 1559-1610 01 1610 Marie de Médicis 01 FRANCE
LOUIS XIV 1638 1643-1715 01 1715 MarieThérèse Autri. 01 FRANCE
PHILIPPE V 1683 1700-1746 02 1746 Marie Louise de Sav 02 ESPAGNE
PHILIPPE Ier 1640 1701 HenrietteAnne Stuart
LOUIS Duc de Bourg. 1682 1712 Marie Adel. de Sav
LOUIS Le Gd Dauphin1661 1711 Marie Anne de Bavièr
03 ANGLETERRE

8 ligne(s) sélectionnée(s).
Intersection :

SELECT Liste_attributs
FROM Nom_De_Relation1
[WHERE Condition1 ]
INTERSECT
SELECT Liste_attributs
FROM Nom_De_Relation2
[WHERE Condition2];
Division (inclusion d’un ensemble dans un autre):

SELECT Liste FROM Nom_Relation R


WHERE NOT EXISTS
(SELECT Liste1 FROM Nom_Relation1
MINUS
SELECT Liste2 FROM Nom_Relation2
WHERE Nom_Relation2.attr=[Link] );

Pays tous les Rois ayant dépassé 50 ans ?


SELECT NOM_PAYS FROM PAYS P
WHERE NOT EXISTS
(SELECT NOM
FROM PERSO_HIST
WHERE CODE_PAYS = P.CODE_PAYS
MINUS
SELECT NOM
FROM PERSO_HIST
WHERE CODE_PAYS = P.CODE_PAYS
AND AN_DECES – AN_NAISS > 50);

NOM_PAYS
---------------
ESPAGNE
ANGLETERRE
Pays tous les Rois ayant dépassé 50 ans ?

SELECT NOM_PAYS FROM PAYS P


WHERE NOT EXISTS
(SELECT NOM
FROM PERSO_HIST
WHERE CODE_PAYS = P.CODE_PAYS
MINUS
SELECT NOM
FROM PERSO_HIST
WHERE CODE_PAYS = P.CODE_PAYS
AND AN_DECES – AN_NAISS > 50)
AND EXISTS ( SELECT * FROM PERSO_HIST WHERE CODE_PAYS= P.CODE_PAYS);

Division exacte (égalité des ensembles) :


SELECT Liste FROM Nom_Relation R
WHERE NOT EXISTS
(SELECT Liste1 FROM Nom_Relation1
MINUS
SELECT Liste2 FROM Nom_Relation2
[WHERE Nom_Relation2.attr=[Link]] )
AND NOT EXISTS
(SELECT Liste2 FROM Nom_Relation2
WHERE Nom_Relation2.attr=[Link]
MINUS
SELECT Liste1 FROM Nom_Relation1);
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 [Link]= [Link];
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
Regroupement de n-uplets – Sous ensembles

SELECT Liste_attributs FROM Nom_De_Relation


GROUP 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_Relation


GROUP BY Liste_attributs_de_regroupement
HAVING Condition

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


GROUP BY CODCAT HAVING Count (*) > 20;
Questions …!?

Vous aimerez peut-être aussi