这应该是 INNER JOIN 还是 LEFT Join?
Should this be an INNER JOIN or LEFT Join?
我的目标是 select 猫和亚马逊鸟的列表,包括它们的性别、它们的物种(拉丁名)和它们的种族(如果存在的话),并将猫和亚马逊鸟归为一组在一起,在他们的物种中,将种族聚集在一起。
我一开始没有正确的查询,后来我看到了解决方案,但不是很理解。
所以这是解决方案:
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;
因为据我了解:我只需要 select 可用的动物
还有什么是 GROUP BY 和 ORDER BY 的实际使用以及如何知道何时使用哪一个?
查询已从法语来源复制。
这与创建数据库和存储数据的方式有关。
如果所有的动物都有种族那么这就无关紧要了——根本没有关系。但是你的例子好像不是这样。
似乎对于某些动物来说 Animal.race_id
是空的。发生这种情况时,您是否要用 empty 比赛来展示这只动物?
- 如果是,请使用
LEFT JOIN
: 显示所有动物,无论他们是否有种族。
- 否则,使用
INNER JOIN
:显示所有动物及其种族;如果动物没有种族,则不会显示。
第二个问题:ORDER BY 与 GROUP BY
这两个完全不同:
我的目标是 select 猫和亚马逊鸟的列表,包括它们的性别、它们的物种(拉丁名)和它们的种族(如果存在的话),并将猫和亚马逊鸟归为一组在一起,在他们的物种中,将种族聚集在一起。
我一开始没有正确的查询,后来我看到了解决方案,但不是很理解。
所以这是解决方案:
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;
因为据我了解:我只需要 select 可用的动物
还有什么是 GROUP BY 和 ORDER BY 的实际使用以及如何知道何时使用哪一个?
查询已从法语来源复制。
这与创建数据库和存储数据的方式有关。
如果所有的动物都有种族那么这就无关紧要了——根本没有关系。但是你的例子好像不是这样。
似乎对于某些动物来说 Animal.race_id
是空的。发生这种情况时,您是否要用 empty 比赛来展示这只动物?
- 如果是,请使用
LEFT JOIN
: 显示所有动物,无论他们是否有种族。 - 否则,使用
INNER JOIN
:显示所有动物及其种族;如果动物没有种族,则不会显示。
第二个问题:ORDER BY 与 GROUP BY
这两个完全不同: