两者中哪一个表现更好(我最近被指责不小心我的代码,因为我在Oracle中使用了后者):
Select *
from Tab1
Where (not) exists(Select 1 From Tab2 Where Tab1.id = Tab2.id)
Select *
from Tab1
Where (not) exists(Select Field1 From Tab2 Where Tab1.id = Tab2.id)
Run Code Online (Sandbox Code Playgroud)
或者他们俩都一样?
请从SQL Server透视图和Oracle透视图中回答这两个问题.
我用google搜索(主要来自sql-server方面)并发现对此仍存在很多争论,尽管我现在的意见/假设是RDMBS中的优化者已经足够成熟,可以理解子查询所需要的只是布尔值.
以下三个Select查询,无论Where子句在表别名和列名之间有多余空格,都会产生相同的结果.他们都有相同的执行计划.为什么空格的存在不会引发语法错误?
DECLARE @TblX TABLE(
ColX int
,ColY float
)
-----As it normally should be
SELECT *
FROM @TblX X
WHERE X.ColX = 1
----Even this works
SELECT *
FROM @TblX X
WHERE X .ColX = 1
----And this too
SELECT *
FROM @TblX X
WHERE X. ColX = 1
Run Code Online (Sandbox Code Playgroud) 下面的代码有效并且非常精确,但是与其他“标准”方式相比,这样做可以吗?
--Drop table if exists
begin try
drop table #temp
end try
begin catch
print 'table does not exist'
end catch
--Create table
create table #temp(a int, b int)
Run Code Online (Sandbox Code Playgroud)