Numer jedna różnica dla mnie: jeśli HAVING
został usunięty z języka SQL, życie trwałoby mniej więcej tak jak wcześniej. Oczywiście, zapytania mniejszości będą musiały zostać przepisane przy użyciu wyprowadzonej tabeli, CTE, itd., Ale w rezultacie będą prawdopodobnie łatwiejsze do zrozumienia i utrzymania. Być może kod optymalizacyjny dostawcy musiałby zostać przepisany w celu uwzględnienia tego, ponownie szansa na poprawę w branży.
Teraz rozważ za chwilę usunięcie WHERE
z tego języka. Tym razem istniejąca liczba zapytań o istnieniu musiałaby zostać przepisana bez oczywistej alternatywnej konstrukcji. Kodery musiałyby być kreatywne, np. wewnętrzne połączenie z tabelą zawierającą dokładnie jeden wiersz (na przykład DUAL
w Oracle) przy użyciu klauzuli ON
w celu symulacji wcześniejszej klauzuli WHERE
. Takie konstrukcje byłyby wymyślne; byłoby oczywiste, że czegoś brakowało w języku, a sytuacja byłaby gorsza w wyniku.
TL; DR możemy jutro stracić HAVING
, a rzeczy nie będą gorsze, być może lepsze, ale tego samego nie można powiedzieć o WHERE
.
stąd odpowiedzi, wydaje się, że wiele ludowych nie zdają sobie sprawy, że HAVING
klauzula może być używany bez GROUP BY
klauzuli. W takim przypadku klauzula HAVING
jest stosowana do całego wyrażenia tabelowego i wymaga, aby tylko stałe były wyświetlane w klauzuli SELECT
. Zazwyczaj klauzula HAVING
będzie zawierała agregaty.
Jest to bardziej przydatne niż się wydaje. Na przykład, rozważmy tę kwerendę, aby sprawdzić, czy kolumna name
jest unikalny dla wszystkich wartości w T
:
SELECT 1 AS result
FROM T
HAVING COUNT(DISTINCT name) = COUNT(name);
Są tylko dwa możliwe wyniki: jeżeli klauzula HAVING
jest prawdziwe wtedy wynik z być pojedynczy wiersz zawierający wartość 1
, w przeciwnym razie wynikiem będzie pusty zbiór.
Linia, którą zacytujesz, wcale nie jest kluczem. Kluczowy klucz, [jak wskazano wcm] (http://stackoverflow.com/a/287496/877069), polega na tym, że 'HAVING' jest filtrem poagregacyjnym, podczas gdy' WHERE' jest filtrem preagregacji. –
ten link pomógł mi zrozumieć go lepiej niż wszystkie komentarze poniżej, myśl, że ktoś może uzyskać pomoc przez to http://www.codeproject.com/Articles/25258/Where-Vs-Having-Difference-between-having -and-Wher –