Ver vídeo
así como a cláusula “onde” permítelle seleccionar (ou Rexeitar) rexistra individuos; A cláusula “tendo” permítelle seleccionar (ou rexeitar) un grupo de rexistros.
Se queremos saber cantos libros agrupados por editorial utilizamos a seguinte instrución xa aprendida:
select editorial, count(*) from libros group by editorial;
Se queremos saber cantos libros agrupados por editorial pero considerando só algúns grupos, por exemplo, aqueles que devolven un valor superior a 2, usamos a seguinte instrución:
select editorial, count(*) from libros group by editorial having count(*)>2;
“Tendo” úsase, seguido da condición de busca, para seleccionar certas filas devoltas pola cláusula “Grupo por”.
Imos Vexa outros exemplos. Queremos que os prezos medios agrupados por editorial, pero só aqueles grupos cuxa media supera os 25 pesos:
select editorial, avg(precio) from libros group by editorial having avg(precio)>25;
Nalgúns casos é posible confundir as cláusulas “onde “E” Tendo “. Queremos contar os rexistros agrupados por Editorial sen ter en conta o editor “Planeta”.
Analizar as seguintes frases:
select editorial, count(*) from libros where editorial'Planeta' group by editorial; select editorial, count(*) from libros group by editorial having editorial'Planeta';
Ambos devolven o mesmo resultado, pero son diferentes. O primeiro, selecciona todos os rexistros rexeitando o editorial “Planet” e logo agréganlles para contarlos. O segundo, selecciona todos os rexistros, agrupa-los para contarlos e finalmente rexeitar a fila coa conta correspondente á editorial “Planet”.
Non debemos confundir a cláusula “onde” coa cláusula “con” ter ” ; O primeiro establece condicións para a selección de rexistros dunha “selección”; O segundo conxunto de condicións para a selección de rexistros dun “grupo por” saída.
Vexamos outros exemplos combinando “Onde” e “Tendo”. Queremos que o número de libros, sen considerar o prezo nulo, agrupado por editorial, sen considerar o editor “PLANET”:
select editorial, count(*) from libros where precio is not null group by editorial having editorial'Planeta';
Aquí, seleccione os rexistros rexeitados aqueles que non cumpren coa condición dada en “Onde”, entón agrúpalos por “editorial” e, finalmente, rexeita os grupos que non cumpren coa condición dada no “Havir”.
A cláusula é Usou “ter” coas funcións do grupo, isto non pode facer a cláusula “onde”. Por exemplo, queremos que os prezos medios agrupados por editorial, deses editoriais que teñen máis de 2 libros:
select editorial, avg(precio) from libros group by editorial having count(*) > 2;
nunha cláusula “ter” pode haber varios Termos. Ao usar varias condicións, ten que combinalas con operadores lóxicos (e, ou, non).
Podemos atopar o maior valor dos libros agrupados e ordenados por editorial e seleccionar as filas que teñen un valor Menos de 100 e superiores a 30:
select editorial, max(precio) as mayor from libros group by editorial having min(precio)30 order by editorial;
Entón, usamos a “ter” o cobieve restrinxir as filas que devolven unha saída de “grupo por”. Sempre pasa despois da cláusula “Grupo por” e antes da cláusula “orde por” se ten.