Derby リファレンスマニュアル
Version 10.4
Derby Document build:
April 22, 2008, 12:29:37 AM (JST)




Version 10.4   Derby リファレンスマニュアル
   
Contents
Copyright    
License    
この文書について    
この文書の目的    
この文書の読者    
この文書の構成    
SQL言語のリファレンス    
大文字小文字と特殊文字    
SQLの識別子    
SQL92識別子の規則    
SQL92識別子    
列名    
相関名    
新しい表名    
スキーマ名    
単純列名    
別名    
表名    
ビュー名    
索引名    
制約名    
カーソル名    
TriggerName    
認証識別子    
   
依存関係    
ALTER TABLE 文    
CALL (手続き) 文    
CREATE 文    
DECLARE GLOBAL TEMPORARY TABLE 文    
DELETE 文    
DROP文    
GRANT 文    
INSERT 文    
LOCK TABLE 文    
RENAME 文    
REVOKE 文    
SET 文    
SELECT 文    
UPDATE文    
SQL 節    
CONSTRAINT 節    
FOR UPDATE 節    
FROM 節    
GROUP BY 節    
HAVING 節    
ORDER BY 節    
WHERE 節    
WHERE CURRENT OF 節    
SQL式    
選択式    
TableExpression    
VALUES式    
式に関する優先順位    
真偽式    
動的パラメータ    
JOIN 演算    
INNER JOIN 演算    
LEFT OUTER JOIN演算    
RIGHT OUTER JOIN 演算    
SQL 問い合わせ    
問合せ    
スカラー副問合せ    
表副問合せ    
組み込み関数    
標準組込み関数    
集約 (集合関数)    
ABSとABSVAL関数    
ACOS 関数    
ASIN 関数    
ATAN 関数    
AVG関数    
BIGINT関数    
CASE 式    
CAST 関数    
CEILおよびCEILING関数    
CHAR 関数    
Concatenation    
COS 関数    
COUNT 関数    
COUNT(*) 関数    
CURRENT DATE 関数    
CURRENT_DATE関数    
CURRENT ISOLATION 関数    
CURRENT SCHEMA関数    
CURRENT TIME    
CURRENT_TIME関数    
CURRENT TIMESTAMP関数    
CURRENT_TIMESTAMP関数    
CURRENT_USER関数    
DATE関数    
DAY 関数    
DEGREES 関数    
DOUBLE関数    
EXP関数    
FLOOR関数    
HOUR関数    
IDENTITY_VAL_LOCAL関数    
INTEGER関数    
LCASEあるいはLOWER関数    
LENGTH関数    
LNあるいはLOG関数    
LOG10 関数    
LOCATE関数    
LTRIM関数    
MAX関数    
MIN関数    
MINUTE 関数    
MOD関数    
MONTH関数    
NULLIF式    
PI 関数    
RADIANS 関数    
RTRIM関数    
SECOND関数    
SESSION_USER関数    
SIN 関数    
SMALLINT関数    
SQRT関数    
SUBSTR関数    
SUM関数    
TAN 関数    
TIME 関数    
TIMESTAMP関数    
TRIM 関数    
UCASE関数およびUPPER関数    
USER関数    
VARCHAR関数    
XMLEXISTS 演算子    
XMLPARSE演算子    
XMLQUERY演算子    
XMLSERIALIZE 演算子    
YEAR関数    
組込みシステム関数    
SYSCS_UTIL.SYSCS_CHECK_TABLEシステム関数    
SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTYシステム関数    
SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS システム関数    
組み込みシステム手続き    
SYSCS_DIAG 診断表および関数    
データ型    
SQL予約語    
DerbyのサポートするSQL-92の機能    
Derbyのシステム表    
SYSALIASES システム表    
SYSCHECKSシステム表    
SYSCOLPERMS システム表    
SYSCOLUMNSシステム表    
SYSCONGLOMERATES システム表    
SYSCONSTRAINTS システム表    
SYSDEPENDS システム表    
SYSFILESシステム表    
SYSFOREIGNKEYSシステム表    
SYSKEYSシステム表    
SYSROUTINEPERMS システム表    
SYSSCHEMAS システム表    
SYSSTATISTICSシステム表    
SYSSTATEMENTSシステム表    
SYSTABLEPERMS システム表    
SYSTABLES システム表    
SYSTRIGGERSシステム表    
SYSVIEWS システム表    
Derbyの例外メッセージとSQL state    
SQLのエラーメッセージと例外    
JDBC リファレンス    
java.sqlにある、JDBCの主なクラス、 インターフェイス、メソッド    
java.sql.Driverインターフェイス    
java.sql.DriverManager.getConnection メソッド    
java.sql.Connection インターフェイス    
java.sql.DatabaseMetaData インターフェイス    
java.sql.Statementインターフェイス    
java.sql.CallableStatement インターフェイス    
java.sql.SQLException クラス    
java.sql.PreparedStatementインターフェイス    
java.sql.ResultSet インターフェイス    
java.sql.ResultSetMetaData インターフェイス    
java.sql.SQLWarning クラス    
java.sql.SQLXMLインターフェイス    
SQL型とjava.sql.Typesの対応    
JDBC 2.0 の機能    
java.sql.Connection インターフェイス: JDBC 2.0で利用可能なメソッド    
java.sql.DatabaseMetaData インターフェイス: 利用可能なJDBC 2.0のメソッド    
java.sql.PreparedStatementインターフェイス: JDBC2.0で提供されるメソッド    
java.sql.ResultSet    
java.sql.ResultSetMetaData インターフェイス: JDBC 2.0で利用可能なメソッド    
java.sql.Statement インターフェイス: 利用可能なJDBC 2.0のメソッド    
java.sql.BatchUpdateException クラス    
Connected Device ConfigurationおよびFoundation Profile向けのJDBCパッケージ(JSR169)    
JDBC 3.0の機能    
java.sql.Connectionインターフェイス: JDBC3.0にて利用可能なメソッド    
java.sql.DatabaseMetaData インターフェイス: JDBC 3.0で利用可能なメソッド    
java.sql.ParameterMetaDataインターフェイス:JDBC3.0で利用可能なメソッド    
java.sql.PreparedStatementインターフェイス: JDBC3.0で利用可能なメソッド    
java.sql.Savepoint インターフェイス    
java.sql.Statementインターフェイス: JDBC 3.0で利用可能なメソッド    
JDBC 4.0の機能    
洗練されたSQLExceptionのサブクラス    
java.sql.Connectionインターフェイス:JDBC4.0で提供される機能    
java.sql.DatabaseMetaDataインターフェイス: JDBC4.0の機能    
java.sql.Statementインターフェイス: JDBC 4.0で利用可能な機能    
javax.sql.DataSource インターフェイス: JDBC 4.0の機能    
JDBCエスケープの構文    
呼び出し文のJDBCエスケープキーワード    
JDBCエスケープ構文    
LIKE節のJDBCエスケープ構文    
fnキーワードを使ったJDBCエスケープ構文    
外部結合のJDBCエスケープ構文    
時刻書式のJDBCエスケープ構文    
日付書式のJDBCエスケープ構文    
タイムスタンプ書式のJDBCエスケープ構文    
データベース接続URLに属性を指定する。    
bootPassword=key属性    
collation=collation 属性    
create=true 属性    
createFrom=Path属性    
databaseName=nameofDatabase属性    
dataEncryption=true属性    
encryptionKey=key属性    
encryptionProvider=providerName属性    
encryptionAlgorithm=algorithm 属性    
logDevice=logDirectoryPath 属性    
newEncryptionKey=key 属性    
newBootPassword=newPassword 属性    
password=userPassword    
restoreFrom=path属性    
rollForwardRecoveryFrom=path 属性    
shutdown=true属性    
territory=ll_CC 属性    
traceDirectory=path 属性    
traceFile=path 属性    
traceFileAppend=true 属性    
traceLevel=value 属性    
upgrade=true attribute    
user=userName 属性    
ssl=sslMode 属性    
属性を指定せずにデータベースに接続する    
J2EEへの準拠:Java Transaction APIとjavax.sql インターフェイス    
JTA API    
製品に関する但し書き    
javax.sql:JDBCインターフェイス    
Derby API    
スタンドアローンのツールとユーティリティ    
JDBCの実装クラス    
JDBC driver    
データソースのクラス    
ユーティリティ的なインターフェイス    
利用可能な地域情報    
Derbyの制限事項    
データベース設定値の制限    
DATE、TIMEとTIMESTAMPの制限    
識別子の長さ制限    
数値の制限    
並びの制限    
XMLの制限    
Trademarks    


Derby リファレンスマニュアル
Apache Software FoundationDerby リファレンスマニュアルApache Derby
Copyright
Copyright 2004-2008 The Apache Software Foundation
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Related information
License
The Apache License, Version 2.0
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
この文書について
Derbyの文書については、はじめてのDerbyを参照してください。文書の一覧や、文書の体裁上の取り決め、詳細が書かれています。
この文書の目的
このDerby リファレンスマニュアルは、Derbyのリファレンスです。 この文書には、DerbyのSQL言語や、DerbyにおけるJDBCの実装、Derbyのシステムカタログ、Derbyのエラーメッセージ、Derbyの属性や、SQLのキーワードの説明があります。
この文書の読者
この文書は、Derbyを使う人のためのリファレンスです。特にアプリケーションの開発者に向けて書かれています。 SQLの標準やJavaというプログラミング言語に慣れていないDerbyのユーザは、このリファレンスの対応する項目を読めば得られる情報があるでしょう。
Derbyで、こういうことをするにはどうすればよいのか」とか、Derbyの概念とかを知りたいならば、Derby ディベロッパーズ ガイドを読むと良いでしょう。
この文書の構成
この文書には以下の節があります。
 
SQL言語のリファレンス
DerbyのSQL言語のリファレンスです。 文、関数、そのほかの構文上の情報が書かれています。
 
SQL予約語
SQL-92標準外の、SQLのキーワードを説明します。
 
DerbyのサポートするSQL-92の機能
SQL-92の機能のうち、Derbyが実現しているものと実現していないものを一覧します。
 
Derbyのシステム表
Derbyのシステムカタログのリファレンスです。
 
Derbyの例外メッセージとSQL state
Derbyの例外メッセージについての情報が書かれています。
 
JDBC リファレンス
Derbyが実装するJDBCのインターフェイスの情報がJDBC 2.0 の機能も含めて書かれています。
 
データベース接続URLに属性を指定する。
DerbyのJDBCデータベース接続URLにおいて、実現されている属性の情報が書かれています。
 
J2EEへの準拠:Java Transaction APIとjavax.sql インターフェイス
Java Transaction APIにおいて、Derbyが実現している機能について書かれています。
 
Derby API
Derby独自のAPIについての説明があります。
SQL言語のリファレンス
DerbyはSQL-92のうち主要な機能のサブセットおよび、幾つかのSQL-99の機能を実現しています。
この節では、文、組み込み関数、データ型、式、特殊文字などの説明を通して、SQL言語の概観を紹介します。
大文字小文字と特殊文字
JDBCのクラスやメソッドにSQL文の文字列を渡して、DerbyにSQLを発行することができます。 SQL文の文字列に可能な文字セットはUnicodeです。この文字列には、次の規則が適用されます。
 
二重引用符でSQL-92に定義されている特殊識別子をデリミトして、デリミトされた識別子とすることができます。
 
一重引用符で文字の列を区切ることができます。
 
文字の列にて一重引用符またはアポストロフィーをあらわすには、一重引用符を2つ並べます。(言い方を変えれば、一重引用符は一重引用符のエスケープ文字です。)
二重引用符にはエスケープ文字が必要ではありません。二重引用符をあらわすには、単に二重引用符を使ってください。ただし、Javaのプログラムでは、二重引用符はバックスラッシュによるエスケープが必要であることを気に留める必要があります。
例:
-- 一重引用符はエスケープ文字です-- 一重引用符に対して VALUES 'Joe''s umbrella' -- ijでは二重引用符はエスケープされません。 VALUES 'He said, "hello!"' n = stmt.executeUpdate( "UPDATE aTable setStringcol = 'He said, \"hello!\"'");
 
SQLのキーワードは大文字小文字を区別しません。例えば、SELECTというキーワードは、SELECT、Select、select、sELECTのいずれでも書くことができます。
 
SQL-92の書き方による識別子は大文字小文字を区別しません。(SQL92識別子を参照してください。)ただしデリミトされた識別子はそうではありません。
 
Javaの書き方による識別子は常に大文字小文字を区別します。
 
*は、SelectExpression.にてワイルドカード文字です。ワイルドカードの*を参照してください。 この文字は同時に情報演算子でもあります。そのほかの場合この文字は、0回以上の繰り返しを表す、構文のメタ文字です。
 
%と_は、LIKE演算子に続く文字の列にて使われると、ワイルドカード文字となります。(これはエスケープされなかった場合です。)詳細は真偽式を参照してください。
 
SQL-92の仕様に沿って一行あるいは複数行のコメントを書くことができます。一行のコメントは二つのダッシュ(--)で始まり改行文字で終わります。複数行の改行は前後を囲う書き方で、スラッシュ・スター(/*)で始まり、スター・スラッシュ(*/)で終わります。この書き方では入れ子となる場合があることを留意してください。コメントの開始文字と終了文字の間にある、あらゆる文字は無視されます。
SQLの識別子
識別子とは、ある言語においてキーワードやコマンドとは異なる、ユーザが作成した情報をあらわすものです。識別子は表、ビュー、索引、列、制約のような、ユーザがデータベースに作成したディクショナリの情報をあらわすことがあります。ここで、これらの情報をディクショナリの情報とわれわれが呼ぶのは、Derbyがデータディクショナリとも呼ばれる、システム表にこれらの情報を記録するからです。 SQLの仕様は、こういった情報を特定の文で別名により扱う方法を用意しています。
識別子は、その種類に応じてそれぞれの規則にそっていなければなりません。ディクショナリの情報の識別子の場合、SQL-92が定義する識別子の規則に沿わなければなりません。このことより、ディクショナリの情報の識別子のことをSQL92識別子と呼びます。.
SQL92識別子の規則
通常の識別子は二重引用符によって囲われていません。デリミトされた識別子は二重引用符によって囲まれています。
通常の識別子は文字で始まり、文字、アンダースコア(_)、0-9の数字しか含みません。ここで文字と0-9の数字とは、Unicodeの全文字と0-9の数字を含みますが、Derbyは、識別子を構成する文字がデータベースのロケールで利用可能であることを保障するものではありません。
デリミトされた識別子は二重引用符の間にどのような文字でも持つことができます。 また識別氏を囲う二重引用符は、識別子の始まりと終わりを明示しているだけであり、それ自身は識別子とみなされません。またデリミトされた識別子の最後にある空白文字列は、無視されて切り捨てられます。Derbyはデリミトされた識別子にある連続した二つの二重引用符を、ひとつの二重引用符とみなします。このみなされた二重引用符はデリミトされた識別子の一部として扱われます。
デリミトされた識別子の中のピリオドはディクショナリの情報をあらわす識別子の一部であり、識別子の間の区切りではありません。
ですから、次の例にて、
"A.B"
は、ディクショナリの情報ですが、
"A"."B"
は、他のディクショナリの情報で限定されたディクショナリの情報です。(つまり、A表のB列としてあらわされた情報であるということです。)
SQL92識別子
SQL92識別子とは、SQL-92に沿ってディクショナリの情報をあらわす識別子です。SQL-92では、ディクショナリの情報をあらわす識別子は、128文字以内かつ(二重引用符によりデリミトされていなければ)システムにより大文字への変換が行われるため、大文字小文字が区別されないことになっています。また、デリミトされない限り識別子とはできない予約語があります。もし128文字以上の名前を使おうとすると、SQLException X0X11が挙がります。
Derbyには、SQL-92で定められている以外にもキーワードがあります。(SQL予約語を参照。)
-- この例ではシステムカタログに格納されビュー名は -- ANIDENTIFIERです。 CREATE VIEW AnIdentifier (RECEIVED) AS VALUES 1 -- この例ではシステムカタログに格納されたビュー名の -- 大文字小文字は損なわれません。 CREATE VIEW "ACaseSensitiveIdentifier" (RECEIVED) AS VALUES 1
以降の節にて、SQL92識別子によりディクショナリの情報をあらわす時の規則を説明します。
ディクショナリの情報を名前で限定する
ディクショナリの情報は、他のディクショナリの情報の一部となることがあり、そのとき情報をそれぞれのディクショナリの名前で限定できます。このとき構成は次の構成との間で、ピリオドで区切られます。SQL92識別子ははドットで区切られます。名前で限定することにより、ディクショナリの情報名があいまいになることを防ぐことができます。
列名
SQLの構文ではさまざまな文脈で、列の名前を表名相関名により限定することができます。
一方で文脈によっては列名表名相関名で限定できず、単純列名を使わなければならない場合もあります。 そのような文脈とは、
 
表の作成(CREATE TABLE 文)
 
カーソルの更新可能な列の特定
 
SELECT式にある列の相関名(選択式を参照)
 
TableExpressionにある列の相関名 (TableExpressionを参照)
更新可能な列には相関名を使うことができません。仮に使えば、SQL例外が起きます。たとえば、
SELECT c11 AS col1, c12 AS col2, c13 FROM t1 FOR UPDATE of c11,c13
という例にて、相関名をc11のcol1に使えません。なぜなら、 c11はFOR UPDATE に存在するからです。一方で相関名をc12に使うことができます。なぜなら、これはFOR UPDATEに存在しないからです。
-- C.Country は 相関名により限定された --列名です。 SELECT C.Country FROM APP.Countries C
相関名
相関名はFROM句にあるテーブルについて与える事ができ、新しい名前、別名となります。相関名スキーマ名で限定することはできません。
相関名は更新可能な列に使うことはできません。仮に使えばSQL例外が発生します。 例えば、
SELECT c11 AS col1, c12 AS col2, c13 FROM t1 FOR UPDATE of c11,c13
という例では、相関名をc11のcol1に使うことはできません。なぜなら、c11はFOR UPDATEにある列だからです。 それに対して相関名をc12に使うことはできます。これはFOR UPDATEにないからです。
-- Cは相関名です。 SELECT C.NAME FROM SAMP.STAFF C
新しい表名
新しい表名は、新しく名前のついた表をあらわします。新しい表名スキーマ名で限定することはできません。
-- FlightBooks は新しい表名です。スキーマ名はありません。 RENAME TABLE FLIGHTAVAILABILITY TO FLIGHTAVAILABLE
スキーマ名
スキーマ名スキーマをあらわします。スキーマにはそのほかのディクショナリの情報があります。これには表や索引が含まれて居ます。スキーマによりデータベースにある表等のディクショナリの情報の部分集合に名前を与えることができます。
スキーマは明示的に作成、破棄できます。デフォルトのユーザースキーマはAPPというスキーマです。(これは接続時にユーザ名が与えられなかったときに使われます。) SYSで始まるスキーマには情報を作成することができません。
スキーマ名により表への参照を限定することができます。スキーマ名が指定されなければ、暗黙のうちにデフォルトのスキーマ名により表が限定されます。 システム表を参照するには、SYSで限定しなければなりません。システム表についてのより詳細な情報については、Derbyのシステム表を参照してください。
スキーマはディクショナリの情報が持つ階層構造において最も上位に位置します。したがって、スキーマ名を限定することはできません。
Syntax
SQL92識別子
-- SAMP.EMPLOYEE はスキーマ名で限定された表名です。 SELECT COUNT(*) FROM SAMP.EMPLOYEE -- システムカタログの名前は、そのスキーマであるSYSで限定しなければなりません。 SELECT COUNT(*) FROM SYS.SysColumns
単純列名
表名相関名で限定できない文脈で列をあらわすとき、単純列名が使われます。 このような文脈は、CREATE TABLE文の列定義のような、限定の必要が無い場合が当てはまります。
-- country は単純列名です。 CREATE TABLE CONTINENT (COUNTRY VARCHAR(26) NOT NULL PRIMARY KEY, COUNTRY_ISO_CODE CHAR(2), REGION VARCHAR(26))
別名
表やビューは別名であらわす事ができます。 別名スキーマ名で限定することができます。
表名
表名は表をあらわします。表名スキーマ名で限定することができます。
-- SAMP.PROJECT はスキーマ名のある表名です。 SELECT COUNT(*) FROM SAMP.PROJECT
ビュー名
ビュー名は表またはビューをあらわします。ビュー名スキーマ名で限定することができます。
Example
-- これはスキーマ名のあるビュー名です。 SELECT COUNT(*) FROM SAMP.EMP_RESUME
索引名
索引名は索引をあらわします。索引はスキーマにあるので、その名前をスキーマ名で限定することができます。システム表の索引はSYSスキーマにあります。
DROP INDEX APP.ORIGINDEX; -- OrigIndexはスキーマ名のない索引名です。 CREATE INDEX ORIGINDEX ON FLIGHTS (ORIG_AIRPORT)
制約名
制約名は限定できません。
-- country_fk2 は制約名です。 CREATE TABLE DETAILED_MAPS (COUNTRY_ISO_CODE CHAR(2) CONSTRAINT country_fk2 REFERENCES COUNTRIES)
カーソル名
カーソル名はカーソルをあらわします。SQL言語によりカーソルに名前を割り当てることはできません。その代わり、JDBC APIによってカーソルに名前を割り当てたり、システムが命名した名前を取得することができます。より詳細については、Derby ディベロッパーズ ガイドを参照してください。 カーソルに名前を割り当てれば、SQL文にてその名前を使うことができます。
カーソル名は限定できません。
stmt.executeUpdate("UPDATE SAMP.STAFF SET COMM = " + "COMM + 20 " + "WHERE CURRENT OF " + ResultSet.getCursorName());
TriggerName
トリガ名によりユーザが作成したトリガを参照することができます。
DROP TRIGGER TRIG1
認証識別子
Derbyのシステムではユーザ名を、認証識別子と呼びます。接続の要求にて認証識別子が記述されている場合、これはユーザ名を表します。ユーザの既定のスキーマは、その認証識別子と同じです。 認証の仕組みでは、ユーザ名の大文字小文字を区別することができますが、Derbyの認証の仕組みではデリミトされない限りは、大文字小文字は区別されません。 より詳細な情報は、Derby ディベロッパーズ ガイドを参照してください。
Example
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY( 'derby.database.fullAccessUsers', 'Amber,FRED')
本節は言語の高レベルな構造と、それから言語の部分について、マニュアルを提供します。 たとえばCREATE INDEX文は高レベルの文です。これをユーザはJDBCのインターフェイスを通して直接実行することができます。本節にはSQLの節についても書かれています。これは、高レベルの文ではなく、直接実行することはできませんが、高レベルの文の一部となることができます。例えばORDER BY節やWHERE節は節です。最後に本節には、式について書かれています。式は文に置くことができる複雑な構文です。例えば、Select式表副問い合わせ等が式です。 これらの節や式には、リファレンスとして使いやすいよう、それぞれにマニュアルの頁が用意されています。
特に何も書かれていなければ、と記された全ての高レベルの文は、JDBCのインターフェイスを介して、実行する事あるいは用意して実行することが可能です。 一方、個々の式について、高レベルの文として実行可能か否かこのマニュアルにて書かれています。
本節では文の利用についての一般的な情報や、個々の文についての説明が書かれています。
依存関係
Derby は準備済み文の依存関係を追跡します。準備済み文とは実行前にコンパイルされたSQL文の事です。典型的なシナリオとして、これらは準備(プレコンパイル)された後、複数回実行されます。
準備済み文はディクショナリの情報や、それ自身から参照する他の文に依存します。(ディクショナリの情報とは、表・列・制約・索引・ビュー・トリガのことです。) 準備済み文が依存しているディクショナリの情報や文が、破棄されたり変更されたりすると、内部的に準備済み文は無効となり、Derbyは準備済み文が実行されるとき、自動的に再コンパイルを行おうとします。 もしこのとき、準備済み文の再コンパイルが失敗すると、実行は失敗します。 しかしながら、もし何らかの対応を行って(無くなった表を復活させるなどして)失われた依存性を元に戻せるのなら、失敗した準備済み文を成功裏に実行することができます。これは、Derbyが再実行が要求されたとき、再コンパイルを自動的に行うからです。
お互いに依存した文-UPDATE WHERE CURRENT文は参照する文に依存します。依存する文を破棄すると、UPDATE WHERE CURRENT文は無効になります。
さらに準備済み文の結果がオープンしている場合、ある種のDDL文の実行を妨げます。
それぞれの文に対応したマニュアルの頁には、その文が準備された場合、どのようなことをすると無効になるのかが書かれています。
ここにDerbyのijというツールを使って例を示します。
ij> CREATE TABLE mytable (mycol INT); 0 rows inserted/updated/deleted ij> INSERT INTO mytable VALUES (1), (2), (3); 3 rows inserted/updated/deleted -- この例ではijのprepareコマンドを使います。 -- このコマンドにより文が準備されます。 ij> prepare p1 AS 'INSERT INTO MyTable VALUES (4)'; -- p1はmytableに依存します; ij> execute p1; 1 row inserted/updated/deleted -- Derbyは再コンパイルせずに文を実行します。 ij> CREATE INDEX i1 ON mytable(mycol); 0 rows inserted/updated/deleted -- 新しい索引のため、p1は一時的に無効となります。 ij> execute p1; 1 row inserted/updated/deleted -- Derbyは自動的にp1を再コンパイルして、実行します。 ij> DROP TABLE mytable; 0 rows inserted/updated/deleted -- Derbyでは以下のように表を破棄することができます。 -- これはp1の結果が閉じているからです。 -- しかしながらp1は一時的に無効となります。 ij> CREATE TABLE mytable (mycol INT); 0 rows inserted/updated/deleted ij> INSERT INTO mytable VALUES (1), (2), (3); 3 rows inserted/updated/deleted ij> execute p1; 1 row inserted/updated/deleted -- p1は無効となっているので、Derbyは実行の前に再コンパイルを行います。 -- 再コンパイルは成功して、文は実行できます。 ij> DROP TABLE mytable; 0 rows inserted/updated/deleted -- p1は無効です。 -- 今度は最コンパイルしようとしても失敗するので、 -- 実行も失敗です。 ij> execute p1; ERROR 42X05: Table/View 'MYTABLE' does not exist.
ALTER TABLE 文
The ALTER TABLE 文により次のことが可能です。
 
表に列を追加する。
 
表に制約を追加する。
 
表の列を破棄する。
 
表にある制約を破棄する。
 
VARCHAR, CHAR VARYING, and CHARACTER VARYING 列の幅を増やす。
 
表に定義された行レベルのロックを上書きする。(あるいは上書きされた内容を破棄する。)
 
識別子列の増分値や開始値を変更する。
 
列がNull可であるか否か変更する。
 
列の規定値を変更する。
構文
ALTER TABLE 表名 { ADD COLUMN 列定義 | ADD CONSTRAINT節 | DROP [ COLUMN ] 列名 [ CASCADE | RESTRICT ] DROP { PRIMARY KEY | FOREIGN KEY 制約名 | UNIQUE 制約名 | CHECK 制約名 | CONSTRAINT 制約名 } ALTER [ COLUMN ] 列定義変更 | LOCKSIZE { ROW | TABLE } }
列定義
単純列名データ型 [ 列単位制約 ]* [ [ WITH ] DEFAULT 既定制約式 ]
既定制約式の詳細については、列の既定を参照してください。
列定義変更
列名 SET DATA TYPE VARCHAR(integer) | column-name SET INCREMENT BY 定整数 | column-name RESTART WITH 定整数 | column-name [ NOT ] NULL | column-name [ WITH ] DEFAULT 既定値
列定義変更のSET INCREMENT BY 定整数により、識別子列のとる連続した値の間隔が設定されます。識別子列がとる次の値は、最後にとられた値に増分が加算された値となります。この場合列にはあらかじめIDENTITY属性が定義されていなければなりません。
RESTART WITH 定整数により、識別子列がとる次の値が設定されます。RESTART WITHは、GENERATED BY DEFAULTが定義された、一意キーを持つ識別子列のある表に使うと便利です。GENERATED BY DEFAULTは明示的に値を挿入することおよび、暗黙的にシステムが発番した値を挿入することのいずれをも許すため、明示的に挿入された値がシステムが発番する値との間で競合する事がありえます。この競合を回避するために、RESTART WITHにより識別子列で次に発番される値を設定する事ができるのです。自動的に発番された値と手動で挿入された情報がある、次の例について考えてみてください。
CREATE TABLE tauto(i INT GENERATED BY DEFAULT AS IDENTITY, k INT) CREATE UNIQUE INDEX tautoInd ON tauto(i) INSERT INTO tauto(k) values 1,2
システムは自動的に識別子列に対して数値を発番します。しかしながら、あなたは手動で識別子列に幾つかの値を挿入しなければなりませんでした。
INSERT INTO tauto VALUES (3,3) INSERT INTO tauto VALUES (4,4) INSERT INTO tauto VALUES (5,5)
識別子列にはこの時点で1から5の値があります。ここであなたがシステムに値を発番させると、システムは3という値を発番します。この値により一意キー例外が発生します。なぜなら3という値は既に手動で挿入されてしまっているからです。手動で値を挿入したので後処理として、識別子列に対してRESTART WITH 6 のALTER TABLE文を発行します。
ALTER TABLE tauto ALTER COLUMN i RESTART WITH 6
ALTER TABLE は表を参照するいかなるビューにも影響しません。これはSELECT一覧に"*"を持っていても然りです。新しく追加された列がビューから見えるようにする為には、ビューを破棄して作り直さなければなりません。
列の追加
追加する列の列定義は、構文の上でCREATE TABLE文の列と同じです。ですから、列の制約をALTER TABLE ADD COLUMN文の新しい列に書くこともできます。しかしながら、既存のテーブルにNOT NULL制約のある列を追加することは、その列に既定値を与えた場合のみ可能です。さもなければ、ALTER TABLE文が実行されたとき、例外が発生します。
CREATE TABLEと同様、列定義に一意あるいは主キー制約がある場合、列はnull値をとることができません。したがって、NOT NULL属性も必要です。(SQLSTATE 42831)
Note: 表に明示的な列一覧が指定されないUPDATEトリガが定義されていた場合、その表に列を追加すると、追加された列はUPDATEトリガの暗黙的な更新列一覧に追加されます。さらに新しい列を拾うことができるよう、推移変数への全ての参照は無効となります。
制約の追加
ALTER TABLE ADD CONSTRAINTにより表ごとの制約が既存の表に追加されます。あらゆる種類の表ごとの制約がALTER TABLEで追加できます。ただし、既存の表への制約の追加には次の機能上の制限があります。
 
外部キーやチェック制約が既存の表に追加されるときDerbyは既存の行が制約に違反しないか、表を調べます。もしいずれかの行が制約に違反する場合、Derbyは例外を投げて制約は追加されません。
 
主キーに含まれるあらゆる列はnullでない値をとらなければならず、また一意でなければなりません。
ALTER TABLE ADD UNIQUEやPRIMARY KEYは、単一の列による主キーを定義する簡単な方法を提供します。もしPRIMARY KEYがCという列の定義に書かれたされた場合、これはPRIMARY KEY(C)という別の節に書いたのと同じです。列はnullの値をとってはならないので、NOT NULL属性も指定されなければなりません。
制約の構文についての詳細は、CONSTRAINT 節を読んでください。 ADD TABLE ADD CONSTRAINTという書き方にて、制約を追加する場合は、表毎の制約の構文に従ってください。
列の破棄
ALTER TABLE DROP COLUMNにより、表から列を破棄できます。
COLUMNというキーワードは無くてもかまいません。
CASCADEやRESTRICTも、無くてかまいません。どちらも指定しなかった場合、既定はCASCADEです。
RESTRICTの場合、依存しているスキーマの情報が無効になるならば、列の破棄は失敗します。
CASCADEの場合、列の破棄と併せて、無効になるスキーマの情報も破棄されます。
DROP COLUMN RESTRICTが失敗する原因となるスキーマの情報には、次が含まれます。 ビュー、トリガ、主キー制約、外部キー制約、一意キー制約、チェック制約、列権限。破棄する列に依存するいずれかの情報があれば、DROP COLUMN RESTRICTは失敗します。
表にひとつしかない列は、破棄することができません。
sqlAuthorizationが真である場合、列を削除することはできません。(DERBY-1909を参照してください。) )
列が索引にて使われているか否かにかかわらず、列の破棄はCASCADE/RESTRICTのどちらでも同じように行われます。列が破棄されるとき、索引にあるその列が取り除かれます。その列が索引にあるただひとつの列であった場合、索引全体が破棄されます。
制約の破棄
ALTER TABLE DROP CONSTRAINTにより表の制約を破棄できます。名前付けしていない制約を破棄するためには、SYS.SYSCONSTRAINTSに記録されている自動生成された制約の名前をデリミトされた識別子として指定する必要があります。
主キー・一意性・外部キー制約を破棄すると、その制約が機能するために存在している索引が破棄されます。(この索引は支援索引とも呼ばれます。)
列の変更
列定義変更により、名前のある列を変更できます。可能な変更内容は以下のとおりです。
 
VARCHAR列の長さを増やすことができます。VARCHARというキーワードの代わりに、CHARACTER VARYINGやCHAR VARYINGを使うことができます。
これらの列の幅を増やすためには、データ型と新しいサイズを列名の後に書きます。
列の幅を減らしたり、データ型を変更したりする事はできません。主キーの一部や、外部キー制約から参照されている一意キー、外部キー制約の一部である列の幅は変更できません。
 
識別子列のとる連続した値の間隔を指定することができます。
識別子列のとる連続した値の間隔を設定するためには、定整数を与えます。あらかじめ列には識別子属性が与えられていなければなりません。(SQLSTATE 42837)もし表に既に行がある場合、列のSET INCREMENT defaultが加算された値は変更されません。