Wenn wir ausführen select count(*) from table_name
, wird die Anzahl der Zeilen zurückgegeben.
Was macht count(1)
das Was 1
bedeutet hier? Ist dies dasselbe wie count(*)
(da es bei der Ausführung das gleiche Ergebnis liefert)?
Wenn wir ausführen select count(*) from table_name
, wird die Anzahl der Zeilen zurückgegeben.
Was macht count(1)
das Was 1
bedeutet hier? Ist dies dasselbe wie count(*)
(da es bei der Ausführung das gleiche Ergebnis liefert)?
Antworten:
Der Parameter für die COUNT-Funktion ist ein Ausdruck, der für jede Zeile ausgewertet werden soll. Die COUNT-Funktion gibt die Anzahl der Zeilen zurück, für die der Ausdruck einen Wert ungleich Null ergibt. (* ist ein spezieller Ausdruck, der nicht ausgewertet wird. Er gibt einfach die Anzahl der Zeilen zurück.)
Es gibt zwei zusätzliche Modifikatoren für den Ausdruck: ALL und DISTINCT. Diese bestimmen, ob Duplikate verworfen werden. Da ALL die Standardeinstellung ist, entspricht Ihr Beispiel der Anzahl (ALL 1), was bedeutet, dass Duplikate beibehalten werden.
Da der Ausdruck "1" für jede Zeile einen Wert ungleich Null ergibt und Sie keine Duplikate entfernen, sollte COUNT (1) immer dieselbe Nummer wie COUNT (*) zurückgeben.
Hier ist ein Link , der Ihnen bei der Beantwortung Ihrer Fragen hilft. Zusamenfassend:
count (*) ist die richtige Schreibweise und count (1) ist OPTIMIERT, um intern count (*) zu sein - seitdem
a) Zählen der Zeilen, bei denen 1 nicht Null ist, ist weniger effizient als
b) Zählen der Zeilen
Unterschied zwischen Anzahl (*) und Anzahl (1) im Orakel?
count (*) bedeutet, dass alle Datensätze gezählt werden, dh jede einzelne Zelle, ABER
count (1) bedeutet, dass eine Pseudospalte mit dem Wert 1 hinzugefügt wird und die Anzahl aller Datensätze zurückgegeben wird
Dies ähnelt dem Unterschied zwischen
SELECT * FROM table_name and SELECT 1 FROM table_name.
Wenn Sie tun
SELECT 1 FROM table_name
Sie erhalten die Nummer 1 für jede Zeile in der Tabelle. Also ja count(*)
und count(1)
liefert die gleichen Ergebnisse wie will count(8)
odercount(column_name)
Es gibt keinen Unterschied.
COUNT(1)
zählt im Grunde nur einen konstanten Wert 1 Spalte für jede Zeile. Wie andere Benutzer hier gesagt haben, ist es dasselbe wie COUNT(0)
oder COUNT(42)
. Jeder Nichtwert NULL
wird ausreichen.
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
Das Oracle-Optimierungsprogramm enthielt anscheinend Fehler, die dazu führten, dass die Anzahl davon beeinflusst wurde, welche Spalte Sie ausgewählt haben und ob sie sich in einem Index befand, sodass die COUNT (1) -Konvention ins Leben gerufen wurde.
SELECT COUNT(1) from <table name>
sollte genau das Gleiche tun wie
SELECT COUNT(*) from <table name>
Es mag Gründe gegeben haben oder noch geben, warum es besser als SELECT COUNT(*)
eine Datenbank funktioniert, aber ich würde das als Fehler in der Datenbank betrachten.
SELECT COUNT(col_name) from <table name>
hat jedoch eine andere Bedeutung, da nur die Zeilen mit einem Wert ungleich Null für die angegebene Spalte gezählt werden.
im Orakel glaube ich, dass diese genau die gleiche Bedeutung haben
Sie können so testen:
create table test1(
id number,
name varchar2(20)
);
insert into test1 values (1,'abc');
insert into test1 values (1,'abc');
select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;
Je nachdem, wen Sie fragen, berichten einige Leute, dass die Ausführung select count(1) from random_table;
schneller läuft alsselect count(*) from random_table
. Andere behaupten, sie seien genau gleich.
Dieser Link behauptet, dass der Geschwindigkeitsunterschied zwischen den beiden auf einen FULL TABLE SCAN und einen FAST FULL SCAN zurückzuführen ist.