問い合わせは,<問い合わせ文>(SELECT文)によって表現します。<問い合わせ文>には,SELECT句,FROM句,WHERE句,ORDER BY句,GROUP BY句およびHAVING句を指定できます。最も基本的な<問い合わせ文>は,SELECT句とFROM句から構成されます。
SELECT句には,検索結果として取得する項目を指定します。
FROM句,WHERE句,GROUP BY句およびHAVING句は,検索対象式として指定します。FROM句には,検索対象になるクラスを指定します。WHERE句には,検索条件を指定します。検索条件は,述語で表現します。述語については,「4.5.8 述語の構文規則」を参照してください。GROUP BY句には,複数のオブジェクトを一つのグループとするかどうかを指定します。HAVING句には,WHERE句,FROM句,GROUP BY句の結果,得られる各グループを選択する条件を指定します。なお,WHERE句およびHAVING句には,副問い合わせも指定できます。
ORDER BY句には,検索結果として取得した集合をソートするかどうかを指定します。ORDER BY句については,「4.5.10 データ操作の構文規則」を参照してください。
!! <問い合わせ文>の形式
<問い合わせ文> ::= <問い合わせ式> 〔 <ORDER BY句>〕
<問い合わせ式> ::= <問い合わせ指定>
|<左括弧> <問い合わせ式> <右括弧>
!! <問い合わせ指定>の形式
<問い合わせ指定> ::= SELECT 〔 <集合指定子> 〕
<選択項目の並び> <検索対象式>
<選択項目の並び> ::= <アスタリスク>
|<選択項目> 〔 { <コンマ> <選択項目> }... 〕
<選択項目> ::= <一次子>
<集合指定子> ::= DISTINCT|ALL
!! <検索対象式>の形式
<検索対象式> ::= <FROM句>
〔 <WHERE句> 〕
〔 <GROUP BY句> 〕
〔 <HAVING句> 〕
!! <FROM句>の形式
<FROM句> ::= FROM <検索対象>
<検索対象> ::= <検索対象参照リスト>
<結合された検索対象>
<検索対象参照リスト> ::=<検索対象参照>
〔 { <コンマ> <検索対象参照> }... 〕
<検索対象参照> ::= <クラス名> 〔<相関名>〕
<結合された検索対象> ::= <条件指定結合>
<条件指定結合> ::= <検索対象一次子> 〔 <結合種別> 〕
JOIN <検索対象参照> <結合指定>
<検索対象一次子> ::= <検索対象参照>
|<結合された検索対象>
|<左括弧><結合された検索対象><右括弧>
<結合指定> ::= <結合条件>
<結合条件> ::= ON <検索条件>
<結合種別> ::= INNER
|<外部結合種別> 〔 OUTER 〕
<外部結合種別> ::= LEFT
!! <WHERE句>の形式
<WHERE句> ::= WHERE <検索条件>
!! <GROUP BY句>の形式
<GROUP BY句> ::= GROUP BY <グループ化項目の並び>
<グループ化項目の並び> ::= <グループ化項目>
[ { <コンマ> <グループ化項目> }... ]
<グループ化項目> ::= <一次子>
!! <HAVING句>の形式
<HAVING句> ::= HAVING <検索条件>
!! <副問い合わせ>の形式
<副問い合わせ> ::=<左括弧> <問い合わせ式> <右括弧>
!!検索条件については,「4.5.8 述語の構文規則」を
!!参照してください。
<問い合わせ文> ::= <問い合わせ式> 〔 <ORDER BY句>〕
<問い合わせ式> ::= <問い合わせ指定>
|<左括弧> <問い合わせ式> <右括弧>
<問い合わせ指定> ::= SELECT 〔 <集合指定子> 〕
<選択項目の並び> <検索対象式>
<選択項目の並び> ::= <アスタリスク>
|<選択項目> 〔 { <コンマ> <選択項目> }... 〕
<選択項目> ::= <一次子>
<検索対象式> ::= <FROM句>
〔 <WHERE句> 〕
〔 <GROUP BY句> 〕
〔 <HAVING句> 〕
なお,<WHERE句>,<GROUP BY句>および<HAVING句>は,省略できます。
<FROM句>には,検索対象になる一つまたは複数のクラスを指定します。複数のクラスを検索対象に指定する場合には,結合条件も指定できます。
edmSQLでは,結合方法として,次の方法が使用できます。
<FROM句> ::= FROM <検索対象>
<検索対象> ::= <検索対象参照リスト>
|<結合された検索対象>
<検索対象参照リスト> ::= <検索対象参照>
〔{ <コンマ> <検索対象参照> }...〕
<検索対象参照> ::= <クラス名> 〔<相関名>〕
<結合された検索対象> ::= <条件指定結合>
<条件指定結合> ::= <検索対象一次子> 〔 <結合種別> 〕
JOIN <検索対象参照> <結合指定>
<検索対象一次子> ::= <検索対象参照>
|<結合された検索対象>
|<左括弧><結合された検索対象><右括弧>
<結合指定> ::= <結合条件>
<結合条件> ::= ON <検索条件>
<結合種別> ::= INNER
|<外部結合種別> 〔 OUTER 〕
<外部結合種別> ::= LEFT
<WHERE句>には,検索条件を指定します。
検索対象のオブジェクトに対して,<WHERE句>で指定した<検索条件>が真である場合に,そのオブジェクトが検索結果として取得できます。取得した検索結果は,<選択項目>に指定した項目の値として取得できます。
<WHERE句> ::= WHERE <検索条件>
<検索条件>については,「4.5.8 述語の構文規則」を参照してください。
<副問い合わせ> ::=<左括弧> <問い合わせ式> <右括弧>
<GROUP BY句>には,複数のオブジェクトを一つのグループとする条件を指定します。
<GROUP BY句> ::= GROUP BY <グループ化項目の並び>
<グループ化項目の並び> ::= <グループ化項目>
[ { <コンマ> <グループ化項目> }... ]
<グループ化項目> ::= <一次子>
<HAVING句>には,GROUP BY句,WHERE句,FROM句の結果,得られる各グループを選択する条件を指定します。
<HAVING句> ::= HAVING <検索条件>