在 SQL 中查询并在查询时使用字母“a”
Posted
技术标签:
【中文标题】在 SQL 中查询并在查询时使用字母“a”【英文标题】:Query in SQL and use of the letter 'a' when querying 【发布时间】:2017-09-13 04:03:01 【问题描述】:我不确定如何描述我提出的问题,因为我不确定它是什么。
我是 SQL 的初学者,只是在空闲时间学习。我一直在看 w3schools 和 codeacademy 课程,我第一次遇到这个。我不明白为什么我们在这两种情况下都使用了字母 a。我查看了其他一些线程以寻求建议,但它们使用相似的符号但不同的字母。下面的代码图片。
有人能解释一下使用字母 a 的意义何在,以及你会在什么时候/什么情况下使用它。
干杯
编辑:所以第一张图片是别名,第二张是子查询。我对子查询命名的第二张图片感兴趣,因为不太了解它。
编辑 2:我从提供的链接中阅读了越来越多的别名,但仍然不完全理解语法。这可能只是因为它是一个自我加入,我自己也很困惑。在第一张图片中,只有名为“客户”的表,为什么会有“来自客户 A,客户 B”? Database can be viewed here
【问题讨论】:
When to use SQL Table Alias的可能重复 这只是您的查询成功运行时的别名,其结果派生为“a”阅读以下文档1. W3 Schools2. Tutorial points3. Do factory 谢谢大家,我找不到它,因为我不知道它叫什么。今天休息了几个星期才回到SQL,不记得别名课了。 【参考方案1】:在第一个示例中,这称为表别名,使用它有几个原因:
-
在编写查询时节省时间。许多 IDE(集成开发环境,或 SSMS、SQL Developer 等代码编辑器)将允许您自动完成列名,并且当您指定表别名而不是完整表名(例如,“a”而不是“顾客”)。即使没有自动完成功能,输入 a.CustomerName 而不是 Customers.CustomerName 也更容易。
在多次查询表时指定表所属的列,这是您的示例所使用的。这在执行自联接或检查重复项时很常见。
在您的第二个示例中,这称为命名子查询。这意味着括号内的部分称为“a”,可以在查询中视为自己的表或视图。
例如,而不是:
SELECT COUNT(*) FROM...
你可以说:
SELECT COUNT(a.id) FROM ...
这是因为“id”是来自子查询“a”的列。
或者,如果您想获取 sale_price 列的 SUM,则可以将其作为名为“a”的表的列来引用:
SELECT SUM(a.sale_price) FROM ...
【讨论】:
所以这两个都算行数吧?但是,当 from 已经在 a 中时,为什么我们在第二个中需要 FROM?我不确定我的问题是否有意义,但希望您能进一步解释。干杯 其实SELECT COUNT(*)的第一个例子是统计子查询的行数。 SELECT SUM(a.sale_price) 的第二个示例将找到所有 sale_price 值的总和。因此,如果您从子查询中返回了 3 条记录,其中 sale_price 为 10、20 和 5,那么 COUNT 将返回 3,但 SUM 将返回 35。这是否回答了您的问题? 嗨,bbrumm,在这种情况下,a.sale_price 不也是一个计数吗? SELECT count(*) FROM(... ) 不是吗?你能再解释一下吗?谢谢,韩 韩 - 是的,你可以说 COUNT(a.sale_price)。我觉得我的回答有点混乱,我会更新它。【参考方案2】:这些是表名的别名,提供了一种更简洁地编写 SQL 语句的方法,无需在查询的其他部分再次输入完整的表名。在这些情况下,字母 A 是任意的。有时会使用“t1”、“t2”等。有时它是表名中的第一个字母或几个字母。
但是,我不确定在第二个示例中使用“a”的原因。
【讨论】:
在情况 2 中,它只是强制性的。否则ERROR 1248 (42000): Every derived table must have its own alias
.
您能解释一下为什么它是强制性的吗?我真的不明白这个错误。为什么每个派生表都必须有自己的别名?【参考方案3】:
这在 sql 中称为别名。我们使用别名是因为我们以后不需要写整个表名,我们可以只写那个别名。例如,这里的 a 表示写在括号中的查询的输出。每当我们想使用这个结果时,我们可以简单地写 'a' 而不是再次编写整个查询,就像我们需要将此结果与另一个表连接或在 where 子句中指定等时一样。
【讨论】:
【参考方案4】:在您的第一个示例中,这些字母用于给表格起别名,这样您就不必一次又一次地写出表格的全名。
在您的第二个示例中,子查询被赋予了一个别名。为子查询提供别名的唯一原因是这是mysql
中语法的工作方式。如果将来您需要将WHERE
子句应用于该子查询,定义的别名将派上用场。
因此,在这种情况下,别名是多余的,但需要添加只是为了遵循MySQL
的语法。
【讨论】:
以上是关于在 SQL 中查询并在查询时使用字母“a”的主要内容,如果未能解决你的问题,请参考以下文章