SELECT 子句
SELECT 子句由 FROM 子句中定义的单个标识变量或求值结果为对象引用或容器管理的持久性 (CMP) 值的单值路径表达式组成。您可以使用 DISTINCT 关键字来消除重复引用。
对于 finder 和 select 查询,以下示例中描述了 SELECT 子句的语法:
SELECT [ ALL | DISTINCT ] { single-valued-path-expression | aggregation expression | OBJECT ( identification-variable ) }
对于定义 finder 方法的查询,该查询必须返回与 home(与 finder 方法关联)一致的对象类型。例如,对部门 home 用 finder 方法,那么无法返回职员对象。
示例:SELECT 子句
找到收入多于 John 的所有职员:
SELECT OBJECT(e) FROM EmpBean ej, EmpBean e WHERE ej.name = 'John' and e.salary > ej.salary
找到有一个或多个职员的收入少于 20000 的所有部门:
SELECT DISTINCT e.dept FROM EmpBean e where e.salary < 20000
select 方法查询可以有求值为任意值的路径表达式:
SELECT e.dept.name FROM EmpBean e where e.salary < 2000
前一个查询返回职员的收入少于 20000 的那些部门的名称值集合。
select 方法查询可以返回聚集值:
SELECT avg(e.salary) FROM EmpBean e
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[z/OS]](../images/ngzos.gif)
示例:有效动态查询
对于动态查询,语法如下所示:
SELECT { ALL | DISTINCT } [ selection , ]* selection selection ::= { expression | scalar-subselect [[AS] id ] }
标量子查询是返回单个值的子查询。
以下是动态查询的示例:
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