IFT1147 - Introduction à MySQL 25
Plusieurs tables dans une requête
Le FROM d’une requête peut contenir
plusieurs tables, séparées par des
virgules.
SELECT *
FROM Acteur, Role
Le résultat de la requête est alors le
produit cartésien des deux tables.
IFT1147 - Introduction à MySQL 26
Plusieurs tables - suite
La plupart du temps, on ne veut obtenir
que les lignes « reliées » des deux tables,
et non pas le produit cartésien au grand
complet.
Il faut alors spécifier la relation dans le
WHERE.
SELECT * FROM Acteur, Role
WHERE Acteur.acteurID=Role.acteurID;
IFT1147 - Introduction à MySQL 27
Plusieurs tables - ce n’est pas fini
Dans certains cas, seulement les lignes
reliées entre deux tables ne sont pas non
plus le résultat souhaité.
Que faire s’il faut obtenir tous les
éléments d’une première table qui ne
possèdent pas d’entrée dans une autre,
par exemple tous les acteurs qui n’ont
encore eu aucun role ?
IFT1147 - Introduction à MySQL 28
Plusieurs tables - LEFT JOIN
La clause LEFT JOIN permet de
retourner toutes les entrées d’une
première table avec, s’il y a
correspondance, les entrées d’une
deuxième, et NULL dans toutes les
colonnes réservées à la deuxième table
s’il n’y a pas de correspondance.
IFT1147 - Introduction à MySQL 29
LEFT JOIN - exemple
SELECT Acteur.*
FROM Acteur LEFT JOIN Role
ON Acteur.acteurID = Role.acteurID
WHERE isnull(Role.acteurID);
Un LEFT JOIN est beaucoup plus lent à
exécuter qu’un lien direct. À n’utiliser
qu’en cas de besoin.
IFT1147 - Introduction à MySQL 30
Sauvegarde
Avant de modifier les données dans les
tables, mieux vaut savoir créer une
sauvegarde !
Le logiciel mysqldump est l’utilitaire
nécessaire. Il prend les mêmes
arguments que le client mysql; de plus,
on doit aussi spécifier le nom de la base
de données à sauvegarder.