Leçons du module (1/4)
Joindre deux tables : INNER JOIN
Jusqu'à présent, nous avons lu un tableau à la fois. Cependant, dans le monde réel, les données sont
réparti sur plusieurs tables associées : dans notre ensemble de données, par exemple, chaque
l'employé a un department_id qui pointe vers la table departments. A voir
le nom du département (et pas seulement son id) auquel nous devons adhérer
deux tableaux. L'opérateur qui fait cela s'appelle JOIN.
La syntaxe de base
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;Lire en anglais : "prenez table_a, attachez-y table_b en les associant chaque
ligne où table_a.x est égal à table_b.y". Le résultat est un nouveau virtuel
table avec les colonnes des deux.
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;La partie après ON est appelée la condition de jointure : c'est ce qui indique au
moteur "ces deux lignes sont à peu près la même chose, alignez-les". Dans le
grande majorité des cas c'est une égalité entre une clé primaire et une clé étrangère
clé (ici departments.id et employees.department_id).
INNER JOIN, en détail
Le mot-clé complet est INNER JOIN, mais JOIN à lui seul est la norme
synonyme. "Inner" signifie que seules les lignes qui correspondent dans les deux
les tableaux sont renvoyés :
- si un salarié a
department_id = NULL, il n'apparaîtra pas dans le résultat ; - si un service n'a aucun employé, il n'apparaîtra pas dans le résultat.
Noms de colonnes qualificatives
Lorsque deux tables ont des colonnes portant le même nom (ici les deux ont id, et
les deux ont name si vous y réfléchissez), vous devez spécifier quelle table
une colonne provient de l'écriture de table.column. Pour éviter de répéter des noms longs,
les alias sont souvent utilisés (vous les avez vus dans le module 2) :
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS est facultatif ici aussi : FROM employees e fonctionne de la même manière.
Essayez-le
Pour chaque employé du département Ingegneria, indiquez le prénom (first_name), le nom (last_name) et la ville du département (departments.city). Trois colonnes, une ligne par employé.
Afficher l'indice
Complétez la condition ON avec l'égalité entre e.department_id et d.id, puis sélectionnez d.city comme troisième colonne.
Solution disponible après 3 tentatives
Exercice de révision
Répertoriez le prénom (first_name) et le nom (last_name) de tous les employés qui travaillent dans un service basé à Milan. Filtrez sur départements.ville, pas sur le nom du département.
Afficher l'indice
Même JOIN que l'exercice précédent, mais filtrez sur d.city = 'Milano' au lieu de sur le nom du département.
Solution disponible après 3 tentatives