Cláusula SELECT
La cláusula SELECT consta de una variable de identificación individual que se define en la cláusula FROM, o de una expresión path de valor individual que se evalúa en una referencia a un objeto o en un valor CMP (persistencia gestionada por contenedor). Puede utilizar la palabra clave DISTINCT para eliminar las referencias duplicadas.
SELECT [ ALL | DISTINCT ] { expresión-path-valor-individual | expresión de agregación | OBJECT ( variable-identificación ) }
Una consulta que defina un método finder debe devolver un tipo de objeto coherente con el inicio asociado con el método finder. Por ejemplo, un método finder cuyo inicio sea un departamento no puede devolver objetos de empleado.
Ejemplo: cláusula SELECT
SELECT OBJECT(e) FROM EmpBean ej, EmpBean e WHERE ej.name = 'John' and e.salary > ej.salary
SELECT DISTINCT e.dept FROM EmpBean e where e.salary < 20000
SELECT e.dept.name FROM EmpBean e where e.salary < 2000
La consulta anterior devuelve una agrupación de valores de los nombres de los departamentos que tienen empleados que ganan menos de 20000.
SELECT avg(e.salary) FROM EmpBean e
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
Ejemplo: consultas dinámicas válidas
SELECT { ALL | DISTINCT } [ selection , ]* selection selection ::= { expression | scalar-subselect [[AS] id ] }
Una subselección de escala es una subselección que devuelve un valor individual:
SELECT e.name, e.salary+e.bonus as total_pay from EmpBean e
SELECT SUM( e.salary+e.bonus) from EmpBean e where e.dept.deptno = ?1