FROM Espece : je travaille sur la table Espece.
INNER JOIN Animal : je la joins (avec une jointure interne) à la table Animal.
ON Espece.id = Animal.espece_id : la jointure se fait sur les colonnes id de la table Espece et espece_id de
la table Animal, qui doivent donc correspondre.
WHERE Animal.nom = 'Cartouche' : dans la table résultant de la jointure, je sélectionne les lignes qui ont la
valeur "Cartouche" dans la colonne nom venant de la table Animal.
Si vous avez compris ça, vous avez tout compris !
Syntaxe
Comme d'habitude, voici donc la syntaxe à utiliser pour faire des requêtes avec jointure(s) interne(s).
Code : SQL
SELECT *
-- comme d'habitude, vous
sélectionnez les colonnes que vous voulez
FROM nom_table1
[INNER] JOIN nom_table2
-- INNER explicite le
fait qu'il s'agit d'une jointure interne, mais c'est facultatif
ON colonne_table1 = colonne_table2
-- sur quelles colonnes
se fait la jointure
-- vous pouvez mettre
colonne_table2 = colonne_table1, l'ordre n'a pas d'importance
[WHERE ...]
[ORDER BY ...]
-- les clauses habituelles
sont bien sûr utilisables !
[LIMIT ...]
Condition de jointure
La clause ON sert à préciser la condition de la jointure. C'est-à-dire sur quel(s) critère(s) les deux tables doivent être jointes. Dans
la plupart des cas, il s'agira d'une condition d'égalité simple, comme ON Animal.espece_id = Espece.id. Il est
cependant tout à fait possible d'avoir plusieurs conditions à remplir pour lier les deux tables. On utilise alors les opérateurs
logiques habituels. Par exemple, une jointure peut très bien se faire sur plusieurs colonnes :
Code : SQL
SELECT *
FROM nom_table1
INNER JOIN nom_table2
ON colonne1_table1 = colonne1_table2
AND colonne2_table1 = colonne2_table2
[AND ...];
Expliciter le nom des colonnes
Il peut arriver que vous ayez dans vos deux tables des colonnes portant le même nom. C'est le cas dans notre exemple, puisque la
table Animal comporte une colonne id , tout comme la table Espece. Il est donc important de préciser de quelle colonne on parle
dans ce cas-là.
Vous l'avez vu dans notre requête, on utilise pour ça l'opérateur . (nom_table.nom_colonne). Pour les colonnes ayant un nom
non-ambigu (qui n'existe dans aucune autre table de la jointure), il n'est pas obligatoire de préciser la table.
En général, je précise la table quand il s'agit de grosses requêtes avec plusieurs jointures. En revanche, pour les petites jointures
courantes, il est vrai que c'est moins long à écrire si on ne précise pas la table.
Exemple : sélection du nom des animaux commençant par "Ch", ainsi que de l'id et la description de leur espèce.
Code : SQL
SELECT Espece.id,
-- ici, pas le choix, il faut
Partie 2 : Index, jointures et sous-requêtes
101/414
www.openclassrooms.com
INNER JOIN Animal : je la joins (avec une jointure interne) à la table Animal.
ON Espece.id = Animal.espece_id : la jointure se fait sur les colonnes id de la table Espece et espece_id de
la table Animal, qui doivent donc correspondre.
WHERE Animal.nom = 'Cartouche' : dans la table résultant de la jointure, je sélectionne les lignes qui ont la
valeur "Cartouche" dans la colonne nom venant de la table Animal.
Si vous avez compris ça, vous avez tout compris !
Syntaxe
Comme d'habitude, voici donc la syntaxe à utiliser pour faire des requêtes avec jointure(s) interne(s).
Code : SQL
SELECT *
-- comme d'habitude, vous
sélectionnez les colonnes que vous voulez
FROM nom_table1
[INNER] JOIN nom_table2
-- INNER explicite le
fait qu'il s'agit d'une jointure interne, mais c'est facultatif
ON colonne_table1 = colonne_table2
-- sur quelles colonnes
se fait la jointure
-- vous pouvez mettre
colonne_table2 = colonne_table1, l'ordre n'a pas d'importance
[WHERE ...]
[ORDER BY ...]
-- les clauses habituelles
sont bien sûr utilisables !
[LIMIT ...]
Condition de jointure
La clause ON sert à préciser la condition de la jointure. C'est-à-dire sur quel(s) critère(s) les deux tables doivent être jointes. Dans
la plupart des cas, il s'agira d'une condition d'égalité simple, comme ON Animal.espece_id = Espece.id. Il est
cependant tout à fait possible d'avoir plusieurs conditions à remplir pour lier les deux tables. On utilise alors les opérateurs
logiques habituels. Par exemple, une jointure peut très bien se faire sur plusieurs colonnes :
Code : SQL
SELECT *
FROM nom_table1
INNER JOIN nom_table2
ON colonne1_table1 = colonne1_table2
AND colonne2_table1 = colonne2_table2
[AND ...];
Expliciter le nom des colonnes
Il peut arriver que vous ayez dans vos deux tables des colonnes portant le même nom. C'est le cas dans notre exemple, puisque la
table Animal comporte une colonne id , tout comme la table Espece. Il est donc important de préciser de quelle colonne on parle
dans ce cas-là.
Vous l'avez vu dans notre requête, on utilise pour ça l'opérateur . (nom_table.nom_colonne). Pour les colonnes ayant un nom
non-ambigu (qui n'existe dans aucune autre table de la jointure), il n'est pas obligatoire de préciser la table.
En général, je précise la table quand il s'agit de grosses requêtes avec plusieurs jointures. En revanche, pour les petites jointures
courantes, il est vrai que c'est moins long à écrire si on ne précise pas la table.
Exemple : sélection du nom des animaux commençant par "Ch", ainsi que de l'id et la description de leur espèce.
Code : SQL
SELECT Espece.id,
-- ici, pas le choix, il faut
Partie 2 : Index, jointures et sous-requêtes
101/414
www.openclassrooms.com
