50 Cheli
3
51 Chicaca 3
Mais avouez que ce n'est pas un résultat très cohérent. MySQL va simplement convertir tout en chaînes de caractères pour ne
pas avoir de problème. Soyez donc très prudents !
Vous pouvez constater en passant que les noms de colonnes utilisés dans les résultats sont ceux de la première requête
effectuée. Vous pouvez bien sûr les renommer avec des alias.
Et enfin, pour l'ordre des colonnes, à nouveau vous n'aurez pas d'erreur tant que vous avez le même nombre de colonnes dans
chaque requête, mais vous pouvez avoir des résultats bizarres. En effet, MySQL n'analyse pas les noms des colonnes pour
trouver une quelconque correspondance d'une requête à l'autre ; tout se fait sur la base de la position de la colonne dans la
requête.
Code : SQL
SELECT Animal.id, Animal.nom, Espece.nom_courant FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
WHERE Espece.nom_courant = 'Chat' AND Animal.nom LIKE 'C%'
UNION
SELECT Animal.nom, Animal.id, Espece.nom_courant FROM Animal
-- 1e
et 2e colonnes inversées par rapport à la première requête
INNER JOIN Espece ON Animal.espece_id = Espece.id
WHERE Espece.nom_courant = 'Tortue d''Hermann' AND Animal.nom LIKE
'C%';
id
nom
nom_courant
5
Choupi Chat
33
Caribou Chat
34
Capou
Chat
37
Callune Chat
43
Cracotte Chat
44
Cawette Chat
Cheli
50
Tortue d'Hermann
Chicaca 51
Tortue d'Hermann
UNION ALL
Exécutez la requête suivante :
Code : SQL
SELECT * FROM Espece
UNION
SELECT * FROM Espece;
Non, non, je ne me suis pas trompée, je vous demande bien d'unir deux requêtes qui sont exactement les mêmes.
Résultat :
id
nom_courant
nom_latin
description
1 Chien
Canis canis
Bestiole à quatre pattes qui aime les caresses et tire souvent la langue
Partie 2 : Index, jointures et sous-requêtes
131/414
www.openclassrooms.com
3
51 Chicaca 3
Mais avouez que ce n'est pas un résultat très cohérent. MySQL va simplement convertir tout en chaînes de caractères pour ne
pas avoir de problème. Soyez donc très prudents !
Vous pouvez constater en passant que les noms de colonnes utilisés dans les résultats sont ceux de la première requête
effectuée. Vous pouvez bien sûr les renommer avec des alias.
Et enfin, pour l'ordre des colonnes, à nouveau vous n'aurez pas d'erreur tant que vous avez le même nombre de colonnes dans
chaque requête, mais vous pouvez avoir des résultats bizarres. En effet, MySQL n'analyse pas les noms des colonnes pour
trouver une quelconque correspondance d'une requête à l'autre ; tout se fait sur la base de la position de la colonne dans la
requête.
Code : SQL
SELECT Animal.id, Animal.nom, Espece.nom_courant FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
WHERE Espece.nom_courant = 'Chat' AND Animal.nom LIKE 'C%'
UNION
SELECT Animal.nom, Animal.id, Espece.nom_courant FROM Animal
-- 1e
et 2e colonnes inversées par rapport à la première requête
INNER JOIN Espece ON Animal.espece_id = Espece.id
WHERE Espece.nom_courant = 'Tortue d''Hermann' AND Animal.nom LIKE
'C%';
id
nom
nom_courant
5
Choupi Chat
33
Caribou Chat
34
Capou
Chat
37
Callune Chat
43
Cracotte Chat
44
Cawette Chat
Cheli
50
Tortue d'Hermann
Chicaca 51
Tortue d'Hermann
UNION ALL
Exécutez la requête suivante :
Code : SQL
SELECT * FROM Espece
UNION
SELECT * FROM Espece;
Non, non, je ne me suis pas trompée, je vous demande bien d'unir deux requêtes qui sont exactement les mêmes.
Résultat :
id
nom_courant
nom_latin
description
1 Chien
Canis canis
Bestiole à quatre pattes qui aime les caresses et tire souvent la langue
Partie 2 : Index, jointures et sous-requêtes
131/414
www.openclassrooms.com
