2009-09-05 8 views

Antwort

11

Von der ANSI-92 SQL Standard (Suche nach "SOME"). Also here, text

<some> ::= SOME | ANY 

Ich vermute, der Grund ist, dass die SQL-Sprache aus den frühen 1970er Jahren stammt, hatte aber keinen Standard bis 1986 Die Standardelemente der bestehenden SQL-Dialekte genommen hätten, so haben wir diese SOME/jede Anomalie.

Dieser Blog-Artikel von Brad Schulz erklärt einige Unterschiede: „ALL, ANY, and SOME: The Three Stooges

+4

@gbn Ich habe wirklich "ALL, ANY, und einige: The Three Stooges" Artikel genossen. Vielen Dank. – Sung

+0

'ANSI-92 SQL Standard' Link ist tot – Ako

5

SOME und ANY sind gleichwertig. ANY ist ANSI-Syntax. Warum SOME eingeführt wird, weiß ich nicht. Könnte wegen der Lesbarkeit sein, aber beide der nächsten zwei Sätze sind leicht zu verstehen.

WHERE 5000 < ANY(SELECT Price FROM dbo.items) 
WHERE 5000 < SOME(SELECT Price FROM dbo.items) 

Obwohl SQL Server wird in beiden Fällen durchführen:

WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000) 

die auch sehr einfach zu verstehen ist.

+0

Hallo, Niikola: "Warum SOME eingeführt wird, weiß ich nicht". und das ist die Art von Punkt dieser Frage. – Sung

+0

Ich habe versucht, den Grund für diesen Operator zu finden. Wie in Ihrem Beispiel finde ich die folgende Abfrage lesbarer. – regeter

2

SOME und ANY sind äquivalent im SQL-92-Standard, also gibt es zwar keine Antwort auf Ihre Frage, um darauf hinzuweisen, aber es zeigt an, dass der Verlauf weit zurück reicht.

2

Denken Sie daran, dass einige Datenbankprodukte für fast drei Jahrzehnte gewesen. Hersteller wie Oracle, IBM und Microsoft haben immer Funktionen in ihre Produkte aufgenommen, die später in den ANSI-Standard integriert wurden.

Manchmal wurden diese Funktionen von mehreren Anbietern unabhängig voneinander entwickelt, sodass entweder der Standard oder der Anbieter Synonyme für Schlüsselwörter unterstützen musste. Zum Beispiel hatte Oracle SELECT DISTINCT lange vor ANSI angegeben SELECT UNIQUE. Oracle unterstützt beide Anwendungen.

Ich weiß nicht, ob ein ähnliches Szenario für SOME und ANY gilt. Aber es scheint wahrscheinlich.

3

"Gibt es historische Gründe, warum sie die gleiche Funktionalität haben?"

Ich werde die eigentliche Frage beantworten ... Am Anfang war es nur ALL und ANY.

ALL ist ein universeller Quantifizierer, während ANY immer ein existenzieller Quantifizierer sein sollte. Im Englischen wird ANY jedoch häufig als universeller Quantifizierer verwendet."Ich kann JEDEN von euch schlagen" ist kein Synonym für "Ich kann EINIGE von euch schlagen". Es ist in der Tat Synonym von "Ich kann dich alle schlagen".

Mit etwas zu verwirrend, wurde SOME als ein zuverlässigeres Synonym für ANY mit der Übernahme des SQL-92-Standards eingeführt. ANY sollte nur für die Rückwärtskompatibilität mit früheren Produktversionen beibehalten werden. Aber wir haben es heute noch.

+0

Semantik, aber ich würde sagen, dass in Ihrem Beispiel "any" immer noch ganz anders als "alle" ist: "** any ** von Ihnen" würde wahrscheinlich bedeuten " irgendwer von euch ** (zu einer Zeit) ** ", _nicht_" alle von euch ** (sofort) ** ". Upvoted sowieso, weil ich zustimme, kann es Mehrdeutigkeit sein, vor allem für jeden, der nicht wie ich übermäßig analysieren. :) – criptych

Verwandte Themen