嗨,这是我的第一个问题,试图打破僵局。 我已经理解的东西是像这样的命令的含义:
SELECT name, continent, population FROM world x
WHERE 25000000> ALL
(SELECT population FROM world y
WHERE y.continent=x.continent
AND area>0)
我真的不知道为什么在这里使用表变量。有人可以让我知道并可能将此翻译成普通英语吗?
答案 0 :(得分:2)
欢迎使用Stack Overflow!
您正在查看的内容实际上称为table aliases。基本上,他们告诉查询的其余部分,如果你提到名为x
的内容,你实际上是指称为world
的表。如果在您的方案中,您尝试两次引用同一个表,这很方便:如果要将world.continent
与world.continent
匹配,则需要知道哪个是哪个。
另一个常见的用法就是节省空间:如果你引用一个名为My_Extremely_Long_Table_With_An_Awful_Name
的表,你不想每次都写出来。您可以将其别名为foo
,yak
,blueberry
,x
,a
,meltwaan
或其他任何您有机会记住,然后在剩下的时间里以这种方式引用它。
最后,偶尔也需要别名 - such as when you join to a subquery。
您可以在我在答案中嵌入的链接或通过搜索“表别名”来阅读更多相关信息。
答案 1 :(得分:0)
如果你指的是x和y代币,则会将其称为table aliases。它允许您创建一个简短的别名'表类型的临时名称,因此您不必为join / where子句写出整个表名。
答案 2 :(得分:0)
正如其他人已经提到的,这些被称为表别名。
别名为数据库管理员以及其他数据库用户提供了减少查询所需代码量的能力,并使查询通常更易于理解。此外,别名可以用作混淆技术来保护数据库字段的真实名称。
详细了解Wikipedia。
通常,当您的表格和/或列名称非常长时,它们会用于减少代码数量(例如organization_student_exam_files
可以别名为xf
或类似地缩短。
表别名的另一个更重要的用途是消除同一查询中两个表中相同列名的歧义。例如:
SELECT id, name FROM dogs LEFT JOIN owners ON oid = id;
如果dogs
和owners
都有一个名为id
的列,则此查询无法运行,因为系统无法知道要使用哪个id
。选择name
,狗的名字或所有者的名字是否相同?因此:
SELECT d.id, d.name, o.name FROM dogs AS d LEFT JOIN owners AS o ON oid = id;
这允许我在同一查询中同时选择狗的名字和所有者的名字。