2009-09-05 14 views

Odpowiedz

11

Od ANSI-92 SQL Standard (wyszukaj "NIEKTÓRE"). Also here, text

<some> ::= SOME | ANY 

Podejrzewam, że powodem jest to, że język SQL pochodzi z roku 1970, ale nie miał standardu do 1986 Standard podjąłby elementy istniejących dialektów SQL, więc musimy to some/jakiejkolwiek anomalii.

Ten artykuł napisany przez Brad Schulz wyjaśnia pewne różnice: „ALL, ANY, and SOME: The Three Stooges

+4

@ gbn Naprawdę podobał mi się artykuł "WSZYSTKO, JAKIEKOLWIEK i NIEKTÓRE: The Three Stooges". Dzięki. – Sung

+0

Link "Standard ANSI-92 SQL Standard" jest martwy – Ako

5

NIEKTÓRE i DOWOLNE są równoważne. DOWOLNA jest składnia ANSI. Dlaczego wprowadzono SOME, nie wiem. Może być z powodu czytelności, ale oba następne dwa zdania są łatwe do zrozumienia.

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

Mimo, serwer SQL będzie w obu przypadkach wykonanie:

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

który jest również bardzo łatwy do zrozumienia.

+0

Witam, Niikola: "Dlaczego NIEKTÓRE jest przedstawiane, nie wiem". i taki jest sens tego pytania. – Sung

+0

Próbowałem znaleźć przyczynę istnienia tych operatorów. Podobnie jak w przykładzie, poniższe zapytanie jest bardziej czytelne. – regeter

2

NIEKTÓRE i JAKIE są równoważne w standardzie SQL-92, więc podczas gdy nie odpowiada na twoje pytanie, aby je wskazać, oznacza to, że historia sięga daleko wstecz.

2

Pamiętaj, że niektóre produkty bazodanowe już od prawie trzech dekad. Dostawcy tacy jak Oracle, IBM i Microsoft zawsze włączali funkcje do swoich produktów, które następnie zostały włączone do standardu ANSI.

Czasami te funkcje zostały opracowane przez kilku sprzedawców niezależnie, więc albo standard, albo sprzedawca musiał wspierać synonimy słów kluczowych. Na przykład Oracle miał SELECT DISTINCT na długo przed ANSI określonego SELECT UNIQUE. Oracle obsługuje oba zastosowania.

Nie wiem, czy podobny scenariusz dotyczy przypadku NIEKTÓRYCH I KAŻDYCH. Ale wydaje się prawdopodobne.

3

"Czy istnieją historyczne przyczyny, dla których mają tę samą funkcjonalność?"

Odpowiem na faktyczne pytanie ... Na początku było to WSZYSTKO i WSZYSTKO.

ALL jest uniwersalnym kwantyfikatorem, natomiast KAŻDY miał być zawsze kwantyfikatorem egzystencjalnym. Jednak w języku angielskim DOWOLNY jest również często używany jako kwantyfikator uniwersalny."Mogę pokonać każdego z was" nie jest synonimem "Mogę pokonać NIEKTÓRE z was". Jest to w rzeczywistości synonim "mogę pokonać WSZYSTKO".

Z DOWOLNYM Mylącym, SOME został wprowadzony jako bardziej niezawodny synonim DOWOLNEGO przy przyjęciu standardu SQL-92. KAŻDY miał zostać zatrzymany na chwilę tylko dla wstecznej kompatybilności z poprzednimi wersjami produktu. Ale wciąż mamy to dzisiaj.

+0

Semantyka, ale powiedziałbym, że w twoim przykładzie "każdy" jest wciąż całkiem inny niż "wszyscy": "** każdy ** z ciebie" najprawdopodobniej znaczy " każdy [z was] ** (na raz) ** ", _nie_" wszyscy z was ** (jednocześnie) ** ". Mimo wszystko awansowano, ponieważ zgadzam się, że może istnieć niejednoznaczność, szczególnie dla każdego, kto nie przepełnia analizy tak jak ja. :) – criptych

Powiązane problemy