我的目标是选择猫和亚马逊鸟的名单,包括他们的性别,他们的speecie(拉丁名字)和他们的种族(如果存在)并将猫组合在一起,将亚马逊鸟组合在一起,并在他们的内部speecie,聚集在一起。
我首先没有得到正确的查询,但后来我看到了解决方案并且不太了解它。
所以这是解决方案:
SELECT Animal.nom as nom_animal, Animal.sexe, Espece.nom_latin as espece, Race.nom as race
FROM Animal
INNER JOIN Specie
ON Animal.specie_id = Specie.id
LEFT JOIN Race
ON Animal.race_id = Race.id
WHERE Specie.nom_courant IN ('Amazon birds', 'Cat')
ORDER BY Specie.nom_latin, Race.nom;
为什么不能这样:
FROM Animal
INNER JOIN Specie
ON Animal.specie_id = Specie.id
INNER JOIN JOIN Race
ON Animal.race_id = Race.id
WHERE Specie.nom_courant IN ('Amazon birds', 'Cat')
GROUP BY Specie.nom_latin, Race.nom;
因为据我所知:我只需要选择动物
GROUP BY和ORDER BY的实际用途是什么以及如何知道使用哪一个以及何时使用?
该查询已从法语来源复制。
答案 0 :(得分:1)
它与创建数据库和存储数据的方式有关。
如果所有动物都有种族那么根本没关系。但似乎并非你的例子。
对于某些动物来说,似乎Animal.race_id
为空。当发生这种情况时,你想用空种族来展示动物吗?
LEFT JOIN
:显示所有动物,无论它们是否有种族。INNER JOIN
:显示所有种族的动物;如果动物没有种族,则不会显示。第二个问题:ORDER BY与GROUP BY
这两者完全不同: