logo

Diferència entre ON i TENIR

Les clàusules ON i HAVING es discuteixen en profunditat en aquest article. També s'utilitzen per filtrar registres en consultes SQL. La diferència entre la clàusula ON i HAVING és la pregunta més freqüent que es planteja durant una entrevista. La principal diferència entre ells és que la clàusula WHERE s'utilitza per especificar una condició per filtrar registres abans que es faci cap agrupació, mentre que la clàusula HAVING s'utilitza per especificar una condició per filtrar valors d'un grup. Abans de fer la comparació, primer els coneixerem SQL clàusules.

ON vs TENIR

Clàusula ON

La clàusula WHERE de MySQL s'utilitza amb SELECT , INSERT , ACTUALITZACIÓ , i ELIMINAR consultes per filtrar dades de la taula o relació. Descriu una condició específica a l'hora de recuperar registres d'una taula única o de diverses taules mitjançant la clàusula JOIN. Si es compleix la condició especificada, retorna el valor particular de la taula. La clàusula WHERE posa condicions a les columnes seleccionades.

La clàusula WHERE de MySQL també ho pot fer implementar les connexions lògiques AND , OR , i NOT. Es coneixen com la condició booleana que ha de ser veritat per recuperar les dades. Les expressions connectives lògiques utilitzen els operadors de comparació com els seus operands<, ,>=, = i. Els operadors de comparació s'utilitzen normalment per comparar cadenes i expressions aritmètiques.

La sintaxi següent il·lustra l'ús de la clàusula WHERE:

cua java
 SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists; 

Prenguem un exemple per entendre aquesta clàusula. Suposem que tenim una taula anomenada empleats que continguin les dades següents:

ON vs TENIR

Si volem per obtenir el detall de l'empleat amb jornada laboral superior a 9 , llavors podem utilitzar la declaració de la següent manera:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

Obtindrem la sortida següent on podem veure els detalls dels empleats amb hores de treball superiors a 9:

ON vs TENIR

Si fem servir la consulta anterior amb el AGRUPAR PER clàusula , obtindrem el resultat diferent:

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9 GROUP BY name; 

Aquí teniu la sortida:

caràcter de cadena java
ON vs TENIR

Clàusula HAVING

clàusula HAVING a MySQL utilitzat conjuntament amb GROUP BY La clàusula ens permet especificar condicions que filtren quins resultats del grup apareixen al resultat. Només retorna aquells valors dels grups del resultat final que compleixen determinades condicions. També podem utilitzar les clàusules WHERE i HAVING junts durant la selecció. En aquest cas, la clàusula WHERE filtra primer les files individuals, després s'agrupen les files, realitza càlculs agregats i, finalment, la clàusula HAVING filtra els grups.

Aquesta clàusula posa condicions als grups creats per la clàusula GROUP BY. Es comporta com la clàusula WHERE quan la sentència SQL no utilitza la paraula clau GROUP BY. Podem utilitzar les funcions agregades (grup) com SUM , MIN, MAX, AVG i COMPTE només amb dues clàusules: SELECT i HAVING.

La sintaxi següent il·lustra l'ús de la clàusula HAVING:

 SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition; 

Prenguem un exemple per entendre aquesta clàusula. Aquí estem considerant la mateixa taula empleats per a la demostració.

Si volem per obtenir la jornada total de treball de cada treballador la jornada laboral del qual sigui superior a 6 hores , llavors podem utilitzar la declaració de la següent manera:

 mysql&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

Obtindrem la sortida següent on podem veure les hores de treball totals de cada empleat:

ON vs TENIR

Diferències clau entre la clàusula ON i HAVING

Els punts següents expliquen les principals diferències entre la base de dades i l'esquema:

La classe abstracta pot tenir un constructor
  • La clàusula WHERE filtra les files individuals, mentre que la clàusula HAVING filtra els grups en lloc d'una fila a la vegada.
  • No podem utilitzar la clàusula WHERE amb funcions agregades perquè funciona per filtrar files individuals. En canvi, HAVING pot funcionar amb funcions agregades perquè s'utilitza per filtrar grups.
  • Les operacions de fila les gestiona la clàusula WHERE, mentre que la clàusula HAVING gestiona les operacions de columnes a files o grups resumits.
  • WHERE ve abans de GROUP BY, el que significa que la clàusula WHERE filtre les files abans de realitzar càlculs agregats. HAVING ve després de GROUP BY, el que significa que la clàusula HAVING filtra les files després de realitzar càlculs agregats. En conseqüència, HAVING és més lent que WHERE en termes d'eficiència i s'ha d'evitar sempre que sigui possible.
  • Podem combinar la clàusula WHERE i HAVING junts en una consulta SELECT. En aquest cas, la clàusula WHERE s'utilitza primer per filtrar files individuals. A continuació, s'agrupen les files, realitzen càlculs agregats i, finalment, s'utilitza la clàusula HAVING per filtrar els grups.
  • La clàusula WHERE recupera les dades desitjades en funció de la condició especificada. D'altra banda, la clàusula HAVING primer obté dades senceres i després la separació es fa en funció de la condició especificada.
  • Sense una instrucció SELECT, no podem utilitzar la clàusula HAVING. Per contra, podem utilitzar un WHERE amb sentències SELECT, UPDATE i DELETE.
  • La clàusula WHERE és un filtre previ, mentre que la clàusula HAVING és un filtre posterior.

Gràfic de comparació ON vs. HAVING

El següent gràfic de comparació explica les seves principals diferències d'una manera ràpida:

Base de comparació Clàusula ON Clàusula HAVING
Definició S'utilitza per realitzar filtracions en files individuals. S'utilitza per realitzar filtracions en grups.
Bàsic S'implementa en operacions de fila. S'implementa en operacions de columna.
Obtenció de dades La clàusula WHERE obté les dades específiques de files concretes en funció de la condició especificada La clàusula HAVING obté primer les dades completes. Després els separa segons la condició donada.
Funcions agregades La clàusula WHERE no permet treballar amb funcions agregades. La clàusula HAVING pot funcionar amb funcions agregades.
Actuar com La clàusula ON actua com a prefiltre. La clàusula HAVING actua com a post-filtre.
S'utilitza amb Podem utilitzar la clàusula WHERE amb les sentències SELECT, UPDATE i DELETE. La clàusula HAVING només es pot utilitzar amb la instrucció SELECT.
AGRUPAR PER La clàusula GROUP BY ve després de la clàusula WHERE. La clàusula GROUP BY precedeix la clàusula HAVING.

Conclusió

En aquest article, hem fet una comparació entre la clàusula ON i HAVING. Aquí, concloem que ambdues clàusules funcionen de la mateixa manera en filtrar les dades, excepte que alguna característica addicional fa que la clàusula HAVING sigui més popular. Podem treballar de manera eficient amb funcions agregades a la clàusula HAVING mentre que WHERE no permet funcions agregades.