Hsqldb-quick-guide
HSQLDB-はじめに
HyperSQL Database(HSQLDB)は、SQL:2011標準およびJDBC 4仕様に厳密に準拠する最新のリレーショナルデータベースマネージャーです。 すべてのコア機能とRDBMSをサポートしています。 HSQLDBは、データベースアプリケーションの開発、テスト、および展開に使用されます。
HSQLDBの主でユニークな機能は、標準コンプライアンスです。 ユーザーのアプリケーションプロセス内、アプリケーションサーバー内、または別のサーバープロセスとしてデータベースアクセスを提供できます。
HSQLDBの機能
- HSQLDBは、DBサーバーに対する高速操作のためにメモリ内構造を使用します。 信頼性の高いクラッシュリカバリで、ユーザーの柔軟性に応じてディスクの永続性を使用します。
- HSQLDBは、ビジネスインテリジェンス、ETL、および大規模なデータセットを処理するその他のアプリケーションにも適しています。
- HSQLDBには、XAトランザクション、接続プールデータソース、リモート認証など、幅広いエンタープライズ展開オプションがあります。
- HSQLDBはJavaプログラミング言語で記述され、Java Virtual Machine(JVM)で実行されます。 データベースアクセス用のJDBCインターフェイスをサポートします。
HSQLDBのコンポーネント
HSQLDB jarパッケージには3つの異なるコンポーネントがあります。
- HyperSQL RDBMSエンジン(HSQLDB)
- HyperSQL JDBCドライバー
- データベースマネージャー(GUIデータベースアクセスツール、SwingおよびAWTバージョン)
HyperSQL RDBMSおよびJDBCドライバーは、コア機能を提供します。 データベースマネージャーは、JDBCドライバーを備えた任意のデータベースエンジンで使用できる汎用データベースアクセスツールです。
sqltool.jarと呼ばれる追加のjarには、コマンドラインデータベースアクセスツールであるSql Toolが含まれています。 これは汎用コマンドです。 他のデータベースエンジンでも使用できる回線データベースアクセスツール。
HSQLDB-インストール
HSQLDBは、Pure Javaで実装されたリレーショナルデータベース管理システムです。 JDBCを使用して、このデータベースをアプリケーションに簡単に埋め込むことができます。 または、操作を個別に使用できます。
前提条件
HSQLDBの前提ソフトウェアのインストールに従ってください。
Javaインストールの検証
HSQLDBはpure Javaで実装されたリレーショナルデータベース管理システムであるため、HSQLDBをインストールする前にJDK(Java Development Kit)ソフトウェアをインストールする必要があります。 システムにすでにJDKがインストールされている場合は、次のコマンドを試してJavaバージョンを確認してください。
JDKがシステムに正常にインストールされると、次の出力が得られます。
システムにJDKがインストールされていない場合は、次のリンクにアクセスしてhttp://www.finddevguides.com/java/java_environment_setup[Install JDK。]
HSQLDBのインストール
HSQLDBをインストールする手順は次のとおりです。
ステップ1-HSQLDBバンドルのダウンロード
次のリンクhttps://sourceforge.net/projects/hsqldb/files/[[[1]]]からHSQLDBデータベースの最新バージョンをダウンロードします。リンクをクリックすると、次のスクリーンショットを入手してください。
[HSQLDB]をクリックすると、ダウンロードがすぐに開始されます。 最後に、 hsqldb-2.3.4.zip という名前のzipファイルを取得します。
ステップ2-HSQLDB zipファイルを抽出します
zipファイルを抽出し、 C:\ ディレクトリに配置します。 抽出後、次のスクリーンショットに示すようなファイル構造が得られます。
- ステップ3-デフォルトのデータベースを作成します *
HSQLDB用のデフォルトのデータベースはないため、HSQLDB用のデータベースを作成する必要があります。* demodb という名前の新しいデータベースを定義する *server.properties という名前のプロパティファイルを作成しましょう。 次のデータベースサーバープロパティを見てください。
このserver.propertiesファイルを、 C:\ hsqldb-2.3.4 \ hsqldb \ であるHSQLDBホームディレクトリに配置します。
コマンドプロンプトで次のコマンドを実行します。
上記のコマンドの実行後、次のスクリーンショットに示すようにサーバーのステータスを受け取ります。
後で、HSQLDBホームディレクトリにあるhsqldbディレクトリの次のフォルダ構造を見つけることができます。これは、 C:\ hsqldb-2.3.4 \ hsqldb です。 これらのファイルは、HSQLDBデータベースサーバーによって作成されたdemodbデータベースの一時ファイル、lckファイル、ログファイル、プロパティファイル、およびスクリプトファイルです。
ステップ4-データベースサーバーの起動
データベースの作成が完了したら、次のコマンドを使用してデータベースを起動する必要があります。
上記のコマンドを実行すると、次のステータスが表示されます。
これで、 runManagerSwing.bat であるデータベースホーム画面を C:\ hsqldb-2.3.4 \ hsqldb \ bin の場所から開くことができます。 このbatファイルは、HSQLDBデータベースのGUIファイルを開きます。 その前に、ダイアログボックスを介してデータベース設定を要求します。 次のスクリーンショットをご覧ください。 このダイアログボックスで、上記のように設定名とURLを入力し、[OK]をクリックします。
次のスクリーンショットに示すように、HSQLDBデータベースのGUI画面が表示されます。
HSQLDB-接続
インストールの章では、データベースを手動で接続する方法について説明しました。 この章では、データベースをプログラムで接続する方法について説明します(Javaプログラミングを使用)。
サーバーを起動し、Javaアプリケーションとデータベース間の接続を作成する次のプログラムを見てください。
例
このコードを ConnectDatabase.java ファイルに保存します。 次のコマンドを使用してデータベースを起動する必要があります。
次のコマンドを使用して、コードをコンパイルおよび実行できます。
上記のコマンドの実行後、次の出力が表示されます-
HSQLDB-データ型
この章では、HSQLDBのさまざまなデータ型について説明します。 HSQLDBサーバーには、6つのカテゴリのデータ型があります。
正確な数値データ型
Data Type | From | To |
---|---|---|
bigint | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
int | -2,147,483,648 | 2,147,483,647 |
smallint | -32,768 | 32,767 |
tinyint | 0 | 255 |
bit | 0 | 1 |
decimal | -10^38 +1 | 10^38 -1 |
numeric | -10^38 +1 | 10^38 -1 |
money | -922,337,203,685,477.5808 | +922,337,203,685,477.5807 |
smallmoney | -214,748.3648 | +214,748.3647 |
おおよその数値データ型
Data Type | From | To |
---|---|---|
float | -1.79E + 308 | 1.79E + 308 |
real | -3.40E + 38 | 3.40E + 38 |
日付と時刻のデータ型
データ・タイプ
From
To
日付時刻
1753年1月1日
9999年12月31日
小日時
1900年1月1日
2079年6月6日
date
1991年6月30日のような日付を格納します
time
午後12時30分などの時刻を格納します
注-ここでは、datetimeの精度は3.33ミリ秒ですが、小さいdatetimeの精度は1分です。
文字列データ型
Data Type | Description |
---|---|
char | Maximum length of 8,000 characters (Fixed length non-Unicode characters) |
varchar | Maximum of 8,000 characters (Variable-length non-Unicode data) |
varchar(max) | Maximum length of 231 characters, variable-length non-Unicode data (SQL Server 2005 only) |
text | Variable-length non-Unicode data with a maximum length of 2,147,483,647 characters |
Unicode文字列のデータ型
Data Type | Description |
---|---|
nchar | Maximum length of 4,000 characters (Fixed length Unicode) |
nvarchar | Maximum length of 4,000 characters (Variable length Unicode) |
nvarchar(max) | Maximum length of 231 characters (SQL Server 2005 only),(Variable length Unicode) |
ntext | Maximum length of 1,073,741,823 characters (Variable length Unicode) |
バイナリデータタイプ
Data Type | Description |
---|---|
binary | Maximum length of 8,000 bytes (Fixed length binary data) |
varbinary | Maximum length of 8,000 bytes (Variable length binary data) |
varbinary(max) | Maximum length of 231 bytes (SQL Server 2005 only), (Variable length Binary data) |
image | Maximum length of 2,147,483,647 bytes (Variable length Binary Data) |
その他のデータ型
Data Type | Description |
---|---|
sql_variant | Stores values of various SQL Server-supported data types, except text, ntext, and timestamp |
timestamp | Stores a database-wide unique number that gets updated every time a row gets updated |
uniqueidentifier | Stores a globally unique identifier (GUID) |
xml | Stores XML data. You can store xml instances in a column or a variable (SQL Server 2005 only) |
cursor | Reference to a cursor object |
table | Stores a result set for later processing |
HSQLDB-テーブルの作成
テーブルを作成するための基本的な必須要件は、テーブル名、フィールド名、およびそれらのフィールドのデータ型です。 オプションで、テーブルにキー制約を提供することもできます。
構文
次の構文を見てください。
例
id、title、author、submission_dateなどのフィールド名を持つtutorials_tblという名前のテーブルを作成しましょう。 次のクエリをご覧ください。
上記のクエリの実行後、次の出力が表示されます-
HSQLDB – JDBCプログラム
以下は、tutorials_tblという名前のテーブルをHSQLDBデータベースに作成するために使用されるJDBCプログラムです。 プログラムを CreateTable.java ファイルに保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドの実行後、次の出力が表示されます-
HSQLDB-テーブルの削除
既存のHSQLDBテーブルを削除するのは非常に簡単です。 ただし、既存のテーブルを削除すると、テーブルを削除した後に失われたデータは回復されないため、非常に注意する必要があります。
構文
以下は、HSQLDBテーブルを削除するための一般的なSQL構文です。
例
employeeという名前のテーブルをHSQLDBサーバーから削除する例を考えてみましょう。 以下は、employeeという名前のテーブルを削除するクエリです。
上記のクエリの実行後、次の出力が表示されます-
HSQLDB – JDBCプログラム
以下は、HSQLDBサーバーからテーブル従業員を削除するために使用されるJDBCプログラムです。
次のコードを DropTable.java ファイルに保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドの実行後、次の出力が表示されます-
HSQLDB-クエリの挿入
INSERT INTOコマンドを使用して、HSQLDBでクエリの挿入ステートメントを実行できます。 テーブルの列フィールドの順序に従って、ユーザー定義データを提供する必要があります。
構文
以下は、クエリを INSERT するための一般的な構文です。
文字列型のデータをテーブルに挿入するには、二重引用符または一重引用符を使用して、挿入クエリステートメントに文字列値を提供する必要があります。
例
値がid = 100、title = Learn PHP、Author = John Poulで、 tutorials_tbl という名前のテーブルにレコードを挿入し、提出日が現在の日付である例を考えてみましょう。
以下は、指定された例のクエリです。
上記のクエリの実行後、次の出力が表示されます-
HSQLDB – JDBCプログラム
これは、指定された値id = 100、タイトル= PHPの学習、作成者=ジョンポール、および提出日が現在の日付であるテーブルにレコードを挿入するJDBCプログラムです。 指定されたプログラムを見てください。 コードを InserQuery.java ファイルに保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドの実行後、次の出力が表示されます-
Id | Title | Author | Submission Date |
---|---|---|---|
101 | Learn C | Yaswanth | Now() |
102 | Learn MySQL | Abdul S | Now() |
103 | Learn Excell | Bavya kanna | Now() |
104 | Learn JDB | Ajith kumar | Now() |
105 | Learn Junit | Sathya Murthi | Now() |
HSQLDB-クエリの選択
SELECTコマンドは、HSQLDBデータベースからレコードデータを取得するために使用されます。 ここでは、Selectステートメントで必須フィールドのリストに言及する必要があります。
構文
選択クエリの一般的な構文は次のとおりです。
- 1つのSELECTコマンドで1つ以上のフィールドをフェッチできます。
- フィールドの代わりに星印(*)を指定できます。 この場合、SELECTはすべてのフィールドを返します。
- WHERE句を使用して、任意の条件を指定できます。
- SELECTがレコードを返し始める位置から、OFFSETを使用してオフセットを指定できます。 デフォルトでは、オフセットはゼロです。
- LIMIT属性を使用して、返品の数を制限できます。
例
以下は、 tutorials_tbl テーブルからすべてのレコードのid、title、authorフィールドを取得する例です。 SELECTステートメントを使用してこれを実現できます。 以下は、この例のクエリです。
上記のクエリを実行すると、次の出力が表示されます。
HSQLDB – JDBCプログラム
以下は、 tutorials_tbl テーブルからすべてのレコードのid、title、authorフィールドを取得するJDBCプログラムです。 次のコードを SelectQuery.java ファイルに保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のコードをコンパイルおよび実行します。
上記のコマンドの実行後、次の出力が表示されます-
HSQLDB-Where句
通常、SELECTコマンドを使用してHSQLDBテーブルからデータを取得します。 WHERE条件節を使用して、結果のデータをフィルター処理できます。 WHEREを使用して、選択基準を指定して、テーブルから必要なレコードを選択できます。
構文
HSQLDBテーブルからデータを取得するSELECTコマンドのWHERE句の構文は次のとおりです。
- コンマで区切られた1つ以上のテーブルを使用して、WHERE句を使用してさまざまな条件を含めることができますが、WHERE句はSELECTコマンドのオプション部分です。
- WHERE句を使用して、任意の条件を指定できます。
- ANDまたはOR演算子を使用して、複数の条件を指定できます。
- WHERE句をDELETEまたはUPDATE SQLコマンドとともに使用して、条件を指定することもできます。
条件を使用してレコードデータをフィルタリングできます。 条件付きWHERE句で異なる演算子を使用しています。 WHERE句で使用できる演算子のリストを次に示します。
Operator | Description | Example |
---|---|---|
= | Checks if the values of two operands are equal or not, if yes then the condition becomes true. | (A = B) is not true |
!= | Checks if the values of two operands are equal or not, if values are not equal then the condition becomes true. | (A != B) is true |
> | Checks if the value of the left operand is greater than the value of the right operand, if yes then the condition becomes true. | (A > B) is not true |
< | Checks if the value of the left operand is less than the value of the right operand, if yes then the condition becomes true. | (A < B) is true |
>= | Checks if the value of the left operand is greater than or equal to the value of the right operand, if yes then the condition becomes true. | (A >= B) is not true |
⇐ | Checks if the value of the left operand is less than or equal to the value of the right operand, if yes then the condition becomes true. | (A ⇐ B) is true |
例
ID、タイトル、「Learn C」というタイトルの本の著者などの詳細を取得する例を次に示します。 SELECTコマンドでWHERE句を使用することで可能です。 以下は同じクエリです。
上記のクエリを実行すると、次の出力が表示されます。
HSQLDB – JDBCプログラム
以下に、タイトル Learn C を持つtutorials_tblテーブルからレコードデータを取得するJDBCプログラムを示します。 次のコードを WhereClause.java に保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のコードをコンパイルおよび実行します。
上記のコマンドを実行すると、次の出力が表示されます。
HSQLDB-クエリの更新
テーブルの値を変更するときはいつでも、UPDATEコマンドを使用できます。 これにより、HSQLDBテーブルのフィールド値が変更されます。
構文
UPDATEコマンドの一般的な構文は次のとおりです。
- 1つ以上のフィールドをすべて更新できます。
- WHERE句を使用して、任意の条件を指定できます。
- 一度に1つのテーブルの値を更新できます。
例
チュートリアルのタイトルを「Learn C」からID「101」を持つ「C and Data Structures」に更新する例を考えてみましょう。 以下は、更新のクエリです。
上記のクエリを実行すると、次の出力が表示されます。
HSQLDB – JDBCプログラム
チュートリアルのタイトルを Learn C から CおよびData Structures に更新し、ID 101 を持つJDBCプログラムを次に示します。 次のプログラムを UpdateQuery.java ファイルに保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドの実行後、次の出力が表示されます-
HSQLDB-句の削除
HSQLDBテーブルからレコードを削除したいときはいつでも、DELETE FROMコマンドを使用できます。
構文
HSQLDBテーブルからデータを削除するDELETEコマンドの一般的な構文は次のとおりです。
- WHERE句が指定されていない場合、指定されたMySQLテーブルからすべてのレコードが削除されます。
- WHERE句を使用して、任意の条件を指定できます。 *一度に1つのテーブルのレコードを削除できます。
例
id* 105 を持つ *tutorials_tbl という名前のテーブルからレコードデータを削除する例を考えてみましょう。 以下は、指定された例を実装するクエリです。
上記のクエリの実行後、次の出力が表示されます-
HSQLDB – JDBCプログラム
以下に、指定された例を実装するJDBCプログラムを示します。 次のプログラムを DeleteQuery.java に保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドの実行後、次の出力が表示されます-
HSQLDB-LIKE句
RDBMS構造にはWHERE句があります。 完全一致を行うには、等号(=)を指定したWHERE句を使用できます。 ただし、著者名に「john」を含める必要があるすべての結果を除外する必要がある場合があります。 これは、WHERE句とともにSQL LIKE句を使用して処理できます。
SQLのLIKE句を%文字と一緒に使用すると、UNIXのメタキャラクター(*)のように機能しますが、コマンドプロンプトですべてのファイルまたはディレクトリをリストします。
構文
LIKE句の一般的なSQL構文は次のとおりです。
- WHERE句を使用して、任意の条件を指定できます。
- WHERE句とともにLIKE句を使用できます。
- 等号の代わりにLIKE句を使用できます。
- LIKE句を%記号と共に使用すると、メタキャラクター検索のように機能します。
- ANDまたはOR演算子を使用して、複数の条件を指定できます。
- WHERE … LIKE句をDELETEまたはUPDATE SQLコマンドとともに使用して、条件を指定できます。
例
著者名が John で始まるチュートリアルデータのリストを取得する例を考えてみましょう。 以下は、指定された例のHSQLDBクエリです。
上記のクエリを実行すると、次の出力が表示されます。
HSQLDB – JDBCプログラム
以下は、著者名が John で始まるチュートリアルデータのリストを取得するJDBCプログラムです。 コードを LikeClause.java に保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のコードをコンパイルおよび実行します。
次のコマンドを実行すると、次の出力が表示されます。
HSQLDB-結果の並べ替え
SQL SELECTコマンドは、レコードの取得および表示中に特定の順序に従う要件がある場合は常に、HSQLDBテーブルからデータをフェッチします。 その場合、 ORDER BY 句を使用できます。
構文
HSQLDBからのデータをソートするためのORDER BY句とともにSELECTコマンドの構文を次に示します。
- フィールドがリストされている場合、返された結果を任意のフィールドでソートできます。
- 結果を複数のフィールドでソートできます。
- キーワードASCまたはDESCを使用して、昇順または降順で結果を取得できます。 デフォルトでは、昇順です。
- WHERE … LIKE句を通常の方法で使用して条件を設定できます。
例
著者名を昇順で並べることにより、 tutorials_tbl テーブルのレコードをフェッチおよびソートする例を考えてみましょう。 以下は同じクエリです。
上記のクエリを実行すると、次の出力が表示されます。
HSQLDB – JDBCプログラム
作成者名を昇順で並べることにより、 tutorials_tbl テーブルのレコードをフェッチおよびソートするJDBCプログラムを次に示します。 次のプログラムを OrderBy.java に保存します。
次のコマンドを使用して、データベースを起動できます。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドを実行すると、次の出力が表示されます。
HSQLDB-結合
単一のクエリを使用して複数のテーブルからデータを取得する必要がある場合は、RDBMSからJOINSを使用できます。 単一のSQLクエリで複数のテーブルを使用できます。 HSQLDBに参加するという行為は、2つ以上のテーブルを1つのテーブルに粉砕することを指します。
次の顧客と注文の表を検討してください。
次に、顧客のデータと、それぞれの顧客が発注した注文金額を取得してみましょう。 これは、顧客テーブルと注文テーブルの両方からレコードデータを取得していることを意味します。 これを実現するには、HSQLDBのJOINSコンセプトを使用します。 以下は、同じものに対するJOINクエリです。
上記のクエリを実行すると、次の出力が表示されます。
結合タイプ
HSQLDBにはさまざまな種類の結合があります。
- INNER JOIN -両方のテーブルに一致がある場合に行を返します。
- LEFT JOIN -右のテーブルに一致がない場合でも、左のテーブルからすべての行を返します。
- RIGHT JOIN -左のテーブルに一致がない場合でも、右のテーブルからすべての行を返します。
- FULL JOIN -いずれかのテーブルに一致する行を返します。
- SELF JOIN -テーブルが2つのテーブルであるかのようにテーブルをそれ自体に結合するために使用され、SQLステートメントの少なくとも1つのテーブルの名前を一時的に変更します。
内部結合
最も頻繁に使用され、重要な結合はINNER JOINです。 EQUIJOINとも呼ばれます。
INNER JOINは、結合述語に基づいて2つのテーブル(table1とtable2)の列値を結合することにより、新しい結果テーブルを作成します。 クエリは、table1の各行とtable2の各行を比較して、結合述語を満たす行のすべてのペアを見つけます。 結合述語が満たされると、行AとBの各一致ペアの列値が結合されて結果行になります。
構文
INNER JOINの基本的な構文は次のとおりです。
例
次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。
さて、次のようにINNER JOINクエリを使用してこれらの2つのテーブルを結合しましょう-
上記のクエリを実行すると、次の出力が表示されます。
左結合
HSQLDB LEFT JOINは、右のテーブルに一致するものがない場合でも、左のテーブルからすべての行を返します。 つまり、ON句が右側のテーブルの0(ゼロ)レコードと一致する場合、結合は結果に行を返しますが、右側のテーブルの各列にはNULLを返します。
これは、左結合が左テーブルのすべての値に加えて、右テーブルの一致した値、または一致する結合述語がない場合はNULLを返すことを意味します。
構文
LEFT JOINの基本的な構文は次のとおりです-
ここで、特定の条件は、要件に基づいて任意の特定の式にすることができます。
例
次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。
さて、次のようにLEFT JOINクエリを使用してこれら2つのテーブルを結合しましょう-
上記のクエリの実行後、次の出力が表示されます-
右結合
HSQLDB RIGHT JOINは、左のテーブルに一致するものがない場合でも、右のテーブルのすべての行を返します。 これは、ON句が左側のテーブルの0(ゼロ)レコードと一致する場合、結合は結果に行を返しますが、左側のテーブルの各列にNULLを返すことを意味します。
これは、右結合が右テーブルのすべての値に加えて、左テーブルの一致した値、または一致する結合述部がない場合はNULLを返すことを意味します。
構文
例
次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。
さて、次のようにRIGHT JOINクエリを使用してこれらの2つのテーブルを結合しましょう-
上記のクエリを実行すると、次の結果が表示されます。
完全参加
HSQLDB FULL JOINは、左右の外部結合の結果を結合します。
結合されたテーブルには、両方のテーブルのすべてのレコードが含まれ、どちらかの側で欠落している一致に対してNULLが入力されます。
構文
FULL JOINの基本的な構文は次のとおりです-
ここで、特定の条件は、要件に基づいて任意の特定の式にすることができます。
例
次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。
さて、次のようにFULL JOINクエリを使用してこれらの2つのテーブルを結合しましょう-
上記のクエリを実行すると、次の結果が表示されます。
自己参加
SQL SELF JOINは、テーブルが2つのテーブルであるかのようにテーブルをそれ自体に結合するために使用され、SQLステートメントで少なくとも1つのテーブルの名前を一時的に変更します。
構文
SELF JOINの基本的な構文は次のとおりです-
ここで、WHERE句は、要件に基づいて任意の式にすることができます。
例
次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。
さて、次のようにSELF JOINクエリを使用してこのテーブルを結合しましょう-
上記のクエリの実行後、次の出力が表示されます-
HSQLDB-NULL値
SQL NULLは、欠損値を表すために使用される用語です。 テーブルのNULL値は、空白のように見えるフィールドの値です。 フィールドまたは列の値をNULLと比較する条件を指定しようとすると、常に正しく機能しません。
3つのことを使用して、NULL値を処理できます。
- IS NULL -列の値がNULLの場合、演算子はtrueを返します。
- IS NOT NULL -列の値がNOT NULLの場合、演算子はtrueを返します。
- <⇒ -演算子は値を比較し、(=演算子とは異なり)2つのNULL値に対しても真です。
NULLまたはNOT NULLの列を探すには、それぞれIS NULLまたはIS NOT NULLを使用します。
例
authorとtutorial_countの2つの列を含むテーブル tcount_tbl がある例を考えてみましょう。 tutorial_countにNULL値を指定すると、作成者がチュートリアルを1つも発行しなかったことを示します。 したがって、それぞれの作成者のtutorial_count値はNULLです。
次のクエリを実行します。
次のコマンドを使用して、 tcount_tbl テーブルのすべてのレコードを表示します。
上記のコマンドを実行すると、次の出力が表示されます。
tutorial_count列がNULLであるレコードを見つけるためのクエリは次のとおりです。
クエリの実行後、次の出力を受け取ります。
tutorial_count列がNULLでないレコードを見つけるためのクエリは次のとおりです。
クエリの実行後、次の出力を受け取ります。
HSQLDB – JDBCプログラム
以下は、tutorial_ countがNULLで、tutorial_countがNOT NULLであるテーブルtcount_tblとは別にレコードを取得するJDBCプログラムです。 次のプログラムを NullValues.java に保存します。
次のコマンドを使用して、上記のプログラムをコンパイルして実行します。
上記のコマンドを実行すると、次の出力が表示されます。
HSQLDB-正規表現
HSQLDBは、正規表現とREGEXP演算子に基づいたパターンマッチング操作のためのいくつかの特別なシンボルをサポートしています。
次のパターンの表は、REGEXP演算子とともに使用できます。
Pattern | What the Pattern Matches |
---|---|
^ | Beginning of the string |
$ | End of the string |
. | Any single character |
[…] | Any character listed between the square brackets |
[^…] | Any character not listed between the square brackets |
p1 | p2 |
p3 | Alternation; matches any of the patterns p1, p2, or p3 |
* | Zero or more instances of the preceding element |
+ | One or more instances of the preceding element |
{n} | n instances of the preceding element |
\{m,n} | m through n instances of the preceding element |
例
要件を満たすために、さまざまなクエリの例を試してみましょう。 次のクエリをご覧ください。
このクエリを試して、名前が「^ A」で始まるすべての著者を見つけてください。
上記のクエリを実行すると、次の出力が表示されます。
このクエリを試して、名前が「ul $」で終わるすべての著者を見つけます。
上記のクエリを実行すると、次の出力が表示されます。
このクエリを試して、名前に「th」が含まれるすべての著者を見つけてください。
上記のクエリを実行すると、次の出力が表示されます。
このクエリを試して、名前が母音(a、e、i、o、u)で始まるすべての著者を見つけます。
上記のクエリを実行すると、次の出力が表示されます。
HSQLDB-トランザクション
- トランザクション*は、データベース操作操作の順次グループであり、実行され、1つの作業単位と見なされます。 つまり、すべての操作が正常に実行されると、トランザクション全体が完了します。 トランザクション内のいずれかの操作が失敗すると、トランザクション全体が失敗します。
トランザクションのプロパティ
基本的に、トランザクションは4つの標準プロパティをサポートします。 それらはACIDプロパティと呼ばれます。
一貫性-データベースは、正常にコミットされたトランザクションの状態を適切に変更します。
分離-トランザクションが互いに独立して動作し、相互に透過的になるようにします。
耐久性-コミットされたトランザクションの結果または効果は、システム障害の場合に持続します。
コミット、ロールバック、およびセーブポイント
これらのキーワードは、主にHSQLDBトランザクションに使用されます。
コミット-COMMITコマンドを実行して、常に成功したトランザクションを完了する必要があります。
ロールバック-トランザクションで障害が発生した場合、ROLLBACKコマンドを実行して、トランザクションで参照されているすべてのテーブルを以前の状態に戻す必要があります。
例
次の例では、トランザクションの概念を、コミット、ロールバック、およびセーブポイントとともに説明します。 id、name、age、address、salaryの列を持つテーブルCustomersを考えてみましょう。
Id | Name | Age | Address | Salary |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
次のコマンドを使用して、上記のデータの行に沿って顧客テーブルを作成します。
COMMITの例
次のクエリは、年齢= 25のテーブルから行を削除し、COMMITコマンドを使用してこれらの変更をデータベースに適用します。
上記のクエリを実行すると、次の出力が表示されます。
上記のコマンドが正常に実行されたら、以下のコマンドを実行して顧客テーブルのレコードを確認します。
上記のクエリを実行すると、次の出力が表示されます。
ロールバックの例
入力と同じCustomerテーブルを考えてみましょう。
Id | Name | Age | Address | Salary |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
以下に、年齢= 25のテーブルからレコードを削除し、データベースの変更をROLLBACKすることにより、ロールバック機能について説明するクエリの例を示します。
上記の2つのクエリが正常に実行された後、次のコマンドを使用してCustomerテーブルのレコードデータを表示できます。
上記のコマンドを実行すると、次の出力が表示されます。
削除クエリは、年齢= 25の顧客のレコードデータを削除します。 Rollbackコマンドは、Customerテーブルのこれらの変更をロールバックします。
セーブポイントの例
セーブポイントは、トランザクション全体をロールバックせずに特定のポイントにトランザクションをロールバックできる場合のトランザクションのポイントです。
入力と同じCustomerテーブルを考えてみましょう。
Id | Name | Age | Address | Salary |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Karun | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitanya | 25 | Mumbai | 6500.00 |
5 | Harish | 27 | Bhopal | 8500.00 |
6 | Kamesh | 22 | MP | 1500.00 |
7 | Murali | 24 | Indore | 10000.00 |
この例では、Customersテーブルから3つの異なるレコードを削除することを考えてみましょう。 各削除の前にセーブポイントを作成して、いつでも任意のセーブポイントにロールバックして、適切なデータを元の状態に戻すことができるようにします。
これが一連の操作です。
これで、3つのセーブポイントを作成し、3つのレコードを削除しました。 この状況で、Id 2および3を持つレコードをロールバックする場合は、次のRollbackコマンドを使用します。
SP2にロールバックしてから最初の削除のみが行われたことに注意してください。 次のクエリを使用して、顧客のすべてのレコードを表示します。
上記のクエリを実行すると、次の出力が表示されます。
セーブポイントを解放
RELEASEコマンドを使用してセーブポイントを解放できます。 以下は一般的な構文です。
HSQLDB-変更コマンド
テーブルまたはフィールドの名前、フィールドの順序、フィールドのデータ型、またはテーブル構造を変更する必要がある場合は、ALTERコマンドを使用して同じことを実現できます。
例
さまざまなシナリオを使用してALTERコマンドを説明する例を考えてみましょう。
次のクエリを使用して、フィールドの id と name を含む testalter_tbl という名前のテーブルを作成します。
上記のクエリを実行すると、次の出力が表示されます。
列のドロップまたは追加
HSQLDBテーブルから既存の列をDROPする場合は、DROP句をALTERコマンドと一緒に使用できます。
次のクエリを使用して、テーブルtestalter_tblから列( name )を削除します。
上記のクエリが正常に実行されると、次のコマンドを使用して、名前フィールドがテーブルtestalter_tblから削除されたかどうかを知ることができます。
上記のコマンドを実行すると、次の出力が表示されます。
HSQLDBテーブルに列を追加するときはいつでも、ALTERコマンドと共にADD句を使用できます。
次のクエリを使用して、 NAME という名前の列をテーブル testalter_tbl に追加します。
上記のクエリが正常に実行されると、次のコマンドを使用して、名前フィールドがテーブル testalter_tbl に追加されているかどうかを知ることができます。
上記のクエリを実行すると、次の出力が表示されます。
列の定義または名前の変更
列の定義を変更する必要がある場合は、 MODIFY または CHANGE 句を ALTER コマンドと一緒に使用してください。
CHANGE句の使用方法を説明する例を考えてみましょう。 テーブル testalter_tbl には、データ型intおよびvarcharを持つ2つのフィールド-idおよびname-が含まれています。 次に、idのデータ型をINTからBIGINTに変更してみましょう。 以下は、変更を加えるためのクエリです。
上記のクエリが正常に実行された後、次のコマンドを使用してテーブル構造を検証できます。
上記のコマンドを実行すると、次の出力が表示されます。
次に、 testalter_tbl テーブルの列NAMEのサイズを10から20に増やしてみましょう。 以下は、MODIFY句とALTERコマンドを使用してこれを実現するためのクエリです。
上記のクエリが正常に実行された後、次のコマンドを使用してテーブル構造を検証できます。
上記のコマンドを実行すると、次の出力が表示されます。
HSQLDB-インデックス
- データベースインデックス*は、テーブル内の操作の速度を向上させるデータ構造です。 インデックスは1つ以上の列を使用して作成でき、迅速なランダム検索とレコードへのアクセスの効率的な順序付けの両方の基礎を提供します。
インデックスの作成中に、SQLクエリを作成するために使用される列を検討し、それらの列に1つ以上のインデックスを作成する必要があります。
実際には、インデックスもテーブルの一種であり、主キーまたはインデックスフィールドと各レコードへのポインタを実際のテーブルに保持します。
ユーザーはインデックスを見ることができません。 これらはクエリを高速化するために使用され、データベース検索エンジンがレコードをすばやく見つけるために使用されます。
INSERTステートメントとUPDATEステートメントは、インデックスを持つテーブルではより時間がかかりますが、SELECTステートメントはこれらのテーブルでより速く実行されます。 理由は、挿入または更新中に、データベースもインデックス値を挿入または更新する必要があるためです。
シンプルでユニークなインデックス
テーブルに一意のインデックスを作成できます。 *一意のインデックス*は、2つの行が同じインデックス値を持つことはできないことを意味します。 以下は、テーブルにインデックスを作成する構文です。
1つ以上の列を使用して、インデックスを作成できます。 たとえば、tutorial_authorを使用して、tutorials_tblにインデックスを作成します。
テーブルに単純なインデックスを作成できます。 単純なインデックスを作成するには、クエリからUNIQUEキーワードを省略します。 *単純なインデックス*は、テーブル内の重複値を許可します。
列の値を降順でインデックス付けする場合は、列名の後に予約語DESCを追加できます。
インデックスを追加および削除するALTERコマンド
テーブルにインデックスを追加するためのステートメントの4種類があります-
- * ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)*-このステートメントはPRIMARY KEYを追加します。これは、インデックス付けされた値が一意であり、NULLであってはならないことを意味します。
- * ALTER TABLE tbl_name ADD UNIQUE index_name(column_list)*-このステートメントは、値が一意である必要があるインデックスを作成します(NULL値を除き、複数回表示される場合があります)。
- * ALTER TABLE tbl_name ADD INDEX index_name(column_list)*-これは、任意の値が複数回現れる可能性がある通常のインデックスを追加します。
- * ALTER TABLE tbl_name ADD FULLTEXT index_name(column_list)*-これは、テキスト検索に使用される特別なFULLTEXTインデックスを作成します。
以下は、既存のテーブルにインデックスを追加するクエリです。
ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。 以下は、上記で作成したインデックスを削除するクエリです。
INDEX情報の表示
SHOW INDEXコマンドを使用して、テーブルに関連付けられているすべてのインデックスをリストできます。 縦書き形式の出力(\ Gで指定)は、長い行の折り返しを避けるために、このステートメントでしばしば役立ちます。
以下は、テーブルに関するインデックス情報を表示するための一般的な構文です。