問合せ [ORDER BY 節] [FOR UPDATE 節] WITH {RR|RS|CS|UR}
SELECT文は問合せと、省略可能なORDER BY 節とFOR UPDATE 節から構成されます。 SELECT文は、問合せの最初の単語が一般的にSELECTなので、この名前が与えられています。(問合せは選択式以外にも、VALUES式、UNION、INTERSECT、EXCEPT式である場合があります。)
ORDER BY 節により、ResultSetの並び順が明示されます。FOR UPDATE 節により、結果のカーソルを更新可能にすることができます。SELECT文にはFOR EACH ONLY 節を置くことができます。FOR EACH ONLY 節とFOR READ ONLY節は同じものです。
SELECT文にてWITH {RR|RS|CS|UR}という書き方で分離レベルを指定することができます。
-- SAL+BONUS+COMMと名前を並べて、TOTAL_PAYという名前をつけ、 -- その名前で並び替える。 SELECT FIRSTNME, SALARY+BONUS+COMM AS TOTAL_PAY FROM EMPLOYEE ORDER BY TOTAL_PAY -- FOR UPDATE節を指定することで、 -- PROJECTという表にある、開始日時(PRSTDATE)、終了日時(PRENDATE)という列を更新する、 -- 更新可能なカーソルを作成する SELECT PROJNO, PRSTDATE, PRENDATE FROM PROJECT FOR UPDATE OF PRSTDATE, PRENDATE -- この文に限り分離レベルをRRにする。 SELECT * FROM Flights WHERE flight_id BETWEEN 'AA1111' AND 'AA1112' WITH RR
SQL言語ではカーソルに名前を与える事ができません。そのかわりにJDBC APIによりカーソルに名前を与えたり、システムがカーソルに与えた名前を取得することができます。詳細についてはDerby ディベロッパーズ ガイドのカーソルへの命名および名前の利用を参照して下さい。
SELECTは、問合せの表やビュー、それらの表へのアクセスパスにて選択されたコングロマリット(ヒープやインデックスなどの記憶の単位です。)に依存します。 CREATE INDEXでは準備されたSELECT文が無効になることはありません。 DROP INDEX文ではもし破棄される索引が文にてアクセスパスなら、準備されたSELECT文は破棄されます。 もしSELECTにビューが含まれていれば、ビューが依存するディクショナリの情報にも依存します。(CREATE VIEW 文を参照してください。)
SELECTのカーソルに対して、準備されたUPDATE WHERE CURRENTあるいはDELETE WHERE CURRENT文はSELECTに依存します。java.sql.Statement.close によりSELECTを取り除くと、UPDATE WHERE CURRENT および DELETE WHERE CURRENTは無効となります。
SELECTは問合せにあるあらゆる別名に依存します。別名を破棄することにより、もし準備されたSELECT文にて別名が使われているなら、その文は無効になります。