Masar
Masar
Bac Tunisie
Entraîner la reconnaissance
BD-DBases de données et SQL

Requêtes SELECT — projection, sélection, jointure simple

Idée directrice

Partie LMD : écrire des requêtes SQL SELECT sur le schéma bibliothèque attesté (i-s1-04). Pas d’interface graphique : la réponse est le texte SQL.

Signature de reconnaissance — l'énoncé se trahit ainsi

« Écrire les commandes SQL »

« requête »

schéma LIVRES / PRET / LECTEURS

Sujet principal

Exercice — dans l'esprit des sujets du bac

6 questionsCorrigé masqué

Schéma :

  • LIVRES (NumLV, Titre, NomAuteur, ValeurLV, NumED#)
  • LECTEURS (NumLE, NomLE, AdrLE, VilleLE)
  • PRET (NumLV#, NumLE#, DateP, DateRet)
  1. Écrire la requête SQL listant le titre et l’auteur de tous les livres dont la valeur ValeurLV est strictement supérieure à 50.
  2. Écrire la requête donnant le nom des lecteurs habitant la ville 'Sfax'.
  3. Écrire une jointure listant Titre du livre et NomLE du lecteur pour tous les prêts effectués le '2024-01-15' (jointure PRETLIVRESLECTEURS).
Voir la correction commentéeAprès avoir posé votre démarche

1.

SELECT Titre, NomAuteur
FROM LIVRES
WHERE ValeurLV > 50;

2.

SELECT NomLE
FROM LECTEURS
WHERE VilleLE = 'Sfax';

3.

SELECT L.Titre, R.NomLE
FROM PRET P, LIVRES L, LECTEURS R
WHERE P.NumLV = L.NumLV
  AND P.NumLE = R.NumLE
  AND P.DateP = '2024-01-15';

(Équivalent avec JOIN … ON.) SELECT + WHERE + jointure sur FK\boxed{\text{SELECT + WHERE + jointure sur FK}}

Exercices d'entraînement — une nuance à la fois

Entraînement 01 / 02

Drill BD-D.1 — SELECT simple sur Fichiers

1 questionCorrigé masqué

Table Fichiers (CodeF, NomF, Extension, TypeF, Taille, Datcreat). Écrire la requête SQL listant le nom et la taille des fichiers de type 'W' dont la taille dépasse 20 Ko.

Voir la correction commentéeAprès avoir posé votre démarche

SELECT NomF, Taille
FROM Fichiers
WHERE TypeF = 'W' AND Taille > 20;

On projette deux colonnes et on combine deux conditions de sélection. SELECT NomF, Taille  TypeF=’W’ AND Taille>20\boxed{\text{SELECT NomF, Taille … TypeF='W' AND Taille>20}}

Entraînement 02 / 02

Drill BD-D.2 — jointure emprunt / élève / livre

2 questionsCorrigé masqué

Tables : Eleve(num_ele, nom_pre, …), Livre(code_liv, titre, …), Emprunt(num_emp, num_ele#, code_liv#, date_emp, …).

  1. Écrire la requête listant nom_pre et titre pour tous les emprunts du '2023-05-10'.
  2. Pourquoi une jointure est-elle nécessaire ici ?
Voir la correction commentéeAprès avoir posé votre démarche

1.

SELECT E.nom_pre, L.titre
FROM Emprunt M, Eleve E, Livre L
WHERE M.num_ele = E.num_ele
  AND M.code_liv = L.code_liv
  AND M.date_emp = '2023-05-10';

2. Les noms et titres ne sont pas dans Emprunt : seules les FK y figurent ; la jointure relie aux tables mères pour afficher les libellés. jointure Emprunt–Eleve–Livre\boxed{\text{jointure Emprunt–Eleve–Livre}}

Méthode / Automatismes
  • SELECT colonnes FROM table WHERE condition.
  • Jointure : égalités de FK = PK des tables mères.
  • Comparer d’abord les noms de colonnes du schéma avant d’écrire.
Pièges classiques
  • Oublier le lien PRET–LIVRES ou PRET–LECTEURS (produit cartésien).
  • Filtrer sur une colonne absente de la table du FROM.
  • Utiliser = pour une chaîne sans quotes.