iberck
9/2/2015 - 11:20 AM

JPQL

JPQL

IN Expression

All the employees who live in New York or California:

SELECT e
FROM Employee e
WHERE e.address.state IN ('NY', 'CA')

Employees who work in departments that are contributing to projects beginning with the prefix "QA":

SELECT e
FROM Employee e
WHERE e.department IN (SELECT DISTINCT d
FROM Department d JOIN d.employees de JOIN de.projects p
WHERE p.name LIKE 'QA%')

The IN expression can also be negated using the NOT operator. For example, the following query returns all the Phone entities representing phone numbers other than for the office or home:

SELECT p
FROM Phone p
WHERE p.type NOT IN ('Office', 'Home')

ALL

Retorna true cuando el elemento del lado izquierdo concide con cada uno de los elementos que retorna la consulta del lado derecho, a la izquierda de ALL se indica el operador de comparación. El siguiente query retorna true cuando e.salary sea menor a cada uno de los salarios que retorne el subquery:

e.salary < ALL (SELECT d.salary
FROM e.directs d)

ANY

Retorna true cuando el elemento del lado izquierdo concide con al menos un elemento de los que retorna la consulta del lado derecho. El siguiente query retorna true cuando e.salary sea menor a cualquiera de los salarios que retorne el subquery:

e.salary < ANY (SELECT d.salary
FROM e.directs d)

CASE

La cláusula CASE se puede aplicar como un if/else o como un switch/case:

if/else:

CASE WHEN TYPE(p) = DesignProject THEN 'Development'
WHEN TYPE(p) = QualityProject THEN 'QA'
ELSE 'Non-Development'
END

switch/case:

CASE TYPE(p)
WHEN DesignProject THEN 'Development'
WHEN QualityProject THEN 'QA'
ELSE 'Non-Development'
END