domingo, 20 de diciembre de 2015

JPA - Lenguaje JPQL II (continuación)

Tipos de Sentencias:

  1. SENTENCIAS SELECT
  2. SENTENCIAS AGGREGATE
  3. SENTENCIAS UPDATE
  4. SENTENCIAS DELETE

Seguimos aprendiendo sobre el resto de sentencias que podemos encontrarnos: Aggregate, Update y Delete

SENTENCIAS AGREGADAS

CLÁUSULA SELECT

Se pueden utilizar 5 funciones agregadas en la cláusula SELECT AVG, COUNT, MAX, MIN, and SUM

AVG Calcula la media del valor de un campo sobre el grupo. El tipo del campo debe ser numérico y el resultado será un Double

COUNT sirve para contar cuantos elementos hay sobre el grupo. Puede añadirse la palabra reservada DISTINCT para que elimine los valores duplicados antes de contar
SELECT e, COUNT(p), COUNT(DISTINCT p.type)
FROM Employee e JOIN e.phones p
GROUP BY e
MAX Calcula el valor máximo de un campo sobre el grupo
MIN Calcula el valor mínimo de un campo sobre el grupo
SUM Calcula la suma de valores de un campo sobre el grupo

CLÁUSULA GROUP BY

Define la expresión de agrupación sobre la cual los resultados serán agregados.
Debe ser una expresión de valor único como un campo o una entidad
SELECT d.name, COUNT(e)
FROM Department d JOIN d.employees e
GROUP BY d.name

Se pueden aplicar varias agregaciones en la misma consulta
SELECT d.name, COUNT(e), AVG(e.salary)
FROM Department d JOIN d.employees e
GROUP BY d.name

CLÁUSULA HAVING


Define un filtro que será aplicado después de que los resultados de la consulta han sido agrupados.  
Se puede considerar como una segunda cláusula de filtro que permite a su vez el uso de funciones agregadas
SELECT e, COUNT(p)
FROM Employee e JOIN e.projects p
GROUP BY e
HAVING COUNT(p) >= 2

El ejemplo recupera todos los empleados asignados a 2 o más proyectos

Son equivalentes a los SQL Update y las usaremos para actualizar las propiedades de nuestras entidades.
La cláusula WHERE es equivalente a la de las consultas SELECT
Se pueden actualizar varias propiedades en una única sentencia
Su estructura es la siguiente:
UPDATE entity_name [[AS] identification_variable]
SET update_statement {, update_statement}*
[WHERE conditional_expression]

UPDATE Phone p
SET p.number = CONCAT('288', SUBSTRING(p.number, LOCATE(p.number, '-'), 4)),
p.type = 'Business'
WHERE p.employee.address.city = 'Ottawa' AND
p.type = 'Office'

La anterior sentencia modifica los números de teléfono y tipo de los empleados de la ciudad de Otawa

Son equivalentes a los SQL DELETE y las usaremos para eliminar entidades. Su estructura es la siguiente:
DELETE FROM entity_name [[AS] identification_variable]
[WHERE condition]

DELETE FROM Employee e
WHERE e.department IS NULL

La cláusula WHERE es equivalente a la de las consultas SELECT. Sino se especifica todas las entidades del tipo indicado serán eliminadas


Continua aprendiendo…

En el siguiente artículo aprenderás sobre el API Criteria de JPA que nos permitirá construir sentencias de un modo más sencillo y mantenible gracias a las características propias del lenguaje Java 


No hay comentarios:

Publicar un comentario

Entradas populares