An der Universität hat mir mein Professor dieses Jahr beigebracht, dass diese SQL-Anweisung:
SELECT COUNT(length) FROM product
wird 2
mit dem folgenden Datensatz zurückkehren:
| product |
|id | length | code |
|-------------------|
| 1 | 11 | X00 |
| 2 | 11 | C02 |
| 3 | 40 | A31 |
Sie begründete dies damit, dass COUNT
Duplikate nicht gezählt würden.
Ich sagte meinem Professor, dass ich dachte, sie hätte einen Fehler gemacht. Sie antwortete mir, dass einige DBMS möglicherweise Duplikate zählen oder nicht.
Nachdem ich viele DBMS ausprobiert habe, habe ich noch nie eines gefunden, das dieses Verhalten aufweist.
Existiert dieses DBMS?
Gibt es einen Grund für einen Professor, dieses Verhalten zu lehren? Und ohne auch nur zu erwähnen, dass sich andere DBMS möglicherweise anders verhalten?
Zu Ihrer Information, die Kursunterstützung finden Sie hier (in französischer Sprache) . Die betroffene Folie befindet sich in der unteren linken Ecke auf Seite 10.
Antworten:
COUNT
zählt Duplikate in allen mir bekannten DBMS, aber.Ja, es gibt einen Grund. In der ursprünglichen relationalen Theorie (die allen modernen relationalen DBMS zugrunde liegt) ist die Beziehung eine Menge im mathematischen Sinne dieses Wortes. Das bedeutet, dass keine Relation Duplikate enthalten kann, einschließlich aller Übergangsrelationen, nicht nur Ihre „Tabellen“.
Nach diesem Prinzip kann man sagen, dass
SELECT length FROM product
bereits nur zwei Zeilen enthalten sind, daher entsprechendeCOUNT
Rückgaben2
, nicht3
.Zum Beispiel in Rel DBMS unter Verwendung der in Frage und Tutorial D angegebenen Beziehung :
gibt:
quelle
COUNT
sich das Verhalten von SQL-Implementierungen unterscheidet.Entweder hat Ihr Professor einen Fehler gemacht oder Sie haben falsch verstanden, was sie gesagt hat. Im Kontext von relationalen DBMS, wie sie von verschiedenen Anbietern implementiert wurden, gibt die Aggregatfunktion
COUNT(<expression>)
die Anzahl der Nicht-NULL-Werte<expression>
in der Ergebnismenge (oder einer Gruppe) zurück.Es gibt einen Sonderfall von
COUNT(*)
, der die Anzahl der Zeilen in der Ergebnismenge oder Gruppe und nicht die Anzahl der Werte von irgendetwas zurückgibt . Dies ist äquivalent zuCOUNT(<constant expression>)
, wie zCOUNT(1)
.Viele Datenbanken unterstützen
COUNT(DISTINCT <expression>)
, was wird die Anzahl der eindeutigen Werte zurückgeben<expression>
.quelle
Wenn Ihr Professor über SQL spricht, ist die Aussage falsch.
COUNT(x)
Gibt die Anzahl der Zeilen zurück, in denen xIS NOT NULL
Duplikate enthält.COUNT(*) or COUNT([constant])
Dies ist ein Sonderfall, bei dem die Zeilen gezählt werden, auch die, in denen sich jede Spalte befindetNULL
. Duplikate werden jedoch immer gezählt, sofern Sie dies nicht angebenCOUNT(distinct x)
. Beispiel:COUNT(distinct *)
ist ungültig AFAIK.Als Randnotiz führt NULL ein unintuitives Verhalten ein. Als Beispiel:
dh:
Wenn es sich um ein relationales System handelt, wie es beispielsweise in dem Buch " Datenbanken, Typen und das relationale Modell: Das dritte Manifest" von CJ Date und Hugh Darwen beschrieben wird, wäre dies eine korrekte Aussage.
Sagen Sie, dass wir die Beziehung haben:
entspricht:
dh
das würde 2 zurückgeben .
quelle
So funktioniert es in MS SQL Server
quelle
Wenn der Tisch so ausgesehen hätte,
Sie könnten erwarten, dass die Abfrage mindestens in Oracle DB 2 zurückgibt, da Nullen nicht gezählt werden. Duplikate werden jedoch in Ordnung gezählt.
quelle
Vielleicht meint sie in Verbindung mit Unique, aber Count macht COUNT DUPLICATES. Es gibt einige Lehrer, die sich mit ihren Sachen nicht auskennen. Keine Sorge, informieren Sie einfach Ihre Klassenkameraden / Freunde, damit sie, wenn sie in die höhere Klasse aufsteigen und das wirkliche Leben nicht vergessen, besser noch eine anonyme Nachricht an Ihre Lehrerin schicken und sie fragen, ob sie es nicht getan haben Verstehen Sie einige der SQL-Funktionen und möchten Sie eine Demonstration. Lassen Sie sich von Ihrer Lehrerin eine Möglichkeit einfallen, der Klasse vorzuschlagen, was einzufügen ist, einschließlich Duplikate (die Daten müssen nicht groß sein). Wenn sie die Funktionsanzahl verwendet, haben Sie sie. Einige Leute werden es aufgreifen. Auch wenn sie andere Datenbanken sagt, lassen Sie Ihre Freundin fragen, welche, dann fangen Sie sie doppelt und sagen, Sie haben alle diese Datenbanken ausprobiert und sie funktionieren nicht wie sie gesagt hat und diese Zählung nimmt Duplikate auf.
quelle