我正在研究SQL Server中的Select代码,并且很难理解为什么我们必须在此处的Where条件中使用别名:
AND NOT EXISTS (
(SELECT 1
FROM ComprasPedidosItens CPI WITH (NOLOCK)
WHERE CPI.NumeroMiro IS NOT NULL AND CPI.CodigoPedido = ComprasPedidos.CodigoPedido)
)
谢谢
答案 0 :(得分:0)
据我所知,Alias对查询执行的性能没有任何影响。但是,如果在选择列表中使用别名,则根据查询可能会降低性能。
答案 1 :(得分:0)
别名不会提高性能。但是,当在查询中两次(或多次)使用同一表(带有子查询,联接等)时,这有助于使他与众不同。
在示例中,让我们考虑该表,它具有一个引用同一表的外键:
MyTable:
Self-reference
+--------+
| |
v |
id | MyTable_id | data
这个查询:
SELECT *
FROM MyTable
LEFT JOIN MyTable
ON MyTable.id = MyTable.MyTable_id
-- ^ ^
-- | |
-- Which table ? Which table ?
-- The first ? The first ?
-- Or Or
-- the second ? the second ?
使用别名很有意义
SELECT *
FROM MyTable T1
LEFT JOIN MyTable T2
ON T1.id = T2.MyTable_id
-- Now we know.
答案 2 :(得分:0)
如果您要询问CPI
别名,那么不是是必需的。
NOT EXISTS (
(SELECT 1
FROM ComprasPedidosItens CPI WITH (NOLOCK)
WHERE CPI.NumeroMiro IS NOT NULL AND CPI.CodigoPedido = ComprasPedidos.CodigoPedido)
)
与
相同NOT EXISTS (
(SELECT 1
FROM ComprasPedidosItens WITH (NOLOCK)
WHERE NumeroMiro IS NOT NULL AND CodigoPedido = ComprasPedidos.CodigoPedido)
)
列将根据范围中最合适的项目进行解析,因为这是该范围级别中引入的唯一表,因此默认情况下会首先尝试(使用不匹配的不合格列,然后再对来自外部范围的对象进行尝试)
但是使用两部分的列名会更清晰,因此读者可以轻松分辨出它们来自哪个表,而简短的助记符别名比整个表名更易于遵循。
别名对性能没有影响。