ejemplos sql sql-server-2008 count sql-server-2012

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