0% ont trouvé ce document utile (0 vote)
51 vues30 pages

Concepts de bases de données et requêtes SQL

Ce document décrit un schéma de base de données relationnelle pour la gestion d'agences bancaires, de clients et de leurs comptes et emprunts. Il présente également des requêtes SQL sur cette base de données.

Transféré par

Rayen Hadjmassoud
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)
51 vues30 pages

Concepts de bases de données et requêtes SQL

Ce document décrit un schéma de base de données relationnelle pour la gestion d'agences bancaires, de clients et de leurs comptes et emprunts. Il présente également des requêtes SQL sur cette base de données.

Transféré par

Rayen Hadjmassoud
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

Les concepts fondamentaux d’une base de données

Interrogation des données(suite)


Partie 6
Application:

Soit la base de données relationnelle suivante concernant la gestion des


commandes des lycées pour l’année scolaire 2021/2022:

livre (isbn, titre, pu, stock) Désigne l’ensemble des livres

lycée (code_l, Nom, ville, tel) Désigne l’ensemble des lycées

Commande (ncmd, Date, #code_l) Désigne l’ensemble des commandes


passer par les lycées

Ligne_commandes (#ncmd, #isbn, qte) Désigne l’ensemble des lignes de


commandes.
Les sous requêtes :
Une sous-requête doit être placée à la suite d'une clause WHERE ou HAVING.

• Lorsque la sous-requête remplace une constante utilisée avec des opérateurs


classiques, elle doit obligatoirement renvoyer une seule réponse (une table d'une
ligne et une colonne).
Par exemple :

SELECT … FROM …
WHERE … < (SELECT … FROM …) ;

A noter : il est possible d’utiliser n’importe quel opérateur d’égalité tel que =, >, <,
>=, <= ou <>.
• Lorsque la sous-requête remplace une constante utilisée dans une expression
mettant en jeu les opérateurs IN, ALL ou ANY, elle doit obligatoirement renvoyer
une seule colonne.

SELECT … FROM …
WHERE … IN (SELECT … FROM …) ;
• Lorsque la sous-requête remplace une constante utilisée dans une expression
mettant en jeu l’opérateur EXISTS, elle peut renvoyer une table de n colonnes et m
lignes.

SELECT … FROM …
WHERE … EXISTS (SELECT … FROM …) ;
RQ19 Donner les livres dont les prix unitaires dépassent la moyenne des prix.
SELECT *
FROM livre
WHERE PU > (SELECT AVG(PU) FROM livre);

Le résultat de la sous requête


AVG
3,27

isbn titre pu stock

233-371 ALGORITHMES 3,60 100

livre
560-677 BASES DE DONNEES 4,90 185
isbn titre pu stock

233-371 ALGORITHMES 3,60 100 978-234 ORACLE DATA BASES 3,50 350

233-688 ABC DU BAC 2,00 234

377-655 BUREATIQUE ET 2,35 10


EXERCICES
560-677 BASES DE DONNEES 4,90 185

978-234 ORACLE DATA BASES 3,50 350


RQ20 Donner la liste des noms des lycées qui n’ont pas passé de commande.

SELECT Nom
FROM lycee ly
WHERE NOT EXISTS
(SELECT * FROM Commande C
WHERE ly.code_l =C.code_l);
lycée
ncmd date_cmd commande.code_l lycee.code_l code_l nom ville tel

L876 IBN CHARAF BEJA 78 67 890


C124 03/01/2007 L876 L876
L121 BACHA TUNIS
C125 11/11/2006 L876 L876
L124 BAB EL KAHDRA TUNIS
C133 07/03/2007 L876 L876 L136 HANNIBAL ARIANA 71 236 543

C121 01/10/2006 L121 L121 L156 SEJOUMI TUNIS

C214 10/04/2007 L124 L124 L306 NAPOLIS NABEUL 73 233 760

C215 11/05/2007 L124 L124 L320 TAHAR SAFAR SOUSSE 73 650 650

C123 25/06/2007 L136 L136 L326 SIDI BOU ALI SOUSSE 73 698 432

C126 29/04/2007 L136 L136 L330 BOUMARDESS SOUSSE 73 230 129

C143 15/09/2006 L136 L136 L415 MAJIDA SFAX 74 650 399


BOULILA
C156 16/09/2006 L156 L156

C256 15/11/2006 L156 L156

C356 02/01/2007 L156 L156

C310 12/12/2006 L330 L330 Nom


NAPOLIS
C319 31/01/2007 L330 L330
TAHAR SAFAR
C442 01/10/2006 L415 L415 SIDI BOU ALI
RQ21 Donner les commandes qui ont une date inférieure à chacune des
commandes du lycée ‘L121’.

SELECT *
FROM Commande
WHERE Date_cmd <
ALL
(SELECT date_cmd
FROM commande
WHERE code_l ="L121");

date_cmd code_l

01/10/2006 L121
ncmd date_cmd code_l
C124 03/01/2007 L876

C125 11/11/2006 L876

C133 07/03/2007 L876

C121 01/10/2006 L121

C214 10/04/2007 L124

C215 11/05/2007 L124

C123 25/06/2007 L136

C126 29/04/2007 L136

C143 15/09/2006 L136

C156 16/09/2006 L156

C256 15/11/2006 L156

C356 02/01/2007 L156

C310 12/12/2006 L330

C319 31/01/2007 L330


ncm
date_cmd code_l
C442 01/10/2006 L415 d
C143 15/09/2006 L136

C156 16/09/2006 L156


Opérateurs ensemblistes:

Union : L’opérateur UNION permet de fusionner deux sélections de tables pour


obtenir un ensemble de lignes égal à la réunion des lignes des deux sélections.
Les lignes communes n’apparaîtront qu’une seule fois.

Syntaxe :

Requête1
UNION
Requête2 ;

NB :
• Requête1 et Requête2 doivent avoir la même structure.
• Par défaut les doublons sont automatiquement éliminés.
• Pour conserver les doublons, il est possible d'utiliser une clause UNION ALL.
RQ21 Donner l’ensemble des lycées de Tunis et de Sousse qui ont des commandes.

SELECT ly.code_l, ly.Nom


FROM lycee as ly, Commande as C
WHERE ly.code_l= C.code_l
AND Ville="Tunis"
UNION
SELECT ly.code_l, ly.Nom
FROM lycee ly,Commande C
WHERE ly.code_l= C.code_l
AND Ville ="Sousse" ;
Requête  Requête
Requête1
Requête 2
code_l nom
code_l Nom
L121 BACHA code_l nom ville L121 BACHA
L124 BAB EL L330 BOUMARDESS SOUSSE
L124 BAB EL KAHDRA
KAHDRA
L330 BOUMARDESS SOUSSE
L124 BAB EL L156 SEJOUMI
KAHDRA
L330 BOUMARDESS
L156 SEJOUMI

L156 SEJOUMI

L156 SEJOUMI
APPLICATION n°1 :
Soit le schéma de la base de données suivant :
Agence(num_agence, Nom, ville, actif)
Client(Num_client, nom, ville)
Compte(num_compte, num_agence#, num_client#, solde)
Emprunt(Num_emprunt, Num_agence#,num_client#, montant )
Questions :
A) Créer les tables en SQL.
B) Ecrire les requêtes suivantes en SQL :
1) Liste des agences ayant des comptes-clients
2) Clients (nom)ayant un compte dans la Ville de “ Tanger ”
3) Clients (nom)ayant un compte ou un emprunt à “ Tanger ”
4) Clients (nom, ville)ayant un compte
5) Clients (nom, ville) ayant un compte à “Tétouan”
6) Clients (nom) ayant un compte dans une agence où “Claude” a un compte
7) Agences (nom) ayant un actif plus élevé que toutes les agences de “Fès”
8) Clients (nom) ayant un compte dans au-moins une agence de “ Fès ”
9) Emprunteurs (nom) de l'agence “Oujda” classés par ordre
alphabétique
10) Solde moyen des comptes-clients de chaque agence
11) Solde moyen des comptes-clients des agences dont le solde
moyen est > “10 000”
12) Nombre de clients habitant “ Agadir ”
13) Nombre de clients de l'agence “ Azrou ” n'ayant pas leur adresse
dans la table CLIENT
14) Insérer le n-uplet <Said, Rabat> dans la table CLIENT
15) Diminuer l'emprunt de tous les clients habitant “ Ouarzazate ” de
“5%”
16) Fermer les comptes de “Lina”
17) Supprimer de la table AGENCE toutes les agences sans client
SOLUTION DE L’APPLICATION N°1 :
A) Créer les tables en SQL :
CREATE TABLE AGENCE
(Num_Agence char (50), NOTNULL, PRIMARY KEY,
Nom char(50),
Ville char(50),
Actif char(25));

CREATE TABLE CLIENT


(Num_Client char (50), NOTNULL, PRIMARY KEY,
Nom char(50),
Ville char(50));
CREATE TABLE COMPTE
(Num_Compte char (50), NOTNULL, PRIMARY KEY,
Num_Agence char(50) FOREIGN KEY references AGENCE(Num_Agence),
Num_Client char(50) FOREIGN KEY references CLIENT (Num_Client),
Solde FLOAT(50));

CREATE TABLE EMPRUNT


(Num_Emprunt char (50), NOTNULL, PRIMARY KEY,
Num_Agence char(50) FOREIGN KEY references AGENCE(Num_Agence),
Num_Client char(50) FOREIGN KEY references CLIENT (Num_Client),
Montant FLOAT(50));
B) Ecrire les requêtes suivantes en SQL :

1. Liste des agences ayant des comptes-clients


select distinct Nom from AGENCE, COMPTE
where AGENCE.Num_Agence = COMPTE.Num_Agence;

2. Clients(nom) ayant un compte dans la Ville de “ Tanger ”


select CLIENT.Nom from CLIENT, AGENCE, COMPTE
where AGENCE.Num_Agence = COMPTE.Num_Agence
and CLIENT.Num_Client = COMPTE.Num_Client
and AGENCE.Ville = “ Tanger ”;
B) Ecrire les requêtes suivantes en SQL :

3. Clients (nom)ayant un compte ou un emprunt à “ Tanger ”


select CLIENT.Nom from CLIENT, AGENCE, COMPTE
where CLIENT.Num_Client = COMPTE.Num_Client
and AGENCE.Num_Agence = COMPTE.Num_Agence
and AGENCE.Ville = “ Tanger ”
union
select CLIENT.Nom from CLIENT, AGENCE, EMPRUNT
where CLIENT.Num_Client = EMPRUNT.Num_Client
and AGENCE.Num_Agence = EMPRUNT.Num_Agence
and AGENCE.Ville = “ Tanger ”;
4. Clients (nom, ville)ayant un compte

Première solution :

select Nom, Ville from CLIENT, COMPTE


where CLIENT.Num_Client = COMPTE. Num_Client;

Deuxième solution :

select Nom, Ville from CLIENT


where Num_Client in (select Num_Client from COMPTE);
5. Clients (nom, ville) ayant un compte à “Tétouan”
Première solution :

select CLIENT.Nom, CLIENT.Ville from CLIENT, AGENCE, COMPTE


where CLIENT.Num_Client = COMPTE. Num_Client
and AGENCE.Num_Agence = COMPTE.Num_Agence
and AGENCE.Nom = “ Tétouan ”;

Deuxième solution :

select Nom, Ville from CLIENT


where Num_Client in (
select Num_Client from COMPTE where Num_Agence in (
select Num_Agence from AGENCE where Nom = “Tétouan”));
6. Clients (nom)ayant un compte dans une agence où “Claude” a un compte

Première solution :

select Nom from CLIENT, COMPTE


where CLIENT.Num_Client = COMPTE.Num_Client and Num_Agence in (
select Num_Agence from CLIENT, COMPTE
where CLIENT.Num_Client = COMPTE.Num_Client and Nom = “Claude”);

Deuxième solution :

select Nom from CLIENT where Num_Client in (


select Num_Client from COMPTE where Num_Agence in (
select Num_Agence from CLIENT, COMPTE
where CLIENT.Num_Client = COMPTE.Num_Client and Nom = “Claude”));
7. Agences (nom) ayant un actif plus élevé que toutes les agences de “Fès”

select Nom from AGENCE where Actif > all (


select Actif from AGENCE where Ville = “Fès”);

8. Clients (nom) ayant un compte dans au-moins une agence de “ Fès ”

Première solution :

select CLIENT.Nom from CLIENT, COMPTE, AGENCE


where CLIENT.Num_Client = COMPTE.Num_Client
and COMPTE.Num_Agence = AGENCE.Num_Agence
and AGENCE.Ville = “ Fès ”;

Deuxième solution :
select Nom from CLIENT where Num_Client in (
select Num_Client from COMPTE where Num_Agence in (
select Num_Agence from AGENCE where Ville = “Fès”));
9. Emprunteurs (nom) de l'agence “Oujda” classés par ordre alphabétique

select Nom from CLIENT where Num_Client in (


select Num_Client from EMPRUNT where Num_Agence in (
select Num_Agence from AGENCE where Nom = “Oujda”))
order by Nom;

10. Solde moyen des comptes-clients de chaque agence

select Nom, avg(Solde) from AGENCE, COMPTE


where AGENCE.Num_Agence = COMPTE.Num_Agence
group by Nom;
11. Solde moyen des comptes-clients des agences dont le solde moyen
est > “10 000”

select Nom, avg(Solde) from AGENCE, COMPTE


where AGENCE.Num_Agence = COMPTE.Num_Agence
group by Nom
having avg(Solde) > 10000;

12. Nombre de clients habitant “ Agadir ”

select count(*) from CLIENT where Ville = “Agadir”;


13. Nombre de clients de l'agence “ Azrou ” n'ayant pas leur adresse dans la table
CLIENT

Première solution :
select count(*) from CLIENT, COMPTE, AGENCE
where Ville = NULL
and CLIENT.Num_Client = COMPTE.Num_Client
and COMPTE.Num_Agence = AGENCE.Num_Agence
and AGENCE.Nom = “Azrou”;

Deuxième solution :
select count(*) from CLIENT where Ville = NULL and Num_Client in (
select Num_Client from COMPTE where Num_Agence in (
select Num_Agence from AGENCE where Nom = “Azrou”));
14. Insérer le n-uplet <Said, Rabat> dans la table CLIENT

insert into CLIENT values (130765, “ Said ”, “Rabat”);

15. Diminuer l'emprunt de tous les clients habitant “ Ouarzazate ” de


“5%”

update EMPRUNT
set Montant = Montant * 0.95
where Num_Client in (
select Num_Client from CLIENT where Ville = “ Ouarzazate ”);
16. Fermer les comptes de “Lina”

Première solution :

delete from COMPTE where Num_Client in (


select Num_Client from CLIENT where Nom = “Lina”);

Deuxième solution :

delete from COMPTE


where COMPTE.Num_Client = CLIENT.Num_Client
and CLIENT.Nom = “ Lina ”);
17. Supprimer de la table AGENCE toutes les agences sans client

delete from AGENCE


where Num_Client not in (
select Num_Client from COMPTE where
COMPTE.Num_Agence = AGENCE.Num_Agence)
and
Num_Client not in (
select Num_Client from EMPRUNT
where EMPRUNT.Num_Agence = AGENCE.Num_Agence);

Vous aimerez peut-être aussi