我的问题
关于SQL中的子查询,我有一个问题。
除其他外,我试图检查是否理解相关子查询的原理,但也了解这个别名的兴趣。
要做到这一点,我将使用一个例子,并试图解释我如何理解相关的子查询。
例句
以下列查询为例:
SELECT custid, companyname
FROM Sales.Customers AS C
WHERE EXISTS
(SELECT *
FROM Sales.Orders AS O
WHERE O.custid = C.custid
AND O.orderdate = '20070212');从这个查询中,我分离了外部查询和内部查询:
外部查询:
SELECT custid, companyname
FROM Sales.Customers AS C
WHERE EXISTS内部查询:
SELECT *
FROM Sales.Orders AS O
WHERE O.custid = C.custid
AND O.orderdate = '20070212'我的理解
据我所知,这就是我们可以在本例中讨论关联子查询的原因:
在中,查询是逐行执行的。将为第1行、第2行、第3行等进行选择。
因为在我的内部查询中,我使用C.custid (即外部查询将逐行读取其值的列),并将其与O.custid (也必须逐行读取的整个列)进行比较。
这个查询需要首先检查O数组的所有行,然后再转到C数组的下一行。因此,这是一个相关的SubQuery.。
换句话说,查询将按以下方式执行:
我的第二个问题
现在,如果我正确理解了关联子查询的原理。我问自己的问题是:
为什么我们要使用别名?
在上面的例子中,我们可以说这是因为我们使用两个表,每个表都有一个同名的列。
但是,如果这两列都不会被命名为“of”,那么别名的效用是什么呢?
是因为"SELECT“命令以某种方式修改了表吗?
因为如果没有修改表,我就很难理解关联子查询中别名的必要性。
注意:我知道关联子查询也可以通过使用Join进行优化,但是我真的想把焦点放在关联SubQuery的基础上。
发布于 2019-07-04 07:19:56
所以,显然,我对相关子查询的理解是很好的。
不相关子查询中的 :
内部查询将执行一次(总计)
但是在关联子查询中,它将对外部查询的每一行执行一次.
但是,我仍然不知道为什么需要别名。
https://stackoverflow.com/questions/56872477
复制相似问题