sql - SQL 问题:链接表时 WHERE/INNER JOIN 子句的顺序重要吗?
问题描述
考试题(AQA A-level 计算机科学):
[星号显示的主键]
Athlete(*AthleteID*, Surname, Forename, DateOfBirth, Gender, TeamName) EventType(*EventTypeID*, Gender, Distance, AgeGroup) Fixture(*FixtureID*, FixtureDate, LocationName) EventAtFixture(*FixtureID*, *EventTypeID*) EventEntry(*FixtureID*, *EventTypeID*, *AthleteID*)
将制作一份所有参加 18 年 9 月 17 日举行的比赛的运动员的名单。名单必须包括这些运动员的姓氏、名字和出生日期,不得包含其他详细信息。该列表应按姓氏的字母顺序显示。
编写 SQL 查询以生成列表。
我知道您可以通过两种方式做到这一点,一种使用 WHERE 子句,另一种使用 INNER JOIN 子句。但是,我想知道链接表格时顺序是否重要。
第一个示例解决方案:
SELECT Surname, Forename, DateOfBirth
FROM Athlete, EventEntry, Fixture
WHERE FixtureDate = "17/09/2018"
AND Athlete.AthleteID = EventEntry.AthleteID
AND EventEntry.FixtureID = Fixture.FixtureID
ORDER BY Surname
这是第一个示例解决方案,如果我在 WHERE 子句中切换表的顺序是否仍然正确,例如:
WHERE FixtureDate = "17/09/2018"
AND EventEntry.AthleteID = Athlete.AthleteID
AND Fixture.FixtureID = EventEntry.FixtureID
对于 INNER JOIN 子句,我有同样的问题,这是第二个示例解决方案:
SELECT Surname, Forename, DateOfBirth
FROM Athlete
INNER JOIN EventEntry ON Athlete.AthleteID = EventEntry.AthleteID
INNER JOIN Fixture ON EventEntry.FixtureID = Fixture.FixtureID
WHERE FixtureDate = "17/09/2018"
ORDER BY Surname
同样,如果我使用此命令是否正确:
INNER JOIN EventEntry ON Fixture.FixtureID = EventEntry.FixtureID
如果顺序确实很重要,有人可以向我解释为什么它是示例中显示的顺序吗?
解决方案
一些忠告:
- 切勿在
FROM
子句中使用逗号。 始终使用正确、明确、标准JOIN
的语法。 - 使用作为表名缩写的表别名。
- 使用标准日期格式!
- 限定所有列名。
然后,比较的顺序对于相等性无关紧要。我建议使用规范排序。
因此,查询应该更像:
SELECT a.Surname, a.Forename, a.DateOfBirth
FROM Athlete a INNER JOIN
EventEntry ee
ON a.AthleteID = ee.AthleteID INNER JOIN
Fixture f
ON ee.FixtureID = f.FixtureID
WHERE a.FixtureDate = '2018-09-17'
ORDER BY a.Surname;
我猜想中的所有列SELECT
都来自Athlete
. 如果不是这样,则调整表别名。
推荐阅读
- git - GIT:防止基于文件中的单词提交
- python - 如何通过 wxPython 在 messageBox 中使用 python 换行?
- react-native - React-native .env 文件无法正常工作
- python - 当for循环将值附加到列表没有更多值时,如何在特定时间停止诡计循环
- javascript - 使用表中的动态 Value1 过滤
- javascript - 应用程序缓存错误:清单来源试用令牌无效或缺失
- sql - 需要查看插入、更新、删除 SQL 触发器后受影响的实际行
- python - 访问被拒绝在 Python 中写入 HKEY_CURRENT_USER
- .net-core - 将 dotnetcore 5 web api 部署到 iis 给出 404
- android - 如何使用导航喷气背包从主机活动导航到片段