CORRIGE REVISIONS-2 – CAS CAFE
Manipulation des données et langage de définition de données
Création des tables :
Ecrire et exécuter les requêtes ci-dessous :
1) Ajouter un attribut commentaire, d'une longueur de 80, dans la table des serveurs.
Alter table serveur
Add commentaire char(80);
2) Ajouter la contrainte "quantité facturée obligatoirement positive" dans la table des lignes de facture.
Alter table ligne_fact
Add constraint ck_qte check(qte > 0);
3) Dans la table des serveurs, faire passer la longueur de la ville à 35 caractères.
Alter table serveur
alter column villeserv varchar(35);
4) Interdire la création de doublons sur les noms des serveurs.
Alter table serveur
add constraint ck_un unique(nomserv);
5) Obtenir la liste des factures avec pour chaque facture le numéro de la facture, le nom de la table et la date de la facture.
select numfact,nomtable,datefact
from facture f
inner join tables t on f.numtable=t.numtable;
6) Obtenir les noms des consommations servies le 22/02/2006.
select distinct libcons
from conso c
inner join ligne_fact f
on c.numcons = l.numcons
inner join facture f
on f.numfact = l.numfact
and datefact = '2006-02-22';
7) Connaître le nombre de serveurs.
select count(*)
from serveur;
8) Ajouter le serveur n°54, il s'appelle Lulu, habite 35, rue des Lilas 69000 Lyon et est né le 20/06/1986.
insert into serveur
values (54, 'Lulu', '35, rue des Lilas', 69000, 'Lyon', '1986-06-20');
9) Obtenir les numéros et nombre de places des tables qui n'ont pas été occupées.
select numtable, nbplaces
from tables
where numtable not in
(select numtable
from facture);
10) Connaître le nom et le prix de la consommation la moins chère.
select libcons, prixcons
from conso
where prixcons =
(select min(prixcons)
from conso);
11) Obtenir le numéro, la date et le montant total de chaque facture.
select f.numfact, datefact, sum(prixcons * qte)
from conso c
inner join ligne_fact f
on c.numcons = l.numcons
inner join facture f
on f.numfact = l.numfact
group by f.numfact, datefact;
12) Augmenter de 10% le prix du café, café double et café crème.
update conso
set prixcons=prixcons*1.1
where libcons in ('Café', ‘Café double’, ‘Café crème’);
Ou bien (si on considère qu’il n’y a pas d’autres consommations dont le nom commence par café) :
update conso
set prixcons=prixcons*1.1
where libcons like 'Café%';
13) Connaître les noms des serveurs ayant effectué plus de 15 € de chiffre d'affaires.
select nomserv
from conso c
inner join ligne_fact f
on c.numcons = l.numcons
inner join facture f
on f.numfact = l.numfact
inner join serveur s
on s.numserv = f.numserv
group by nomserv
having sum(prixcons * qte) > 15;
14) Dans la facture 1207, la consommation 108 a été saisie par erreur, faire le nécessaire.
delete from ligne_fact
where numfact=1207
and numcons=108;
15) Connaître le nom et l'âge de chaque serveur. Pour extraire l'année, il faudra utiliser la fonction YEAR.
La date du jour est contenue dans CURRENT_TIMESTAMP.
Select nomserv, date_part('year', CURRENT_DATE) - date_part('year', datenaiss)
From serveur;