Vous êtes sur la page 1sur 25

PREREQUIS

PREREQUIS La jointure va permettre lorsque cela est nécessaire de travailler sur une table qui regroupe

La jointure va permettre lorsque cela est nécessaire de travailler sur une table qui regroupe les informations de plusieurs tables. Exemple jointure des 3 tables.

nécessaire de travailler sur une table qui regroupe les informations de plusieurs tables. Exemple jointure des

Si des valeurs nulles existent sur des attributs de jointures, une jointure externe (gauche ou droite) va être utilisée pour visualiser toutes les informations disponibles.

pour visualiser toutes les informations disponibles. Pourquoi représenter l'information à l'aide de

Pourquoi représenter l'information à l'aide de plusieurs relations alors qu'elle peut être représentée comme ci-dessus ?

-Anomalie de modification -Anomalie de suppression -Anomalie d'insertion

EXERCICE 1

Donner:

-le schéma de la base de données

EXERCICE 1 Donner: -le schéma de la base de données

schéma(LIBRAIRIE)={ISBN,Intitulé,Auteur,Prix,ID,Nom,Prénom,CP,Livre,Client,Date}

-le domaine actif de la relation Client

ADOM(Client)={1,2,3,Pascal,Dupont,Martin,Jean,Pierre,Marie,29000,63000}

-le domaine actif de l'attribut Auteur

ADOM(Auteur,Livre)={Rowling,Pascal,Loana,Corneille}

Justifier les deux clés primaires de la relation Achat Achat[Livre] ⊆ Livre[ISBN] Achat[Client] ⊆ Client[ID]

Justifier les deux clés primaires de la relation Achat Achat[Livre] Livre[ISBN] Achat[Client] Client[ID]

Quelles sont les clés étrangères de la base de données et quelles sont leur utilité? -Les clés étrangères sont Livre et Client (la partie gauche d'une DI dont la partie droite est une clé primaire est une clé étrangère). Elles permettent de faire la relation entre la date d'achat et les tables Client et Livre.

A B signifie:

A implique B

Valider ou réfuter (donner un contre exemple) les dépendances suivantes:

ISBN Auteur

Intitulé Auteur

vrai

faux

t2[intitulé]='Les pensées'=t3[intitulé] or t2[Auteur]='pascal'

≠t3[Auteur]='Loana'

Autrement dit, la connaissance de l'intitulé ne permet pas de déduire le nom de l'auteur.

Prix Auteur

Prénom ID

vrai

vrai

Les dépendances d'inclusions

Valider ou réfuter (donner un contre exemple) les dépendances suivantes:

Achat[Client] Client[ID]

Client[ID] Achat[Client]

vrai

vrai

Client[Nom] Livre[Auteur]

faux

Les valeurs de Nom ne sont pas incluses dans Auteur.

Client[Nom,Prénom] Client[Nom,Prénom] faux

Les valeurs {<Pascal Jean><Dupont Pierre><Martin Marie>} ne sont pas incluses dans {<Jean Pascal><Pierre Dupont><Marie Martin>}

EXERCICE 2

Exprimer en algèbre relationnelle et en SQL les requêtes suivantes:

1.Donner tous les livres de la librairie

Projection: Permet de faire une coupe verticale(choix de l'attribut à afficher)

AR

π nom_attribut (relation)

π ISBN,Intitulé,Auteur,Prix (Livre)

En SQL projection s'effectue à l'aide de la clause SELECT

t (relation) π ISBN,Intitulé,Auteur,Prix (Livre) En SQL projection s'effectue à l'aide de la clause SELECT

2.Donner les clients dont le code postal est 63000

Sélection: Permet de faire une coupe horizontale (choix d'un ou plusieurs tuples)

AR

σ formule de sélection (relation)

-La formule de sélection peut être composée à l'aide des opérateurs ⋀ ⋁ .

σ CP=63000 (Client)

-En SQL la sélection s'effectue à l'aide de la clause WHERE la formule de sélection peut être composée avec AND, OR, et NOT

s'effectue à l'aide de la clause WHERE la formule de sélection peut être composée avec AND,

3.Donner les livres dont le prix est supérieur à 10 et inférieur à 15

AR

σ Prix>10 Prix<15 (Livre)

R σ Prix>10 ⋀ Prix<15 ( L i v r e ) 4.Donner les livres dont

4.Donner les livres dont le prix est inférieur à 10 ou dont l'auteur est 'Pascal'

AR

σ Prix<10 Auteur='Pascal' (Livre)

à 10 ou dont l'auteur est 'Pascal' A R σ Prix<10 ⋁ Auteur='Pascal' ( L i

5.Donner l'identifiant des clients qui ont acheté un livre

-On cherche les identifiants des clients qui sont présents dans la table Achat (projection).

AR

π Client (Achat)

-En algèbre relationnelle on travaille avec des ensembles, l'information n'est pas redondante. La réponse de la requête va être 1, 2, 3.

-En SQL multi-ensembles pour éliminer la redondance on utilise DISTINCT

La réponse de la requête va être 1, 2, 3. -En SQL multi-ensembles pour éliminer la

5.Donner l'identifiant des clients qui ont acheté un livre

-On cherche les identifiants des clients qui sont présents dans la table Achat (projection).

AR

π Client (Achat)

-En algèbre relationnelle on travaille avec des ensembles, l'information n'est pas redondante. La réponse de la requête va être 1, 2, 3.

-En SQL multi-ensembles pour éliminer la redondance on utilise DISTINCT

La réponse de la requête va être 1, 2, 3. -En SQL multi-ensembles pour éliminer la

6.Donner les livres qui n'ont jamais été achetés

On cherche les livres présents dans la table Livre mais absents dans la table Achat. Pour cela on utilise l'opérateur ensembliste Différence.

Attention lorsqu'on utilise les opérateurs ensemblistes Union Intersection ou Différence les relations doivent avoir le même schéma( même attributs).

AR

π ISBN (Livre)-π Livre (Achat)

SQL

SELECT ISBN FROM Livre MINUS SELECT Livre FROM Achat;

-Les opérateurs ensemblistes forcent la sémantique ensembliste. (DISTINCT)

-Pour ACCESS et certains SGBD seul l'opérateur UNION est disponible donc les solutions suivantes vont être préférées:

Opérateur IN : vérifie si la valeur existe dans un sous-ensemble

SELECT

WHERE X IN (SELECT

FROM R

)

dans un sous-ensemble SELECT WHERE X IN (SELECT FROM R ) Opérateur EXISTS: Test l'existence ou

Opérateur EXISTS: Test l'existence ou l'absence de données dans la sous requête

SELECT

FROM R

WHERE EXISTS (SELECT * FROM S WHERE C) La condition C doit comporter un attribut de R

S WHERE C) La condition C doit comporter un attribut de R Les sous-requêtes de la

Les sous-requêtes de la clause WHERE sont introduites par les mots clés :

IN,EXIST, ANY,ALL.

7.Donner l'intitulé et la date d'achat de chaque livre.

-Lorsqu'on désire travailler sur plusieurs tables une jointure va être nécessaire. La jointure est un produit cartésien suivi d'une sélection et d'une projection . En Algèbre relationnelle, l'attribut qui va permettre de faire la jointure est implicite.

-En langage SQL il va falloir préciser dans la clause WHERE quelles sont les valeurs qui doivent être égales entre les 2 relations pour effectuer la jointure.

AR

π Intitulé,Date (Livre Livre ISBN Client ID (Achat))))

La première étape:

-Le produit cartésien Livre*Achat

SELECT * FROM Livre,Achat

Sélection SELECT * FROM Livre,Achat WHERE livre.ISBN=Achat.Livre; Projection

Sélection SELECT * FROM Livre,Achat WHERE livre.ISBN=Achat.Livre;

Sélection SELECT * FROM Livre,Achat WHERE livre.ISBN=Achat.Livre; Projection
Projection
Projection

8.Donner le nom des clients qui ont acheté le livre intitulé 'Le cid'

π Nom ID =Client (Livre Livre ISBN Client ID (Achat)))Client))

(Livre ⧓ (ρ L i v r e → I S B N (ρ C l

SELECT * FROM Livre,Client,Achat WHERE Livre.ISBN=Achat.Livre AND Client.ID=Achat.Client

WHERE Livre.ISBN=Achat.Livre AND Client.ID=Achat.Client SELECT Client.nom FROM Livre,Client,Achat WHERE

SELECT Client.nom FROM Livre,Client,Achat WHERE Livre.ISBN=Achat.Livre AND Client.ID=Achat.Client AND Livre.Intitule='Le Cid';

FROM Livre,Client,Achat WHERE Livre.ISBN=Achat.Livre AND Client.ID=Achat.Client AND Livre.Intitule='Le Cid' ;

9.Donner le prénom des clients qui se termine par la lettre 'e'

-% Remplace une chaîne de caractère

9.Donner le prénom des clients qui se termine par la lettre 'e' -% Remplace une chaîne

SQL 1.Donner le prix moyen d'un livre Les fonctions d'agrégation SUM (somme des valeurs d'une colonne), AVG(moyenne des valeurs d'une colonne,) MIN, MAX, COUNT(nombre de lignes d'une table) retournent une ligne une colonne.

de lignes d'une table) retournent une ligne une colonne. 2.Donner le nombre de client pour chaque

2.Donner le nombre de client pour chaque ville

GROUP BY permet d'utiliser les fonctions d'agrégation sur des sous-ensembles de valeurs.

client pour chaque ville GROUP BY permet d'utiliser les fonctions d'agrégation sur des sous-ensembles de valeurs.

3.Donner le nom des clients qui ont commandé au moins deux livres

le nom des clients qui ont commandé au moins deux livres On regroupe par Client GROUP

On regroupe par Client GROUP BY (ID ou Nom) et on effectue une projection

Client GROUP BY (ID ou Nom) et on effectue une projection HAVING va permettre de définir

HAVING va permettre de définir des sélections sur les éléments d'une partition. Ici le nombre de livre commandé > 2

va permettre de définir des sélections sur les éléments d'une partition. Ici le nombre de livre

4.Quelle est la somme totale dépensée par client

4.Quelle est la somme totale dépensée par client 5.Donner le montant total des ventes par jour
4.Quelle est la somme totale dépensée par client 5.Donner le montant total des ventes par jour

5.Donner le montant total des ventes par jour

4.Quelle est la somme totale dépensée par client 5.Donner le montant total des ventes par jour

6.Donner les livres dont le prix est supérieur au prix moyen des livres

Prix moyen des livres

supérieur au prix moyen des livres Prix moyen des livres On va comparer le prix des

On va comparer le prix des livres au résultat de cette requête: Sous requête. Les sous-requêtes de la clause WHERE sont introduites par les mots clés :

IN,EXIST, ANY,ALL.

sont introduites par les mots clés : IN,EXIST, ANY,ALL. On peut aussi utiliser ANY dans ce

On peut aussi utiliser ANY dans ce cas.

Utilisation

WHERE X bop ANY (SELECT , FROM, WHERE ) WHERE X bop ALL (SELECT , FROM, WHERE )

Différence entre ANY et ALL

Différence entre ANY et ALL ANY Vérifie si le prix est supérieur à une des valeurs
Différence entre ANY et ALL ANY Vérifie si le prix est supérieur à une des valeurs

ANY Vérifie si le prix est supérieur à une des valeurs de la colonne prix

le prix est supérieur à une des valeurs de la colonne prix ALL Vérifie si le

ALL Vérifie si le prix est supérieur à toutes les valeurs de la colonne prix