La clause FROM indique à la base de données la table exacte qui contient les enregistrements nécessaires. Cette clause apparaît obligatoirement après SELECT dans toute requête d’extraction ou après DELETE pour les suppressions. Elle établit le lien entre les colonnes demandées et leur emplacement physique.
Table des matières
Syntaxe et positionnement de la clause FROM dans la création d’une requête
SELECT field1,field2 FROM table;
La clause FROM occupe toujours la deuxième position dans une requête SELECT ou DELETE complète. Elle suit immédiatement SELECT/DELETE et précède WHERE ou toute autre clause de filtrage. Cette organisation détermine l’ordre logique d’exécution de la requête.
La base de données traite d’abord la clause FROM pour identifier les tables concernées. Cette étape définit l’ensemble de données de départ avant tout filtrage. Les performances dépendent directement de cette identification initiale efficace. Voici l’ordre d’exécution de la requête :
- FROM
- puis JOIN, WHERE, GROUP BY, SELECT, ORDER BY.
Cette priorité garantit une optimisation automatique par les moteurs des bases de données. Le développeur écrit la commande SQL dans l’ordre logique, la machine exécute dans l’ordre optimal.
Récapitulatif
| Commande | FROM standard | FROM étendu (SQL Server) |
|---|---|---|
| INSERT | ❌ Jamais | ❌ Jamais |
| UPDATE | ❌ Non | ✅ Possible |
| DELETE | ✅ Après DELETE | ✅ Possible (SQL Server) |
| SELECT | ✅ Obligatoire | ✅ Obligatoire |
Cas d’usage pour exécuter des requêtes
La clause FROM s’adapte aussi aux requêtes plus complexes. Chaque situation ci-dessous utilise une variante spécifique selon les besoins.
Effectuer des requêtes sur une table unique
La requête de sélection la plus simple référence une seule table sans jointure interne ou externe. Cette approche convient parfaitement aux extractions directes sans croisement d’informations. Le résultat de la requête renvoi toutes les lignes des colonnes produit et prix depuis la table catalogue. La clause FROM pointe directement vers une table existante.
SELECT produit, prix
FROM catalogue;
Faire une requête avec un alias de table
Un alias attribue un nom court à une table pour simplifier la requête. Cette technique améliore grandement la lisibilité du code. Ici p remplace produits dans toute la requête suivante. Tous les SGBD supportent cette fonctionnalité standardisée.
SELECT p.nom, p.prix_unitaire
FROM produits p;
Syntaxe de requête pour une table jointe
Une jointure assemble deux tables par une colonne commune. La clause FROM contient la première table suivie immédiatement de la jointure. Une jointure consiste à coller deux listes via une colonne identique. Les clés de liaison doivent correspondre exactement dans les deux tables.
Cette requête associe chaque client à ses commandes correspondantes. La condition ON définit précisément le lien entre les tables. Chaque ligne du résultat représente une association valide.
SELECT c.nom, com.montant
FROM clients c
JOIN commandes com ON c.id = com.client_id;
Créer une requête avec jointures multiples et spécifier la clé primaire et la clé étrangère
Les jointures multiples croisent au moins trois tables. Chaque nouvelle table s’ajoute séquentiellement dans FROM. Les tables se connectent par des relations en cascade. Chaque JOIN précise la liaison avec la table précédente. Le résultat final regroupe toutes les informations contextuelles nécessaires.
SELECT c.nom, p.reference, ca.libelle
FROM clients c
JOIN commandes com ON c.id = com.client_id
JOIN produits p ON com.produit_id = p.id
JOIN categories ca ON p.categorie_id = ca.id;
Construire une requête avec plusieurs requêtes ou sous-requête dans la clause FROM
Une sous-requête génère une table temporaire directement dans la clause FROM. Dans l’ensemble de requêtes ci-dessous, effectuer une ou des requêtes utilisant un SELECT dans le FROM,permet de créer une table virtuelle qui n’existe que le temps de la requête principale.Dans ce cas, le nom de la table sera défini via un alias
SELECT ville, COUNT(*)
FROM (SELECT ville FROM clients WHERE actif = 1) AS clients_actifs
GROUP BY ville;
La sous-requête filtre d’abord les clients actifs. FROM traite ce résultat comme une table normale avec son alias et le GROUP BY s’applique ensuite sur cette table virtuelle. Cette approche résout les problèmes complexes sans jointures multiples. Les sous-requêtes isolent les calculs intermédiaires et simplifient souvent les requêtes trop imbriquées.
Cas Particuliers avec des exemples de requêtes
UPDATE : utiliser le mot-clé FROM est possible avec la syntaxe étendue
-- UPDATE standard (sans FROM) :
UPDATE produits
SET prix = prix * 1.1
WHERE categorie = 'luxe';
-- UPDATE avec FROM (SQL Server, PostgreSQL) :UPDATE produits p
SET prix = p.prix * 1.1
FROM categories c
WHERE p.categorie_id = c.id AND c.nom = 'luxe';
DELETE spécifie directement la table cible après la clause FROM, puis applique WHERE pour filtrer. Seul SQL Server permet une clause FROM étendue sous condition de jointure. Cette syntaxe propriétaire utilise FROM pour des jointures complexes dans DELETE. En revanche, MySQL, PostgreSQL et SQLite rejettent cette syntaxe.
-- DELETE avec FROM (extension SQL Server)
DELETE p
FROM produits p
JOIN categories c ON p.categorie_id = c.id
WHERE c.nom = 'obsolete';
Les bonnes pratiques
Voici les bonnes pratiques à adopter pour écrire des clauses FROM lisibles et performantes.
Utilisez systématiquement des alias dès que l’on a plusieurs tables dans la clause FROM. Préférez un nom de table explicite comme cli pour clients plutôt que t1 pour faire la jointure. Des alias courts mais parlants facilitent la lecture du code.
Évitez l’étoile (*) avec la commande SELECT sauf pour des explorations rapides. Listez précisément les colonnes nécessaires dans l’ordre logique. Cette habitude optimise les performances et clarifie les intentions.
Vérifiez toujours l’ordre des clauses : SELECT, FROM, WHERE, GROUP BY, ORDER BY. La base de données optimise l’exécution, mais l’ordre logique aide les autres développeurs. Cette structure standardisée prévient les erreurs de syntaxe.
Testez les requêtes complexes par étapes avec LIMIT 10 par exemple. Vérifiez chaque jointure externe ou interne individuellement avant l’assemblage finalafin de débusquer rapidement les erreurs de relation ou de clé.
Nommez vos tables de manière descriptive dans la base de données. Un nom comme commandes_2026 évite les ambiguïtés dans la clause FROM. Des conventions cohérentes simplifient la maintenance à long terme.
Documentez les requêtes complexes avec des commentaires. Expliquez le rôle de chaque table dans FROM pour les nouveaux arrivants. Cette documentation accélère la prise en main par l’équipe.