SQL Server NULLABLE列与SQL COUNT()函数

Joh*_*ogo 3 sql t-sql sql-server count

有人能帮我理解吗?当我可以,我通常在SQL语句中避免(*).好吧,今天是回报.这是一个场景:

CREATE TABLE Tbl (Id INT IDENTITY(1, 1) PRIMARY KEY, Name NVARCHAR(16))

INSERT INTO Tbl VALUES (N'John')
INSERT INTO Tbl VALUES (N'Brett')
INSERT INTO Tbl VALUES (NULL)
Run Code Online (Sandbox Code Playgroud)

我可以指望的记录数,其中NameNULL如下:

SELECT COUNT(*) FROM Tbl WHERE Name IS NULL
Run Code Online (Sandbox Code Playgroud)

在避免(*)的同时,我发现以下两个语句给出了两个不同的结果:

SELECT COUNT(Id) FROM Tbl WHERE Name IS NULL
SELECT COUNT(Name) FROM Tbl WHERE Name IS NULL
Run Code Online (Sandbox Code Playgroud)

第一个语句正确返回1,而第二个语句产生0.Why还是How

Mar*_*rco 5

那是因为

COUNT(column_name)函数返回指定列的值数(不计算NULL值)

因此,当您计算Id时,您会得到预期的结果,同时计算名称号,但查询提供的答案是正确的