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 `PRET`–`LIVRES`–`LECTEURS`).
Voir la correction commentéeAprès avoir posé votre démarche

1.
```sql
SELECT Titre, NomAuteur
FROM LIVRES
WHERE ValeurLV > 50;
```

2.
```sql
SELECT NomLE
FROM LECTEURS
WHERE VilleLE = 'Sfax';
```

3.
```sql
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

```sql
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}}

On fixe d’abord le schéma (représentation textuelle), puis on écrit les commandes SQL (LDD ou LMD) en respectant les contraintes et l’intégrité référentielle — démarche des devoirs SI de bases de données.

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.
```sql
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.