logo

Tenir contra la clàusula On a SQL

La diferència entre la clàusula have i where a SQL és que la clàusula where cann ot s'utilitzarà amb agregats, però la clàusula havent pot.

El on La clàusula funciona amb les dades de la fila, no amb les dades agregades. Considerem la taula següent 'Marques'.



Puntuació del curs de l'estudiant

a c1 40

a c2 50



b c3 60

d c1 70

e c2 80



Considereu la consulta

SELECT>Student, Score FROM Marks WHERE Score>=40>

Això seleccionaria les dades fila per fila.

El tenint la clàusula funciona amb dades agregades.

Per exemple, la sortida de la consulta següent

SELECT>Student,>SUM>(score) AS>>total>FROM>Marks> GROUP BY>Student>

Total d'estudiants

un 90

b 60

d 70

i 80

Quan apliquem tenir a la consulta anterior, obtenim

SELECT>Student,>SUM>(score) AS>>total>FROM>Marks> GROUP BY>Student>

HAVING>total>70>

Total d'estudiants

un 90

i 80

Nota: no és una regla predefinida, però en un bon nombre de consultes SQL, utilitzem WHERE abans de GROUP BY i HAVING després de GROUP BY. La clàusula On actua com a prefiltre on com Tenir com a post filtre.