技术开发 频道

Enterprise JavaBeans查询语言(四)

【IT168 技术文档】

条件表达式
 
一个WHERE子句由一个条件表达式组成,它的优先级顺序为从左至右。你可以通过使用圆括号改变这个顺序。
 
下面是条件表达式的语法:
 
conditional_expression ::= conditional_term |
 
conditional_expression OR conditional_term
 
conditional_term ::= conditional_factor |
 
conditional_term AND conditional_factor
 
conditional_factor ::= [ NOT ] conditional_test
 
conditional_test :: = conditional_primary
 
conditional_primary ::=
 
simple_cond_expression | (conditional_expression)
 
simple_cond_expression ::=
 
comparison_expression |
 
between_expression |
 
like_expression |
 
in_expression |
 
null_comparison_expression |
 
empty_collection_comparison_expression |
 
collection_member_expression
 
操作符和它们的优先级
 
下面按照优先级递减的顺序列出了EJB QL的操作符。
 
跨越:. (一个句点)
算术:+ - (一元的)
* / (乘和除)
 + - (加和减)
比较:=
 〉
 〉=
 〈
 〈=
 〈〉 (不等于)
逻辑:NOT
 AND
 OR
 
BETWEEN表达式
 
一个BETWEEN表达式确定一个算术表达式是否属于某一数值范围。BETWEEN表达式的语法如下:
 
between_expression ::=
 
arithmetic_expression [NOT] BETWEEN
 
arithmetic_expression AND arithmetic_expression
 
这两个表达式是等价的:
 
p.age BETWEEN 15 AND 19
 
p.age 〉= 15 AND p.age 〈= 19
 
这两个表达式也是等价的:
 
p.age NOT BETWEEN 15 AND 19
 
p.age 〈 15 OR p.age 〉 19
 
如果一个算术表达式有一个NULL值,那么BETWEEN表达式的值未知。
 
IN表达式
 
一个IN表达式确定一个字符串是否属于一组字符串常量。下面是IN表达式的语法:
 
in_expression ::=
 
single_valued_path_expression
 
[NOT] IN (string_literal [, string_literal]* )
 
上述的single-valued path expression必须有一个String值。如果该single-valued path expression有一个NULL值,那么IN表达式的值未知。
 
在下面的例子中,如果国家是UK,那么表达式是TRUE。如果国家是Peru,则表达式是FALSE。
 
o.country IN (´UK´, ´US´, ´France´)
 
LIKE表达式
 
一个LIKE表达式确定一个通配符模型是否匹配一个字符串。下面是语法:
 
like_expression ::=
 
single_valued_path_expression
 
[NOT] LIKE pattern_value [ESCAPE escape-character]
 
上述的single-valued path expression必须有一个String值。如果这个值是NULL,那么LIKE表达式的值未知。通配符模型是一个可以包含通配符的字符串常量。下划线(_)表示任何一个单独的字符。百分号(%) 表示零个或多个字符。ESCAPE子句指定了一个通配符模型中的一个转义字符。
 
下面给出了一些简单的LIKE表达式。TRUE列和FALSE列表明了对于一个single-valued路径表达式LIKE表达式的值。
 
表达式:TRUE:FALSE
 
address.phone LIKE ´12%3´´123´´12993´´1234´
 
asentence.word LIKE ´l_se´´lose´´loose´
 
aword.underscored LIKE ´\_%´ ESCAPE ´´´_foo´´bar´
 
address.phone NOT LIKE ´12%3´:1234:´123´´12993´
 
NULL比较表达式
 
  一个NULL比较表达式检验一个single-valued路径表达式是否有一个NULL值。通常,这个表达式用来检验一个single-valued关联关系是否被设定。如果一个路径在运算过程中包含了一个NULL值,那么它将返回NULL值。下面是一个NULL比较表达式的语法:
 
null_comparison_expression ::=
 
single_valued_path_expression IS [NOT] NULL
 
空集比较表达式
 
  一个空集比较表达式检验一个collection-valued路径表达式是否包含元素。换句话说,它检验一个collection-valued关联关系是否被建立。下面是语法:
 
empty_collection_comparison_expression ::= collection_valued_path_expression IS
 
[NOT] EMPTY
 
如果collection-valued路径表达式是NULL,那么空集比较表达式的值也为NULL。
 
集合成员表达式
 
集合成员表达式确定一个值是否是集合中的成员。这个值必须与集合成员是同一类型。表达式的语法如下:
 
collection_member_expression ::=
 
{single_valued_navigation | identification_variable |
 
input_parameter}
 
[NOT] MEMBER [OF] collection_valued_path_expression
 
  如果collection-valued路径表达式是未知的,那么集合成员表达式的结果也是未知的。如果collection-valued路径对应一个空集,那么集合成员表达式的结果是FALSE。
 
函数表达式
 
  EJB QL包含几个字符串和算术函数,在下面列出了这几个函数。start和length参数的类型是int。它们对应了String参数中的位置。number参数可以是int型、float型或是double型。
 
字符串表达式
 
函数语法:返回值类型
 
CONCAT(String, String):String
 
SUBSTRING(String, start, length):String
 
LOCATE(String, String [, start]):int
 
LENGTH(String):int
 
算术表达式
 
函数语法:返回值类型
 
ABS(number):int, float, or double
 
SQRT(double):double
 
NULL值
 
  如果索引所指向的在持续化存储中无法找到,那么这就是NULL。对于包含NULL的条件表达式,EJB QL沿用SQL92中的规定。简单地说,有如下规定:
 
1、如果一个比较或算术操作包含一个未知值,它产生一个NULL值。
 
2、如果一个路径表达式包含一个NULL值,它返回一个NULL值。
 
3、在进行IS NULL检验时,NULL持续化字段或NULLsingle-valued关联字段的结果为TRUE。反之,在进行IS NOT NULL检验时结果为FALSE。
 
4、布尔操作或条件测试使用下表中定义的三值逻辑。(下面,T代表TRUE,F代表FALSE,U代表未知[译者注:也就是NULL]。)
 
逻辑与
 
AND:T:F:U
T :T:F:U
F :F:F:F
U :U:F:U
 
逻辑或
 
OR:T:F:U
T :T:T:T
F :T:F:U
U :T:U:U
 
逻辑反
 
NOT
T:F
F:T
U:U
 
条件测试
 
条件测试:T:F:U
表达式IS TRUE:T:F:F
表达式IS FALSE:F:T:F

表达式未知:F:F:T

0
相关文章