Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Having o Where?

  1. #1

    Having o Where?

    Salve chiedo scusa per la domanda stupida, ma stavo leggendo dei manuali SQL e non riesco a capire quando si deve utilizzare una WHERE o una HAVING.
    Quel che ho capito è che la HAVING si usa nel caso la condizione sia una funzione di aggregazione, pero non si puo fare lo stesso con la WHERE e una SELECT nidificata?

    Vi faccio degli esempi cosi magari vi do una mano ad aiutarmi:

    SELECT Nome,Cognome
    FROM Studenti
    WHERE Media>= (SELECT AVG(Media)
    FROM Studenti;

    SELECT Nome,Cognome
    FROM Studenti
    HAVING Media>=AVG(Media)

    Probabilmente avro scritto qualche boiata pero vi sarei grado per un chiarimento
    Alessio_Programmer

  2. #2
    Non si deve usare la clausola HAVING per eliminare righe che si possono invece escludere con WHERE.

    Where agisce sull'intera tabella selezionando dei record su quali poi puo' venire applicata una funzione di raggruppamento con GROUP BY e sulle righe prodotte la clausola HAVING applichera' una ulteriore condizione.

    in una SELECT si hanno delle priorita' di risoluzione, prima si risolve il nome della tabella, poi la clausola WHERE, poi i nomi dei campi. Vengono quindi estratti i record che soddisfano il WHERE e la lista dei campi, su questi record potra' agire group by ed HAVING potra' applicare ulteriori condizioni.

    Quindi HAVING potra' gestire gli alias dei campi mentre il WHERE no perche' viene risolto prima.

    Mi pare che MySQL, in modo silente, cambi HAVING in WHERE per ottimizzare di suo la query. Quindi sara' poco visibile una differenza pratica della sintassi usata.Comunque sia, lo standard SQL prescrive di usare HAVING solo dopo una funzione di raggruppamento. Quindi per mysql il permettere l'uso di having senza un raggruppamento e' una variazione dallo standard SQL.


    @ ho fatto un controllo sul manuale...

    http://dev.mysql.com/doc/refman/5.0/...mizations.html
    #

    HAVING is merged with WHERE if you do not use GROUP BY or aggregate functions (COUNT(), MIN(), and so on).

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ok grazie 1000 per il chiarimento...sai domani ho la seconda prova di informatica e mi era sorto questo dubbio
    Ciao ciao
    Alessio_Programmer

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.