sql >> Databasteknik >  >> RDS >> Sqlserver

VÄLJ ANTAL(*);

Normalt är alla val av formen SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]

Eftersom detta tillåter enkla skalära beräkningar kan vi göra något som SELECT 1 + 1 FROM SomeTable och den returnerar en postuppsättning med värdet 2 för varje rad i tabellen SomeTable .

Om vi ​​nu inte brydde oss om någon tabell, utan bara ville göra vår skalära beräkning, kanske vi skulle vilja göra något som SELECT 1 + 1 . Detta är inte tillåtet av standarden, men det är användbart och de flesta databaser tillåter det (Oracle gör det inte om det inte har ändrats nyligen, åtminstone brukade det inte göra det).

Därför behandlas sådana blotta SELECT:er som om de hade en from-sats som specificerade en tabell med en rad och ingen kolumn (omöjligt förstås, men det gör susen). Därav SELECT 1 + 1 blir SELECT 1 + 1 FROM ImaginaryTableWithOneRow som returnerar en enda rad med en enda kolumn med värdet 2 .

För det mesta tänker vi inte på det här, vi vänjer oss bara vid det faktum att bara SELECT ger resultat och tänker inte ens på det faktum att det måste vara någon enradssak vald för att returnera en rad.

Genom att göra SELECT COUNT(*) du gjorde motsvarande SELECT COUNT(*) FROM ImaginaryTableWithOneRow vilket givetvis ger 1.



  1. Komplicerad fotbollsliga Dynamisk beställning i MySQL?

  2. Anropsprocedur från orakel till kristallrapport

  3. Hur aktiverar jag MySQL-frågelogg?

  4. Varför jag inte kan kasta oracle BLOB från infödd Java Blob