ejemplos - sql count if
¿Por qué COUNT(*) es igual a 1 sin la cláusula FROM? (3)
Count (*) devolvió 1 porque su oración no es de SQL.
1) En las primeras oraciones, cuentas una tabla vacía, con una única fila, ya que no pones a qué tabla quieres acceder.
2) En el segundo caso:
declare @EmptyTable table ( Value int )
select COUNT(*) from @EmptyTable
devoluciones
(No column name)
-----------
0
Pones la variable, pero no determinas a qué tabla lo implementan. Para esto, haga un conteo y salga 0.
Esta pregunta ya tiene una respuesta aquí:
para un control rápido usé una consulta
select COUNT(*) LargeTable
y me sorprendió ver
LargeTable
-----------
1
segundos después me di cuenta de mi error, lo hice
select COUNT(*) from LargeTable
y obtuve el resultado esperado
(No column name)
-----------
1.000.000+
pero ahora no entiendo por qué COUNT(*)
devolvió 1
sucede si select COUNT(*)
o declare @x int = COUNT(*); select @x
declare @x int = COUNT(*); select @x
otro caso
declare @EmptyTable table ( Value int )
select COUNT(*) from @EmptyTable
devoluciones
(No column name)
-----------
0
No encontré explicación en el estándar SQL ( http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt , la fuente en línea se da aquí https://stackoverflow.com/a/8949764/ 1506454 )
¿por qué COUNT(*)
devuelve 1?
En SQL Server, una cláusula SELECT
sin FROM
funciona como si funcionara contra una sola tabla de filas.
Esto no es SQL estándar. Otros RDBMS proporcionan una tabla DUAL
utilidad con una sola fila.
Así que esto sería tratado de la misma manera que
SELECT COUNT(*) AS LargeTable
FROM DUAL
Un elemento de conexión relacionado discutiendo
SELECT ''test''
WHERE EXISTS (SELECT *)
es https://connect.microsoft.com/SQLServer/feedback/details/671475/select-test-where-exists-select
Porque sin la cláusula FROM, DBMS no puede saber [LargeTable] es una tabla. Lo engañaste adivinando que es un alias COLUMN NAME
Puedes probarlo y ver
select count(*) ''eklmnjdklfgm''
select count(*) eklmnjdklfgm
select count(*) [eklmnjdklfgm]
select count(*)
Los primeros 3 ejemplos devuelven eklmnjdklfgm como nombre de columna