Académique Documents
Professionnel Documents
Culture Documents
Une vue est interface d’accès à une base de données. Elle est considérée comme une table
virtuelle. Cela veut dire que la vue n’a pas de contenu propre stocké en base de données.
Son contenu est visualisé par l’exécution de sa requête. Une vue est une requête dont la
définition est stockée en base de données.
Un index est une structure de base de données qui accélère la recherche et la récupération
des données.
3) A quoi servent les mots 'with check option' dans la définition d'une vue ?
Les mots 'with check option' servent à contrôler les opérations de mise à jour à travers une
vue. La vue accepte uniquement la mise à jour des données qui peut afficher, c’est-à-dire
les données qui vérifient la condition de la vue.
QCM
Conserver dans (1) à (8) la ou les assertions justes.
1) Une base de données est dite relationnelle car
a) elle maintient des relations entre des entités.
b) elle utilise des opérateurs relationnels.
c) elle maintient des relations entre les tables.
2) La commande alter permet de supprimer
a) des colonnes.
b) des contraintes.
c) des tables.
3) SQL est un langage
Page 1 sur 10
a) procédural.
b) déclaratif.
c) orienté objets.
4) La contrainte de relation peut être exprimée par
a) chaque table a une clé primaire.
b) chaque table est une relation.
c) toute table dans la base de données est liée à au moins une autre table via une clé
étrangère.
5) Le mot check permet de définir
a) uniquement une contrainte colonne.
b) uniquement une contrainte table.
c) à la fois une contrainte et une contrainte table.
6) Le mot unique permet de définir
a) uniquement une contrainte colonne.
b) uniquement une contrainte table.
c) à la fois une contrainte et une contrainte table.
7) Les mots 'not null' permettent de définir
a) uniquement une contrainte colonne.
b) uniquement une contrainte table.
c) à la fois une contrainte et une contrainte table.
8) La commande revoke permet de supprimer
a) des privilèges des rôles.
b) des rôles des rôles.
c) des privilèges des utilisateurs.
Exercice
Partie 1
Page 2 sur 10
Création de la table Pilote
create table Pilote (
numPilote varchar(20) primary key,
nom varchar(20),
prenom varchar(20),
adresse varchar(50),
salaire number,
commission number,
dateEmbauche date)
/
Page 3 sur 10
Création de la table Affectation
create table Affectation
(numVol varchar(20),
numPilote varchar(20),
numAvion varchar(20),
nbrePassagers number(4))
/
3) Ajouter à Affectation une contrainte nommée de clé étrangère en spécifiant une action
référentielle.
Page 4 sur 10
FOREIGN KEY(numPilote) REFERENCES Pilote
ON DELETE CASCADE
/
4) Désactiver la contrainte de clé primaire avec annulation des contraintes qui en font
référence.
Page 5 sur 10
On peut aussi le faire pour une des tables masters par exemple la table Avion.
Partie 2
Répondre par l’algèbre relationnelle puis en SQL aux requêtes suivantes :
1) Donner le numéro et le type des avions qui ont effectué des vols avec un nombre de
passagers supérieur à 200 (par vol).
2) Chercher les numéros des pilotes qui n’ont jamais participé au pilotage des avions ayant
effectué un vol à partir de la ville de Tanger.
Select numPilote
From Pilote
minus
select numPilote
from Affectation natural join vol
Where villeDepart='TANGER'
Page 6 sur 10
Une autre manière
Select numPilote
From Pilote
where numPilote not in (select numPilote
from Affectation natural join vol
Where villeDepart='TANGER')
3) Afficher par ordre décroissant du nombre de vols, le numéro d’avion et le nombre de vols
effectués par avion dont l'année de service est comprise entre 1990 en 1999.
Page 7 sur 10
On peut aussi répondre par une jointure généralisée
4) Donner le nom, le prénom de chaque pilote dont le nombre total de passagers transportés
est supérieur à 5000.
5) Donner la liste des avions et les vols correspondants et éventuellement les avions qui n'ont
pas encore effectué de vol.
select *
from avion natural left join affectation
select *
from avion left join affectation using(numAvion)
Page 8 sur 10
En utilisant la jointure généralisée gauche
select *
from avion av left join affectation af on av.numAvion=af.numAvion
7) Chercher les numéros des pilotes qui ont participé au pilotage de tous les avions.
Select numPilote
From Affectation
Group by numPilote
Having count(numAvion) = (select count(*) from Avion)
Page 9 sur 10
8) Chercher les couples de noms de pilotes ayant piloté le même avion.
Select p1.nom,p2.nom
From (pilote p1 join affectation a1 on p1.numPilote=a1.numPilote)
join (pilote p2 join affectation a2 on p2.numPilote=a2.numPilote) on
a1.numAvion=a2.numAvion
where p1.numPilote<p2.numPilote
/
Page 10 sur 10