Récupération de données de tables liées en Python
Faisons une requête qui récupérera
tous les utilisateurs avec leurs villes. Pour cela,
la commande LEFT
JOIN sera nécessaire :
Sa syntaxe est la suivante :
SELECT champs FROM nom_table
LEFT JOIN nom_table_liee ON condition_liaison
WHERE condition_selection
Analysons les différentes parties de la syntaxe de cette commande.
Champs
Comme la sélection se fait à partir de plusieurs tables,
la sélection de tous les champs via * ne
fonctionnera pas. La requête suivante sélectionnera
les champs uniquement de la table principale, mais pas de
la table liée :
SELECT *
Pour que les données soient sélectionnées de toutes
les tables, il faut préciser le nom de la table
pour la sélection avant * :
SELECT users.*, cities.*
Ou bien, on peut énumérer les champs dont nous avons besoin en précisant le nom de la table devant eux :
SELECT users.name, cities.name
Ces deux méthodes ont un problème. Le fait est que si les champs dans les tables ont des noms identiques, dans le tableau Python un conflit de noms se produira et un seul champ l'emportera, et le second sera absent.
Pour résoudre le problème, il faut renommer les noms
en conflit via la commande
as :
SELECT users.name, cities.name as city_name
Liaison
Après la commande ON, nous devons indiquer
les champs des deux tables sur lesquels s'établit
la liaison. Dans notre cas, ce sera le champ id
de la table des villes et le champ city_id
de la table des utilisateurs :
ON cities.id=users.city_id
Requête
Au final, la requête qui récupérera les utilisateurs avec leurs villes ressemblera à ceci :
SELECT
users.name, cities.name as city_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
Tâches pratiques
Supposons que vous ayez une table de produits et une table de leurs catégories. Écrivez une requête qui récupérera les noms des produits ainsi que leurs catégories.