Exercices SQL corrigés : les sous-requêtes
Mis à jour le
Une sous-requête est une requête dans une requête : une valeur, une liste (IN) ou une table. Ces 15 exercices vont du niveau 2 au niveau 8 ; ils utilisent la syntaxe de SQLite, le moteur SQL de SpeedQL.
Conseil : Écris d’abord la sous-requête seule pour vérifier son résultat, puis intègre-la.
Relire la fiche « Sous-requêtes » de l’aide-mémoire
Exercice 1
Affiche le nom des employés dont le salaire est supérieur au salaire moyen de tous les employés.
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Finance | 32000 |
| 2 | Bob | IT | 41000 |
| 3 | Claire | Finance | 38000 |
| 4 | David | HR | 29000 |
| 5 | Emma | IT | 50000 |
| 6 | Farid | IT | 47000 |
| 7 | Gaelle | HR | 33000 |
| 8 | Hugo | Finance | 44000 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …
FROM …
WHERE … > (SELECT AVG(…) FROM …)Voir la correction
SELECT name
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);Résultat attendu (4 lignes) :
| name |
|---|
| Bob |
| Emma |
| Farid |
| Hugo |
Exercice 2
Affiche le nom des clients qui n'ont passé aucune commande.
| id | name | city |
|---|---|---|
| 1 | Alice | Paris |
| 2 | Bruno | Lyon |
| 3 | Chloe | Paris |
| 4 | Dylan | Nantes |
| id | customer_id | amount |
|---|---|---|
| 1 | 1 | 120 |
| 2 | 1 | 80 |
| 3 | 2 | 200 |
| 4 | 3 | 50 |
| 5 | 3 | 75 |
| 6 | 3 | 30 |
Voir l’indice
Notions à utiliser : WHERE (filtres), Sous-requêtes.
Structure de la requête :
SELECT …
FROM …
WHERE … NOT IN (SELECT … FROM …)Voir la correction
SELECT name
FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);Résultat attendu (1 ligne) :
| name |
|---|
| Dylan |
Exercice 3
Affiche le nom des employés dont le salaire est supérieur au salaire moyen de leur propre département.
| id | name | department | salary |
|---|---|---|---|
| 1 | Alice | Finance | 32000 |
| 2 | Bob | IT | 41000 |
| 3 | Claire | Finance | 38000 |
| 4 | David | HR | 29000 |
| 5 | Emma | IT | 50000 |
| 6 | Farid | IT | 47000 |
| 7 | Gaelle | HR | 33000 |
| 8 | Hugo | Finance | 44000 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …
FROM … …
WHERE … > (SELECT AVG(…) FROM … WHERE … = …)Voir la correction
SELECT name
FROM employees e
WHERE salary > (SELECT AVG(salary) FROM employees WHERE department = e.department);Résultat attendu (4 lignes) :
| name |
|---|
| Emma |
| Farid |
| Gaelle |
| Hugo |
Exercice 4
Affiche le code et la ville des aéroports où n'arrive aucun vol.
| code | city | country |
|---|---|---|
| CDG | Paris | France |
| LYS | Lyon | France |
| MAD | Madrid | Spain |
| LIS | Lisbon | Portugal |
| FCO | Rome | Italy |
| BER | Berlin | Germany |
| NCE | Nice | France |
| id | airline | origin | dest | departs | duration_min | price | seats_sold | capacity |
|---|---|---|---|---|---|---|---|---|
| 1 | SkyJet | CDG | MAD | 2025-06-01 08:10 | 125 | 89 | 150 | 180 |
| 2 | AirNova | CDG | LIS | 2025-06-01 11:40 | 155 | 120 | 160 | 170 |
| 3 | BlueWing | LYS | FCO | 2025-06-02 07:30 | 95 | 75 | 110 | 150 |
| 4 | SkyJet | MAD | CDG | 2025-06-02 18:20 | 120 | 95 | 170 | 180 |
| 5 | AirNova | BER | CDG | 2025-06-03 09:05 | 110 | 105 | 140 | 160 |
| 6 | BlueWing | NCE | BER | 2025-06-03 13:50 | 130 | 140 | 90 | 150 |
| 7 | SkyJet | CDG | FCO | 2025-06-04 06:45 | 135 | 99 | 175 | 180 |
| 8 | AirNova | LIS | MAD | 2025-06-04 16:15 | 75 | 65 | 60 | 120 |
| 9 | BlueWing | FCO | LYS | 2025-06-05 20:30 | 100 | 82 | 130 | 150 |
| 10 | SkyJet | CDG | BER | 2025-06-05 10:00 | 105 | 110 | 120 | 180 |
| 11 | AirNova | MAD | LIS | 2025-06-06 12:25 | 80 | 70 | 95 | 120 |
| 12 | BlueWing | LYS | MAD | 2025-06-06 15:40 | 115 | 79 | 100 | 150 |
Voir l’indice
Notions à utiliser : WHERE (filtres), Sous-requêtes.
Structure de la requête :
SELECT …, …
FROM …
WHERE … NOT IN (SELECT … FROM …)Voir la correction
SELECT code, city
FROM airports
WHERE code NOT IN (SELECT dest FROM flights);Résultat attendu (1 ligne) :
| code | city |
|---|---|
| NCE | Nice |
Exercice 5
Affiche le nom et le département du mieux payé de chaque département (sous-requête corrélée).
| id | name | department | salary | manager_id | hired |
|---|---|---|---|---|---|
| 1 | Alice | Finance | 52000 | NULL | 2015-03-01 |
| 2 | Bob | IT | 41000 | 1 | 2018-06-15 |
| 3 | Claire | Finance | 38000 | 1 | 2019-01-10 |
| 4 | David | HR | 29000 | 1 | 2020-09-01 |
| 5 | Emma | IT | 50000 | 2 | 2017-11-20 |
| 6 | Farid | IT | 47000 | 2 | 2021-02-14 |
| 7 | Gaelle | HR | 33000 | 4 | 2022-05-30 |
| 8 | Hugo | Finance | 44000 | 3 | 2016-08-08 |
| 9 | Iris | IT | 47000 | 5 | 2023-01-09 |
| 10 | Jules | Finance | 44000 | 3 | 2024-03-18 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …, …
FROM …
WHERE … = (SELECT MAX(…) FROM … … WHERE … = …)Voir la correction
SELECT name, department
FROM staff
WHERE salary = (SELECT MAX(salary) FROM staff s WHERE s.department = staff.department);Résultat attendu (3 lignes) :
| name | department |
|---|---|
| Alice | Finance |
| Emma | IT |
| Gaelle | HR |
Exercice 6
Affiche le titre des films dont la note dépasse la note moyenne des films de leur propre genre.
| id | title | genre | year | duration | rating | director_id |
|---|---|---|---|---|---|---|
| 1 | Night Train | Thriller | 2015 | 118 | 7.8 | 1 |
| 2 | Blue Harbor | Drama | 2018 | 102 | 7.1 | 2 |
| 3 | Paper Moon City | Comedy | 2012 | 95 | 6.4 | 5 |
| 4 | Silent Peak | Drama | 2020 | 131 | 8.2 | 3 |
| 5 | Last Signal | Sci-Fi | 2019 | 142 | 7.5 | 1 |
| 6 | Summer Keys | Comedy | 2016 | 88 | 5.9 | 4 |
| 7 | Iron Garden | Sci-Fi | 2021 | 125 | 8 | 3 |
| 8 | Dust and Gold | Western | 2014 | 110 | 6.8 | 2 |
| 9 | The Quiet Hour | Drama | 2022 | 97 | 7.4 | 5 |
| 10 | Deep Current | Thriller | 2017 | 105 | 6.9 | NULL |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT title
FROM movies m
WHERE rating > (SELECT AVG(rating) FROM movies x WHERE x.genre = m.genre);Résultat attendu (4 lignes) :
| title |
|---|
| Night Train |
| Paper Moon City |
| Silent Peak |
| Iron Garden |
Exercice 7
Affiche le nom et le nombre de buts des joueurs qui ont marqué plus que la moyenne des joueurs de leur équipe.
| id | name | team_id | position | goals |
|---|---|---|---|---|
| 1 | Alex Moreau | 1 | FW | 9 |
| 2 | Bilal Sow | 1 | MF | 4 |
| 3 | Carl Weber | 2 | FW | 7 |
| 4 | Diego Ruiz | 2 | DF | 1 |
| 5 | Eli Novak | 3 | FW | 6 |
| 6 | Femi Adeyemi | 4 | FW | 11 |
| 7 | Goran Petrov | 4 | GK | 0 |
| 8 | Hugo Lamy | 5 | MF | 5 |
| 9 | Ivan Kral | 5 | DF | 2 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …, …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT name, goals
FROM players p
WHERE goals > (SELECT AVG(goals) FROM players x WHERE x.team_id = p.team_id);Résultat attendu (4 lignes) :
| name | goals |
|---|---|
| Alex Moreau | 9 |
| Carl Weber | 7 |
| Femi Adeyemi | 11 |
| Hugo Lamy | 5 |
Exercice 8
Affiche le titre des chansons plus longues que la durée moyenne des chansons de leur artiste.
| id | title | artist_id | genre | duration_s | released |
|---|---|---|---|---|---|
| 1 | Glass Heart | 1 | Pop | 214 | 2019-04-12 |
| 2 | Low Tide | 1 | Pop | 198 | 2021-06-01 |
| 3 | Rust | 2 | Rock | 256 | 2008-09-30 |
| 4 | Wires | 2 | Rock | 301 | 2015-02-14 |
| 5 | Sunday Market | 3 | Afrobeat | 233 | 2020-11-20 |
| 6 | Palm Wine | 3 | Afrobeat | 245 | 2022-03-03 |
| 7 | Alma | 4 | Latin | 189 | 2013-07-07 |
| 8 | Brisa | 4 | Pop | 205 | 2018-05-25 |
| 9 | Night Drive | 5 | Electro | 276 | 2021-10-10 |
| 10 | Pulse | 5 | Electro | 230 | 2023-01-15 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT title
FROM songs s
WHERE duration_s > (SELECT AVG(duration_s) FROM songs x WHERE x.artist_id = s.artist_id);Résultat attendu (5 lignes) :
| title |
|---|
| Glass Heart |
| Wires |
| Palm Wine |
| Brisa |
| Night Drive |
Exercice 9
Affiche la ville, le jour et la température maximale des relevés plus chauds que la moyenne des maximales de leur ville.
| id | city | day | temp_max | temp_min | rain_mm |
|---|---|---|---|---|---|
| 1 | Paris | 2025-07-01 | 24 | 15 | 0 |
| 2 | Paris | 2025-07-02 | 27 | 17 | 0 |
| 3 | Paris | 2025-07-03 | 22 | 16 | 4.5 |
| 4 | Paris | 2025-07-04 | 19 | 14 | 12 |
| 5 | Paris | 2025-07-05 | 23 | 13 | 0 |
| 6 | Lyon | 2025-07-01 | 26 | 16 | 0 |
| 7 | Lyon | 2025-07-02 | 29 | 18 | 0 |
| 8 | Lyon | 2025-07-03 | 31 | 19 | 0 |
| 9 | Lyon | 2025-07-04 | 24 | 17 | 8.5 |
| 10 | Lyon | 2025-07-05 | 22 | 15 | 3 |
| 11 | Marseille | 2025-07-01 | 30 | 21 | 0 |
| 12 | Marseille | 2025-07-02 | 32 | 22 | 0 |
| 13 | Marseille | 2025-07-03 | 33 | 23 | 0 |
| 14 | Marseille | 2025-07-04 | 29 | 21 | 0 |
| 15 | Marseille | 2025-07-05 | 28 | 20 | 0 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …, …, …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT city, day, temp_max
FROM readings r
WHERE temp_max > (SELECT AVG(temp_max) FROM readings x WHERE x.city = r.city);Résultat attendu (6 lignes) :
| city | day | temp_max |
|---|---|---|
| Paris | 2025-07-01 | 24 |
| Paris | 2025-07-02 | 27 |
| Lyon | 2025-07-02 | 29 |
| Lyon | 2025-07-03 | 31 |
| Marseille | 2025-07-02 | 32 |
| Marseille | 2025-07-03 | 33 |
Exercice 10
Affiche le nom, la catégorie et le prix des produits plus chers que la moyenne des produits de leur catégorie.
| id | name | category | price |
|---|---|---|---|
| 1 | Desk Lamp | Home | 35 |
| 2 | Coffee Mug | Kitchen | 12 |
| 3 | Notebook | Office | 6 |
| 4 | Office Chair | Office | 149 |
| 5 | Kettle | Kitchen | 45 |
| 6 | Cushion | Home | 22 |
| 7 | Stapler | Office | 9 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …, …, …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT name, category, price
FROM products p
WHERE price > (SELECT AVG(x.price) FROM products x WHERE x.category = p.category);Résultat attendu (3 lignes) :
| name | category | price |
|---|---|---|
| Desk Lamp | Home | 35 |
| Office Chair | Office | 149 |
| Kettle | Kitchen | 45 |
Exercice 11
Affiche le nom, l'équipe et le taux des développeurs dont le taux dépasse la moyenne de leur équipe.
| id | name | team | rate |
|---|---|---|---|
| 1 | Ana | Web | 55 |
| 2 | Bo | Web | 48 |
| 3 | Cleo | Data | 62 |
| 4 | Dan | Data | 58 |
| 5 | Eve | Ops | 50 |
| 6 | Finn | Ops | 45 |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …, …, …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT name, team, rate
FROM devs d
WHERE rate > (SELECT AVG(x.rate) FROM devs x WHERE x.team = d.team);Résultat attendu (3 lignes) :
| name | team | rate |
|---|---|---|
| Ana | Web | 55 |
| Cleo | Data | 62 |
| Eve | Ops | 50 |
Exercice 12
Affiche le numéro, le compte et le montant des opérations dont le montant dépasse la moyenne des opérations de leur compte.
| id | account_id | made_on | amount | label |
|---|---|---|---|---|
| 1 | 1 | 2025-01-02 | 2500 | salary |
| 2 | 1 | 2025-01-05 | -60 | groceries |
| 3 | 1 | 2025-01-12 | -800 | rent |
| 4 | 2 | 2025-01-15 | 500 | transfer |
| 5 | 3 | 2025-01-03 | 1900 | salary |
| 6 | 3 | 2025-01-20 | -120 | groceries |
| 7 | 3 | 2025-02-01 | -950 | rent |
| 8 | 4 | 2025-01-25 | 2100 | salary |
| 9 | 4 | 2025-02-03 | -45 | restaurant |
| 10 | 1 | 2025-02-02 | 2600 | salary |
| 11 | 1 | 2025-02-06 | -75 | groceries |
| 12 | 5 | 2025-02-10 | 30 | interest |
| 13 | 2 | 2025-02-15 | 500 | transfer |
| 14 | 4 | 2025-02-18 | -600 | rent |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, Sous-requêtes.
Structure de la requête :
SELECT …, …, …
FROM … …
WHERE … > (SELECT AVG(…) FROM … … WHERE … = …)Voir la correction
SELECT id, account_id, amount
FROM transactions t
WHERE amount > (SELECT AVG(x.amount) FROM transactions x WHERE x.account_id = t.account_id);Résultat attendu (4 lignes) :
| id | account_id | amount |
|---|---|---|
| 1 | 1 | 2500 |
| 5 | 3 | 1900 |
| 8 | 4 | 2100 |
| 10 | 1 | 2600 |
Exercice 13
Pour chaque compte qui a des dépenses, affiche le numéro du compte, le titulaire, la date, le montant et le libellé de sa plus grosse dépense (en cas d'égalité, toutes les dépenses ex æquo).
| id | owner | city | opened | kind |
|---|---|---|---|---|
| 1 | Alice | Paris | 2021-03-01 | current |
| 2 | Alice | Paris | 2022-06-15 | savings |
| 3 | Bruno | Lyon | 2020-09-10 | current |
| 4 | Chloe | Lyon | 2023-01-20 | current |
| 5 | David | Nice | 2019-11-05 | savings |
| 6 | Emma | Nice | 2024-04-01 | current |
| id | account_id | made_on | amount | label |
|---|---|---|---|---|
| 1 | 1 | 2025-01-02 | 2500 | salary |
| 2 | 1 | 2025-01-05 | -60 | groceries |
| 3 | 1 | 2025-01-12 | -800 | rent |
| 4 | 2 | 2025-01-15 | 500 | transfer |
| 5 | 3 | 2025-01-03 | 1900 | salary |
| 6 | 3 | 2025-01-20 | -120 | groceries |
| 7 | 3 | 2025-02-01 | -950 | rent |
| 8 | 4 | 2025-01-25 | 2100 | salary |
| 9 | 4 | 2025-02-03 | -45 | restaurant |
| 10 | 1 | 2025-02-02 | 2600 | salary |
| 11 | 1 | 2025-02-06 | -75 | groceries |
| 12 | 5 | 2025-02-10 | 30 | interest |
| 13 | 2 | 2025-02-15 | 500 | transfer |
| 14 | 4 | 2025-02-18 | -600 | rent |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, JOIN, Sous-requêtes.
Structure de la requête :
SELECT …, …, …, …, …
FROM … …
JOIN … … ON … = …
WHERE … < … AND … = (SELECT MIN(…) FROM … … WHERE … = …)Voir la correction
SELECT a.id, a.owner, t.made_on, t.amount, t.label
FROM transactions t
JOIN accounts a ON a.id = t.account_id
WHERE t.amount < 0 AND t.amount = (SELECT MIN(x.amount) FROM transactions x WHERE x.account_id = t.account_id);Résultat attendu (3 lignes) :
| id | owner | made_on | amount | label |
|---|---|---|---|---|
| 1 | Alice | 2025-01-12 | -800 | rent |
| 3 | Bruno | 2025-02-01 | -950 | rent |
| 4 | Chloe | 2025-02-18 | -600 | rent |
Exercice 14
Pour chaque réalisateur qui a au moins un film, affiche son nom, le titre de son film le plus long et la durée de ce film.
| id | title | genre | year | duration | rating | director_id |
|---|---|---|---|---|---|---|
| 1 | Night Train | Thriller | 2015 | 118 | 7.8 | 1 |
| 2 | Blue Harbor | Drama | 2018 | 102 | 7.1 | 2 |
| 3 | Paper Moon City | Comedy | 2012 | 95 | 6.4 | 5 |
| 4 | Silent Peak | Drama | 2020 | 131 | 8.2 | 3 |
| 5 | Last Signal | Sci-Fi | 2019 | 142 | 7.5 | 1 |
| 6 | Summer Keys | Comedy | 2016 | 88 | 5.9 | 4 |
| 7 | Iron Garden | Sci-Fi | 2021 | 125 | 8 | 3 |
| 8 | Dust and Gold | Western | 2014 | 110 | 6.8 | 2 |
| 9 | The Quiet Hour | Drama | 2022 | 97 | 7.4 | 5 |
| 10 | Deep Current | Thriller | 2017 | 105 | 6.9 | NULL |
| id | name | country |
|---|---|---|
| 1 | Nora Ellis | UK |
| 2 | Paulo Reis | Brazil |
| 3 | Kenji Mori | Japan |
| 4 | Anna Berg | Sweden |
| 5 | Luc Martin | France |
| 6 | Sara Diaz | Spain |
Voir l’indice
Notions à utiliser : WHERE (filtres), COUNT, SUM, AVG, MIN, MAX, JOIN, Sous-requêtes.
Structure de la requête :
SELECT …, …, …
FROM … …
JOIN … … ON … = …
WHERE … = (SELECT MAX(…) FROM … … WHERE … = …)Voir la correction
SELECT d.name, m.title, m.duration
FROM directors d
JOIN movies m ON m.director_id = d.id
WHERE m.duration = (SELECT MAX(duration) FROM movies x WHERE x.director_id = d.id);Résultat attendu (5 lignes) :
| name | title | duration |
|---|---|---|
| Nora Ellis | Last Signal | 142 |
| Paulo Reis | Dust and Gold | 110 |
| Kenji Mori | Silent Peak | 131 |
| Anna Berg | Summer Keys | 88 |
| Luc Martin | The Quiet Hour | 97 |
Exercice 15
Affiche le nom du joueur, le nom de son équipe et son nombre de buts, pour les joueurs qui ont marqué plus de buts que chacun des joueurs des Blue Owls, du plus grand nombre de buts au plus petit.
| id | name | team_id | position | goals |
|---|---|---|---|---|
| 1 | Alex Moreau | 1 | FW | 9 |
| 2 | Bilal Sow | 1 | MF | 4 |
| 3 | Carl Weber | 2 | FW | 7 |
| 4 | Diego Ruiz | 2 | DF | 1 |
| 5 | Eli Novak | 3 | FW | 6 |
| 6 | Femi Adeyemi | 4 | FW | 11 |
| 7 | Goran Petrov | 4 | GK | 0 |
| 8 | Hugo Lamy | 5 | MF | 5 |
| 9 | Ivan Kral | 5 | DF | 2 |
| id | name | city | founded |
|---|---|---|---|
| 1 | Red Foxes | Lyon | 1950 |
| 2 | Blue Owls | Paris | 1962 |
| 3 | Green Bulls | Lille | 1971 |
| 4 | Gold Hawks | Nantes | 1988 |
| 5 | Grey Wolves | Paris | 1990 |
Voir l’indice
Notions à utiliser : WHERE (filtres), ORDER BY, LIMIT, COUNT, SUM, AVG, MIN, MAX, JOIN, Sous-requêtes.
Structure de la requête :
SELECT …, …, …
FROM … …
JOIN … … ON … = …
WHERE … > (SELECT MAX(…) FROM … … JOIN … … ON … = … WHERE … = …)
ORDER BY … DESCVoir la correction
SELECT p.name, t.name, p.goals
FROM players p
JOIN teams t ON t.id = p.team_id
WHERE p.goals > (SELECT MAX(x.goals) FROM players x JOIN teams y ON y.id = x.team_id WHERE y.name = 'Blue Owls')
ORDER BY p.goals DESC;Résultat attendu (2 lignes, dans cet ordre) :
| name | name | goals |
|---|---|---|
| Femi Adeyemi | Gold Hawks | 11 |
| Alex Moreau | Red Foxes | 9 |
S’entraîner avec correction automatique
Dans SpeedQL, tu écris ta requête et elle est vérifiée tout de suite, sur ces tables puis sur un jeu de données caché.