0% ont trouvé ce document utile (0 vote)
21 vues7 pages

Devoir de SQL

Le document présente une série d'exercices SQL couvrant divers aspects de la gestion de bases de données, y compris des requêtes de sélection, d'insertion, de mise à jour et de suppression. Il aborde également la création de tables, les clés primaires et étrangères, ainsi que des exemples de décomposition de relations non conformes à la troisième forme normale. Les exercices sont organisés par thème, incluant des bases de données sur le transport, les boissons, l'université et une bibliothèque.

Transféré par

hawac12389
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues7 pages

Devoir de SQL

Le document présente une série d'exercices SQL couvrant divers aspects de la gestion de bases de données, y compris des requêtes de sélection, d'insertion, de mise à jour et de suppression. Il aborde également la création de tables, les clés primaires et étrangères, ainsi que des exemples de décomposition de relations non conformes à la troisième forme normale. Les exercices sont organisés par thème, incluant des bases de données sur le transport, les boissons, l'université et une bibliothèque.

Transféré par

hawac12389
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 PDF, TXT ou lisez en ligne sur Scribd

DEVOIR DE SQL :

Nom : DIALLO Prénom : Abdou

Classe : L3 électronique

Exo 01 :

1) SELECT code_ch FROM opere WHERE date_op=’09-09-01’


2) SELECT nom, prenom FROM malade WHERE code_mal IN (SELECT code_mal FROM occupe
WHERE date_deb=’05-03-01’)
3) SELECT code_ch, COUNT(*) FROM chirurg, opere WHERE chirurg.code_ch=opere.code_ch AND
date_op BETWEEN 09-05-01 AND 09-09-01 GROUP BY code_ch
4) SELECT nom FROM opere, chirurg WHERE chirurg.code_ch=opere.code_ch AND date_op IN
(SELECT date_op FROM chirurg, opere WHERE [Link]=’Med’ AND
chirurg.code_ch=opere.code_ch)

Exo 02 :

1- SELECT * FROM article WHERE prix_vente_art >= 2*prix_achat_art


2- SELECT * FROM article WHERE coul_art = ‘rouge’ AND poids_art > 100
3- SELECT * FROM article WHERE coul_art ≠ rouge AND pods_art ≤ 500
4- SELECT N°four FROM commande WHERE 09-05-01 ≤ date_cde ≤ 09-09-01 GROUP BY N°four
HAVING COUNT(*) > 10
5- SELECT coul_art, AVG(prix_vente_art) FROM article WHERE prix_achat_art ≥ 500 GROUP BY
coul_art
6- SELECT * FROM article WHERE poids_art < (SELECT poids_art FROM article WHERE N°art=’A02’)

7- SELECT N°art, nom_art FROM article WHERE coul_art = (SELECT coul_art FROM article WHERE
N°art=’A10’) AND poids_art ≥ (SELECT AVG(poids_art) FROM article)

8- SELECT nom_art FROM article WHERE prix_vente_art>(SELECT MIN(prix_vente_art) FROM article


WHERE coul_art=’blanche’

Exo 03 :
1- SELECT origine, N°bois FROM boisson WHERE date_fab=’09-09-2001’ AND concentration>10
ORDER BY origine ASC, N°bois DESC
2- SELECT nom FROM buveur, bus WHERE buveur.N°buv=bus.N°buv AND
bus.N°bois=boisson.N°bois AND [Link]=’Abricot’
3- SELECT N°bois FROM bus GROUP BY N°bois HAVING COUNT(*)>100
4- INSERT INTO boisson
5- DELETE boisson WHERE ‘Bendjima’ IN (SELECT nom FROM buveur, bus WHERE
boisson.N°bois=bus.N°bois AND bus.N°buv=buveur.N°buv)
6- UPDATE bus SET quantité=0 WHERE ‘Béchar’ IN (SELECT adresse FROM buveur WHERE
bus.N°buv=buveur.N°buv)

Exo 04 :
1- SELECT N°wagon FROM wagon WHERE type_wagon=’frigo’ AND etat=’libre’ AND
gare=’tours’
2- SELECT type_wagon FROM wagon WHERE N°wagon IN (SELECT N°wagon FROM train
WHERE N°train=’4002’
3- SELECT N°wagon, poids_vide, poids_marchandise FROM train, wagon, transport WHERE
train.N°wagon = wagon.N°wagon AND train.N°wagon = transport.N°wagon AND
train.N°train = ‘4002’
4- SELECT N°ligne FROM trafic GROUP BY N°ligne HAVING SET(jour) CONTAIN (SELECT jour
FROM trafic)
5- SELECT N°ligne FROM trafic GROUP BY N°ligne HAVING SET(jour) CONTAIN (‘lundi’,
‘jeudi’)
6- SELECT N°train, COUNT(N°wagon) FROM train GROUP BY N°train
7- SELECT N°train FROM train GROUP BY N°train HAVING COUNT(N°wagon) ≥ 100
8- SELECT gare FROM ligne WHERE rang = (SELECT MAX(rang) FROM ligne WHERE
N°ligne=’35’) AND N°ligne = ‘35’

Exo 05 :

1- Clés primaires : Etudiant⇒nom_etud Enseignant⇒nom_ens Faculte⇒nom_fac


Affectation⇒nom_etud, groupe Emploi_temps⇒nom_ens, jour, heure Clés étrangères :
Enseignant⇒nom_fac % à faculte Affectation⇒nom_etud % à etudiant
Emploi_temps⇒nom_ens % à enseignant
2- Création des tables en SQL : CREATE TABLE faculte (nom_fac char(20) not null, Localite
char(20), recteur char(15)) PRIMARY KEY nom_fac ; CREATE TABLE emploi_temps (nom_ens
char(15) not null, Groupe integer, matière char(10), Jour char(8) not null, heure char(15) not
null, Activite_pedag char(15), PRIMARY KEY(nom_ens, jour, heure), FORCEGN KEY nom_ens,
IDENTIFIES enseignant ; 3- Exprimer en SQL :
R1 :SELECT A.nom_etud, B.nom_etud FROM etudiant A, etudiant B WHERE [Link] = [Link]
AND A.nom_etud <> B.nom_etud

R2 : SELECT * FROM etudiant WHERE ville not IN (SELECT ville FROM etudiant WHERE
ville=’Béchar’

R3 : SELECT nom_etud, age_etud FROM etudiant WHERE nom_etud LIKE ‘%B’ AND nom_etud
IN (SELECT nom_etud FROM affectation WHERE groupe=4)

R4 : SELECT nom_ens, salaire FROM enseignant WHERE age_ens BETWEEN 35 AND 50 AND
salaire>(SELECT AVG(salaire) FROM enseignant)

R5 : SELECT nom_ens FROM emploi_temps WHERE matiere=’BDD’ AND nom_ens IN (SELECT


nom_ens FROM enseignant WHERE grade = ‘charge de cours’ AND age_ens <35 AND
nom_fac IN (SELECT nom_fac FROM faculte WHERE localite=’ORAN’ AND recteur=’Med’

Exo 06 :

1- SELECT * FROM client


2- SELECT nom, tel FROM client
3- SELECT * FROM client WHERE ville=’Béchar’
4- SELECT * FROM article WHERE prix_unit>150DA AND qte_stock ≤ 100 UNION SELECT *
FROM commande WHERE date_cde > 09-09-99
5- SELECT * FROM article WHERE prix_unit≥ 150 AND prix_unit≤ 200 UNION SELECT * FROM
commande WHERE date_cde BETWEEN 09-09-99 AND 30-01-00
6- SELECT * FROM client WHERE ville=’Béchar’ OR ville=’Oran’ OR ville=’Alger’ UNION SELECT *
FROM article WHERE prix_unit=150 OR prix_unit=200 OR prix_unit=300

Exo 07 :

1- SELECT N°voyage , A.places_disp , B.places_disp FROM vol A , vol B , voyages WHERE


A.N°vol = N°vol_all AND B.N°vol = N°vol_ret
2- SELECT COUNT(nom_hot) FROM hotels WHERE ville_hot = ‘Béchar’
3- SELECT SUM(lits_disp) FROM hotels WHERE ville_hot = ‘Béchar’ AND date = ’09-09-2002’
4- SELECT MIN(lits_disp) FROM hotels , voyages WHERE hotels.nom_hot = voyages.nom_hot
AND voyages.N°voyage = ‘113’ AND [Link] >= voyages.date_dep AND [Link] <=
[Link]
5- SELECT ville_hot , COUNT(nom_hot) FROM hotels GROUP BY ville_hot ;

Exo 08 :

1) SELECT * FROM client


2) SELECT * FROM client WHERE ville = ’Béchar’
3) SELECT DISTINCT N°four FROM command WHERE N°cl = ’C1’ ORDER BY N°four
4) SELECT * FROM commande WHERE Qte BETWEEN 300 AND 750
5) SELECT * FROM commande WHERE Qte = Qte
6) SELECT N°cl FROM client WHERE SUBSTR (ville, 1, 1) = ’B’
7) SELECT N°four, N°cl FROM fournisseur, client WHERE [Link] = [Link]
8) SELECT N°four, N°cl FROM fournisseur, client WHERE NOT [Link] = [Link]
9) SELECT DISTINCT N°prod FROM commande, fournisseur WHERE commande.N°four =
fournisseur.N°four AND ville = ’Béchar’
10) SELECT DISTINCT N°prod FROM commande, fournisseur, client WHERE
commande.N°four=fournisseur.N°four AND commande.N°cl = client.N°cl AND
[Link] = ’Béchar’ AND [Link] = ’Oran’
11) SELECT DISTINCT [Link], [Link] FROM commande, fournisseur, client WHERE
commande.N°four = fournisseur.N°four AND commande.N°cl = client.N°cl
12) SELECT DISTINCT N°prod FROM commande, fournisseur, client WHERE commande.N°four =
fournisseur.N°four AND commande.N°cl = client.N°cl AND [Link] = [Link] ;

Exo 09 :

1) SELECT count(N°etud) FROM etudiant


2) SELECT max(note),min(note) FROM evalue
3) SELECT libelle_mat, nom_etud, avg(coeff_mat*note) FROM etudiant, matiere,
evaluer WHERE etudiant.N°etud=evaluer.N°etud AND
matiere.code_mat=evaluer.code_mat GROUP BY libelle_mat, nom_etud
4) SELECT code_mat, avg(coeff_mat*note) FROM matiere, evaluer WHERE
matiere.code_mat=evaluer.code_mat GROUP BY code_mat
5) SELECT N°etud , avg(coeff_mat*note) FROM etudiant , matiere , evaluer WHERE
etudiant.N°etud=evaluer.N°etud AND matiere.code_mat=evaluer.code_mat GROUP
BY N°etud
6) SELECT avg(coeff_mat*note) FROM matiere , evaluer WHERE matiere.code_mat =
evaluer.code_mat

7) SELECT nom_etud , avg(coeff_mat*note) FROM etudiant , matiere , evaluer WHERE


etudiant.N°etud=evaluer.N°etud AND matiere.code_mat=evaluer.code_mat GROUP
BY nom_etud HAVING avg(coeff_mat*note)>(SELECT avg(coeff_mat*note) FROM
matiere, evaluer WHERE matiere.code_mat=evaluer.code_mat)

Exo 10 :

1) SELECT count(N°pilote) FROM pilote WHERE adresse_pil=’Béchar’


2) SELECT SUM(nbre_places) FROM avion
3) SELECT N°vol FROM vol WHERE N°pilote IN (SELECT N°pilote FROM pilote WHERE
adresse_pil=’Béchar’)
4) SELECT nom_pil FROM pilote, vol WHERE pilote.N°pilote=vol.N°pilote AND
N°avion=all(SELECT N°avion FROM avion) Exercices supplémentaires :
Nb : des alias sont utilisés dans les exercices suivants.

Exercice 1 : Relation Transport

1. La relation transport est-elle en 3FN ? Sinon, décomposez-la.

La relation transport n’est pas en 3FN à cause des dépendances fonctionnelles transitives.

La décomposition :

1. WAGON(N°wagon, type_wagon, poids_vide, capacité, état, gare_destination)

2. LIGNE(N°ligne, gare, rang_ligne)

3. TRAIN(N°train, N°ligne, date)

4. TRANSPORT(N°train, N°wagon, rang_ligne) – relation résiduelle après suppression des autres


attributs

Requêtes SQl :

1. Liste des lignes qui partent de la gare d’Alger rangées par ordre croissant :

SELECT N°ligne FROM LIGNE WHERE gare = ‘Alger’ ORDER BY N°ligne ASC ;

2. Pour chaque wagon sa capacité et son poids vide

SELECT N°wagon, capacité, poids_vide FROM WAGON ;

3. Pour chaque wagon du train 2300, son numéro, sa capacité et son poids vide
SELECT w.N°wagon, [Link]é, w.poids_vide FROM WAGON w JOIN TRANSPORT t
ONw.N°wagon=t.N°wagon WHERE t.N°train = 2300 ;
4. Liste des numéros de wagon qui partent d’Oran

SELECT w.N°wagon, [Link]é FROM WAGON w JOIN TRANSPORT t ON w.N°wagon = t.N°wagon


JOIN TRAIN tr ON t.N°train = tr.N°train JOIN LIGNE l ON tr.N°ligne = l.N°ligne WHERE [Link] = ‘Oran’
AND [Link] = ’09-09-01’ ; le 09-09-01 et leurs capacités

5. Numéros des wagons chargés du train 4002 ainsi que leur type

SELECT w.N°wagon, w.type_wagon FROM WAGON w JOIN TRANSPORT t ON w.N°wagon = t.N°wagon


WHERE t.N°train = 4002 AND w.état = ‘chargé’ ;

Exercice 2 : Base de données Boissons Création des tables

CREATE TABLE boisson ( Code_boiss INT PRIMARY KEY, Nom_boiss VARCHAR(50), Couleur
VARCHAR(20), Degré DECIMAL(5,2), Année INT ) ;

CREATE TABLE bus ( Code_buv INT, Code_boiss INT, Quantité INT, PRIMARY KEY (code_buv,
code_boiss), FOREIGN KEY (code_boiss) REFERENCES boisson(code_boiss) ) ;

Requêtes SQL :

1. Noms des boissons sans doublons

SELECT DISTINCT nom_boiss FROM boisson ;

2. Buveurs ayant bu des boissons dont le nom commence par ‘B’, degré inconnu

SELECT DISTINCT b.nom_buv FROM bureau b JOIN bus bu ON b.code_buv = bu.code_buv JOIN
boisson bo ON bu.code_boiss = bo.code_boiss WHERE bo.nom_boiss LIKE ‘B%’ AND [Link]é IS NULL
;

3. Noms des boissons bues par un buveur nommé ‘An Indus’

SELECT DISTINCT bo.nom_boiss FROM boisson bo JOIN bus bu ON bo.code_boiss = bu.code_boiss


JOIN bureau b ON bu.code_buv = b.code_buv WHERE b.nom_buv = ‘An Indus’ ;

4. Moyenne des degrés pour chaque boisson

SELECT nom_boiss, AVG(degré) as moyenne_degre FROM boisson GROUP BY nom_boiss ;

5. Insérer les producteurs de la région de Béchar ayant produit des boissons de 2001 dans la relation
buveur

INSERT INTO bureau (code_buv, nom_buv, ville) SELECT DISTINCT p.code_prod, p.nom_prod,
p.région FROM producteur p JOIN produire pr ON p.code_prod = pr.code_prod JOIN boisson b ON
pr.code_boiss = b.code_boiss WHERE p.région = ‘Béchar’ AND [Link]ée = 2001 ;

Exercice 3 : Base de données Université

Requêtes SQl :

1. Trouver le nom de la fac à qui appartient l’étudiant ‘Omar’

SELECT f.nom_fac FROM fac f JOIN appart_fac af ON f.nom_fac = af.nom_fac JOIN affectation a ON
[Link] = [Link] WHERE a.nom_etud = ‘Omar’ ;

2. Trouver les salaires de tous les enseignants


SELECT sal FROM enseignant ;

3. Trouver le salaire et l’âge pour l’enseignant M*[4] âgé de 40 ans


SELECT sal, age FROM enseignant WHERE nom_cns LIKE ‘M*[4]’ AND age = 40 ;

Exercice 4 : Base de données Bibliothèque

Requêtes SQL :

1. Titres et catégories des films enregistrés sur la cassette numéro 3, triés par ordre alphabétique

SELECT f.titre_film, [Link]égorie FROM film f WHERE f.N°cassette = 3 ORDER BY f.titre_film ASC ;

2. Livres qui ont été empruntés et combien de fois, triés par nombre d’emprunts

SELECT l.titre_livre, COUNT(el.code_livre) as nombre_emprunts FROM livre l JOIN emprunter_livre el


ON l.code_livre = el.code_livre GROUP BY l.titre_livre ORDER BY nombre_emprunts DESC, l.titre_livre
ASC ;

3. Films empruntés plusieurs fois par une même personne

SELECT e.N°emp, e.nom_emp, [Link]énom_emp, f.titre_film FROM emprunteur e JOIN emprunter_film


ef ON e.N°emp = ef.N°emp JOIN film f ON ef.N°film = f.N°film GROUP BY e.N°emp, f.N°film HAVING
COUNT(*) > 1 ;

4. Prix moyen des cassettes préenregistrées

SELECT AVG(prix_achat) as prix_moyen FROM cassette ;

5. Cassettes disponibles avec leurs films

SELECT DISTINCT c.N°cassette, f.titre_film FROM cassette c LEFT JOIN film f ON c.N°cassette =
f.N°cassette WHERE c.état = ‘disponible’ ORDER BY c.N°cassette ASC, f.titre_film ASC ;

Exercice 5 : Base de données Département

1. Clés primaires et étrangères

- Département : Clé primaire – N°dep

- Employé : Clé primaire – N°emp, Clé étrangère – N°dep référence Département(N°dep)

- Projet : Clé primaire – N°proj, Clé étrangère – N°dep référence Département(N°dep)

- Historique : Clé primaire – (N°proj, N°emp, date), Clés étrangères – N°proj référence Projet(N°proj),
N°emp référence Employé(N°emp)

2. Création des tables

CREATE TABLE Projet ( N°proj INT PRIMARY KEY, Titre VARCHAR(100), Budget_proj DECIMAL(12,2),
N°dep INT, FOREIGN KEY (N°dep) REFERENCES Département(N°dep) ) ;

CREATE TABLE Historique ( N°proj INT, N°emp INT, Date DATE, Salaire DECIMAL(10,2), PRIMARY KEY
(N°proj, N°emp, date), FOREIGN KEY (N°proj) REFERENCES Projet(N°proj), FOREIGN KEY (N°emp)
REFERENCES Employé(N°emp) ) ;

Requêtes SQL

Employés habitant dans la même ville que l’employé N°113

SELECT e1.N°emp FROM Employé e1 JOIN Employé e2 ON [Link] = [Link] WHERE e2.N°emp = 113
AND e1.N°emp != 113

Villes des employés ayant participé au projet ‘Bases de données’

SELECT DISTINCT [Link] FROM Employé e JOIN Historique h ON e.N°emp = h.N°emp JOIN Projet p ON
h.N°proj = p.N°proj WHERE [Link] = ‘Bases de données’ ;

Budget le plus élevé des projets du département N°09

SELECT MAX(budget_proj) FROM Projet WHERE N°dep = 9 ; Supprimer le projet ‘intelligence


artificielle’ DELETE FROM Projet WHERE titre = ‘intelligence artificielle’ ;

Exercice 6 : Table Étudiant

Résultats des Requêtes

1. `SELECT nom FROM étudiant` :

Roda

Oma

r Méliani

2. `SELECT age FROM étudiant WHERE ville = ‘Béchar’` :

20

3. `SELECT nom, ville FROM stagiaire WHERE age>21` :

(En supposant que « stagiaire » est une erreur et devrait être « étudiant », et comme aucun étudiant
n’a plus de 21 ans, le résultat serait vide2

4. `SELECT nom FROM stagiaire INTERSECT SELECT nom FROM étudiant` :

(Cette requête retournerait les noms présents dans les deux tables, mais comme nous n’avons pas la
table stagiaire, on ne peut pas déterminer le résultat)

5. `SELECT count(*) FROM étudiant` :

Vous aimerez peut-être aussi