📄 ejbql5.html
字号:
</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">FROM Player AS p, IN (p.teams) t WHERE <span style="font-weight: bold">t.league.sport</span> = 'soccer<span style="font-style: italic">'</span><a name="wp80049"> </a></pre></div><a name="wp80051"> </a><h3 class="pHeading2">WHERE Clause</h3><a name="wp80053"> </a><p class="pBody">The <code class="cCode">WHERE</code> clause specifies a conditional expression that limits the values returned by the query. The query returns all corresponding values in the data store for which the conditional expression is <code class="cCode">TRUE</code>. Although usually specified, the <code class="cCode">WHERE</code> clause is optional. If the <code class="cCode">WHERE</code> clause is omitted, then the query returns all values. The high-level syntax for the <code class="cCode">WHERE</code> clause follows:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">where_clause ::= WHERE conditional_expression<a name="wp80054"> </a></pre></div><a name="wp80055"> </a><h4 class="pHeading3">Literals</h4><a name="wp80056"> </a><p class="pBody">There are three kinds of literals: string, numeric, and boolean.</p><a name="wp80057"> </a><h5 class="pHeading4">String Literals</h5><a name="wp80058"> </a><p class="pBody">A string literal is enclosed in single quotes: </p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">'Duke'<a name="wp80059"> </a></pre></div><a name="wp80060"> </a><p class="pBody">If a string literal contains a single quote, you indicate the quote with two single quotes:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">'Duke''s'<a name="wp80061"> </a></pre></div><a name="wp80062"> </a><p class="pBody">Like a Java <code class="cCode">String</code>, a string literal in EJB QL uses the Unicode character encoding.</p><a name="wp80063"> </a><h5 class="pHeading4">Numeric Literals</h5><a name="wp80064"> </a><p class="pBody">There are two types of numeric literals: exact and approximate.</p><a name="wp80065"> </a><p class="pBody">An exact numeric literal is a numeric value without a decimal point, such as 65,<span style="font-family: Symbol"> -</span>233, <span style="font-family: Symbol">+</span>12. Using the Java integer syntax, exact numeric literals support numbers in the range of a Java <code class="cCode">long</code>.</p><a name="wp80066"> </a><p class="pBody">An approximate numeric literal is a numeric value in scientific notation, such as 57.,<span style="font-family: Symbol"> </span><span style="font-family: Symbol">-</span>85.7, <span style="font-family: Symbol">+</span>2.1. Using the syntax of the Java floating point literal, approximate numeric literals support numbers in the range of a Java <code class="cCode">double</code>.</p><a name="wp80067"> </a><h5 class="pHeading4">Boolean Literals</h5><a name="wp80068"> </a><p class="pBody">A boolean literal is either <code class="cCode">TRUE</code> or <code class="cCode">FALSE</code>. These keywords are not case sensitive.</p><a name="wp80071"> </a><h4 class="pHeading3">Input Parameters</h4><a name="wp80072"> </a><p class="pBody">An input parameter is designated by a question mark (<code class="cCode">?</code>) followed by an integer. For example, the first input parameter is <code class="cCode">?1</code>, the second is <code class="cCode">?2</code>, and so forth.</p><a name="wp80073"> </a><p class="pBody">The following rules apply to input parameters:</p><div class="pSmartList1"><ul class="pSmartList1"><a name="wp80074"> </a><div class="pSmartList1"><li>They can be used only in a <code class="cCode">WHERE</code> clause.</li></div><a name="wp80075"> </a><div class="pSmartList1"><li>Their use is restricted to a single-valued path expression within a conditional expression.</li></div><a name="wp80076"> </a><div class="pSmartList1"><li>They must be numbered, starting with the integer 1.</li></div><a name="wp80077"> </a><div class="pSmartList1"><li>The number of input parameters in the <code class="cCode">WHERE</code> clause must not exceed the number of input parameters in the corresponding finder or select method.</li></div><a name="wp80078"> </a><div class="pSmartList1"><li>The type of an input parameter in the <code class="cCode">WHERE</code> clause must match the type of the corresponding argument in the finder or select method.</li></div></ul></div><a name="wp80081"> </a><h4 class="pHeading3">Conditional Expressions</h4><a name="wp80082"> </a><p class="pBody">A <code class="cCode">WHERE</code> clause consists of a conditional expression, which is evaluated from left to right within a precedence level. You may change the order of evaluation with parentheses.</p><a name="wp80083"> </a><p class="pBody">Here is the syntax of a conditional expression:</p><a name="wp81121"> </a><p class="pBody">conditional_expression ::= conditional_term |<br /> conditional_expression <code class="cCodeBold">OR</code> conditional_term<br /><br />conditional_term ::= conditional_factor | <br /> conditional_term <code class="cCodeBold">AND</code> conditional_factor<br /><br />conditional_factor ::= [<code class="cCodeBold">NOT</code> ] conditional_primary<br /><br />conditional_primary ::= simple_cond_expression |<br /> (conditional_expression)<br /><br />simple_cond_expression ::=<br /> comparison_expression | between_expression | <br /> like_expression | in_expression |<br /> null_comparison_expression |<br /> empty_collection_comparison_expression |<br /> collection_member_expression</p><a name="wp80086"> </a><h4 class="pHeading3">Operators and Their Precedence</h4><a name="wp80125"> </a><p class="pBody"><a href="EJBQL5.html#wp80093">Table 24-2</a> lists the EJB QL operators in order of decreasing precedence.</p><div align="left"><table border="1" summary="EJB QL Operator Precedence" id="wp80093"> <caption><a name="wp80093"> </a><div class="pTableTitle">Table 24-2 EJB QL Operator Precedence</div></caption> <tr align="center"> <th><a name="wp80097"> </a><div class="pCellHeading"> Type</div></th> <th><a name="wp80099"> </a><div class="pCellHeading">Precedence Order</div></th></tr> <tr align="left"> <td><a name="wp80101"> </a><div class="pCellBody">Navigation</div></td> <td><a name="wp80103"> </a><div class="pCellBody"><code class="cCode">. </code>(a period)</div></td></tr> <tr align="left"> <td><a name="wp80105"> </a><div class="pCellBody">Arithmetic<br /><br /></div></td> <td><a name="wp80107"> </a><div class="pCellBody"><code class="cCode">+ -</code> (unary)</div><a name="wp80108"> </a><div class="pCellBody"><code class="cCode">* /</code> (multiplication and division)</div><a name="wp80109"> </a><div class="pCellBody">+ - (addition and subtraction)</div></td></tr> <tr align="left"> <td><a name="wp80111"> </a><div class="pCellBody">Comparison<br /><br /><br /><br /><br /></div></td> <td><a name="wp80113"> </a><div class="pCellBody"><code class="cCode">=</code></div><a name="wp80114"> </a><div class="pCellBody"><code class="cCode">></code></div><a name="wp80115"> </a><div class="pCellBody"><code class="cCode">>=</code></div><a name="wp80116"> </a><div class="pCellBody"><code class="cCode"><</code></div><a name="wp80117"> </a><div class="pCellBody"><code class="cCode"><=</code></div><a name="wp80118"> </a><div class="pCellBody"><code class="cCode"><></code> (not equal)</div></td></tr> <tr align="left"> <td><a name="wp80120"> </a><div class="pCellBody">Logical<br /><br /></div></td> <td><a name="wp80122"> </a><div class="pCellBody"><code class="cCode">NOT </code></div><a name="wp80123"> </a><div class="pCellBody"><code class="cCode">AND </code></div><a name="wp80124"> </a><div class="pCellBody"><code class="cCode">OR</code></div></td></tr></table></div><p class="pBody"></p><a name="wp80127"> </a><h4 class="pHeading3">BETWEEN Expressions</h4><a name="wp80128"> </a><p class="pBody">A <code class="cCode">BETWEEN</code> expression determines whether an arithmetic expression falls within a range of values. The syntax of the <code class="cCode">BETWEEN</code> expression follows:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">between_expression ::= arithmetic_expression [<span style="font-weight: bold">NOT</span>] <span style="font-weight: bold">BETWEEN</span> arithmetic_expression <span style="font-weight: bold">AND</span> arithmetic_expression <a name="wp80129"> </a></pre></div><a name="wp80130"> </a><p class="pBody">These two expressions are equivalent:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">p.age BETWEEN 15 AND 19 p.age >= 15 AND p.age <= 19<a name="wp80131"> </a></pre></div><a name="wp80132"> </a><p class="pBody">The following two expressions are also equivalent:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">p.age NOT BETWEEN 15 AND 19 p.age < 15 OR p.age > 19<a name="wp80133"> </a></pre></div><a name="wp80134"> </a><p class="pBody">If an arithmetic expression has a <code class="cCode">NULL</code> value, then the value of the <code class="cCode">BETWEEN</code> expression is unknown.</p><a name="wp80135"> </a><h4 class="pHeading3">IN Expressions</h4><a name="wp80136"> </a><p class="pBody">An <code class="cCode">IN</code> expression determines whether or not a string belongs to a set of string literals. Here is the syntax of the <code class="cCode">IN</code> expression:</p><a name="wp81134"> </a><p class="pBody">in_expression ::=<br /> cmp_path_expression [<code class="cCodeBold">NOT</code> ] <code class="cCodeBold">IN<br /></code> ( {literal | input_parameter} <br /> [, { literal | input_parameter} ]*)</p><a name="wp80138"> </a><p class="pBody">The path expression must have a string or numeric value. If the path expression has a <code class="cCode">NULL</code> value, then the value of the <code class="cCode">IN</code> expression is unknown.</p><a name="wp80139"> </a><p class="pBody">In the following example, if the country is <code class="cCode">UK</code> the expression is <code class="cCode">TRUE</code>. If the country is <code class="cCode">Peru</code> it is <code class="cCode">FALSE</code>.</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">o.country IN ('UK', 'US', 'France')<a name="wp80140"> </a></pre></div><a name="wp80141"> </a><h4 class="pHeading3">LIKE Expressions</h4><a name="wp80142"> </a><p class="pBody">A <code class="cCode">LIKE</code> expression determines whether a wildcard pattern matches a string. Here is the syntax:</p><div class="pPreformattedRelative"><pre class="pPreformattedRelative">like_expression ::= cmp_path_expression [<code class="cCodeBold">NOT</code> ] <code class="cCodeBold">LIKE</code> pattern_value [<code class="cCodeBold">ESCAPE</code> escape_character]<a name="wp80143"> </a></pre></div><a name="wp80144"> </a><p class="pBody">The path expression must have a string or numeric value. If this value is <code class="cCode">NULL</code>, then the value of the <code class="cCode">LIKE</code> expression is unknown. The pattern value is a string literal that may contain wildcard characters. The underscore (_) wildcard character represents any single character. The percent (<code class="cCode">%</code>) wildcard character represents zero or more characters. The <code class="cCode">ESCAPE</code> clause specifies an escape character for the wildcard characters in the pattern value. <a href="EJBQL5.html#wp80152">Table 24-3</a> shows some sample <code class="cCode">LIKE</code> expressions.</p><a name="wp80189"> </a><p class="pBody"></p><div align="left"><table border="1" summary="LIKE Expression Examples" id="wp80152"> <caption><a name="wp80152"> </a><div class="pTableTitle">Table 24-3 LIKE Expression Examples</div></caption> <tr align="center"> <th><a name="wp80158"> </a><div class="pCellHeading"> Expression</div></th> <th><a name="wp80160"> </a><div class="pCellHeading">TRUE</div></th> <th><a name="wp80162"> </a><div class="pCellHeading">FALSE</div></th></tr> <tr align="left"> <td><a name="wp80164"> </a><div class="pCellBody"><code class="cCode">address.phone LIKE '12%3'</code></div></td> <td><a name="wp80166"> </a><div class="pCellBody"><code class="cCode">'123'</code></div><a name="wp80167"> </a><div class="pCellBody"><code class="cCode">'12993'</code></div></td> <td><a name="wp80169"> </a><div class="pCellBody"><code class="cCode">'1234'</code></div></td></tr> <tr align="left"> <td><a name="wp80171"> </a><div class="pCellBody"><code class="cCode">asentence.word LIKE 'l_se'</code></div></td> <td><a name="wp80173"> </a><div class="pCellBody"><code class="cCode">'lose'</code></div></td> <td><a name="wp80175"> </a><div class="pCellBody"><code class="cCode">'loose'</code></div></td></tr> <tr align="left"> <td><a name="wp80177"> </a><div class="pCellBody"><code class="cCode">aword.underscored LIKE '\_%' ESCAPE '\'</code></div></td> <td><a name="wp80179"> </a><div class="pCellBody"><code class="cCode">'_foo'</code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -