Hsqldb-quick-guide

提供:Dev Guides
移動先:案内検索

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バージョンを確認してください。

java –version

JDKがシステムに正常にインストールされると、次の出力が得られます。

java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

システムに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]をクリックすると、ダウンロードがすぐに開始されます。 最後に、 hsqldb-2.3.4.zip という名前のzipファイルを取得します。

ステップ2-HSQLDB zipファイルを抽出します

zipファイルを抽出し、 C:\ ディレクトリに配置します。 抽出後、次のスクリーンショットに示すようなファイル構造が得られます。

HsqlDBの抽出

  • ステップ3-デフォルトのデータベースを作成します *

HSQLDB用のデフォルトのデータベースはないため、HSQLDB用のデータベースを作成する必要があります。* demodb という名前の新しいデータベースを定義する *server.properties という名前のプロパティファイルを作成しましょう。 次のデータベースサーバープロパティを見てください。

server.database.0 = file:hsqldb/demodb
server.dbname.0 = testdb

このserver.propertiesファイルを、 C:\ hsqldb-2.3.4 \ hsqldb \ であるHSQLDBホームディレクトリに配置します。

コマンドプロンプトで次のコマンドを実行します。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server

上記のコマンドの実行後、次のスクリーンショットに示すようにサーバーのステータスを受け取ります。

デフォルトデータベース

後で、HSQLDBホームディレクトリにあるhsqldbディレクトリの次のフォルダ構造を見つけることができます。これは、 C:\ hsqldb-2.3.4 \ hsqldb です。 これらのファイルは、HSQLDBデータベースサーバーによって作成されたdemodbデータベースの一時ファイル、lckファイル、ログファイル、プロパティファイル、およびスクリプトファイルです。

データベースの作成

ステップ4-データベースサーバーの起動

データベースの作成が完了したら、次のコマンドを使用してデータベースを起動する必要があります。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

上記のコマンドを実行すると、次のステータスが表示されます。

データベースサーバーの起動

これで、 runManagerSwing.bat であるデータベースホーム画面を C:\ hsqldb-2.3.4 \ hsqldb \ bin の場所から開くことができます。 このbatファイルは、HSQLDBデータベースのGUIファイルを開きます。 その前に、ダイアログボックスを介してデータベース設定を要求します。 次のスクリーンショットをご覧ください。 このダイアログボックスで、上記のように設定名とURLを入力し、[OK]をクリックします。

Run ManagerSwing

次のスクリーンショットに示すように、HSQLDBデータベースのGUI画面が表示されます。

Hsqlデータベース

HSQLDB-接続

インストールの章では、データベースを手動で接続する方法について説明しました。 この章では、データベースをプログラムで接続する方法について説明します(Javaプログラミングを使用)。

サーバーを起動し、Javaアプリケーションとデータベース間の接続を作成する次のプログラムを見てください。

import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectDatabase {
   public static void main(String[] args) {
      Connection con = null;

      try {
        //Registering the HSQLDB JDBC driver
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
        //Creating the connection with HSQLDB
         con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         if (con!= null){
            System.out.println("Connection created successfully");

         }else{
            System.out.println("Problem with creating connection");
         }

      }  catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }
}

このコードを ConnectDatabase.java ファイルに保存します。 次のコマンドを使用してデータベースを起動する必要があります。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、コードをコンパイルおよび実行できます。

\>javac ConnectDatabase.java
\>java ConnectDatabase

上記のコマンドの実行後、次の出力が表示されます-

Connection created successfully

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-テーブルの作成

テーブルを作成するための基本的な必須要件は、テーブル名、フィールド名、およびそれらのフィールドのデータ型です。 オプションで、テーブルにキー制約を提供することもできます。

構文

次の構文を見てください。

CREATE TABLE table_name (column_name column_type);

id、title、author、submission_dateなどのフィールド名を持つtutorials_tblという名前のテーブルを作成しましょう。 次のクエリをご覧ください。

CREATE TABLE tutorials_tbl (
   id INT NOT NULL,
   title VARCHAR(50) NOT NULL,
   author VARCHAR(20) NOT NULL,
   submission_date DATE,
   PRIMARY KEY (id)
);

上記のクエリの実行後、次の出力が表示されます-

(0) rows effected

HSQLDB – JDBCプログラム

以下は、tutorials_tblという名前のテーブルをHSQLDBデータベースに作成するために使用されるJDBCプログラムです。 プログラムを CreateTable.java ファイルに保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class CreateTable {

   public static void main(String[] args) {

      Connection con = null;
      Statement stmt = null;
      int result = 0;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();

         result = stmt.executeUpdate("CREATE TABLE tutorials_tbl (
            id INT NOT NULL, title VARCHAR(50) NOT NULL,
            author VARCHAR(20) NOT NULL, submission_date DATE,
            PRIMARY KEY (id));
         ");

      }  catch (Exception e) {
         e.printStackTrace(System.out);
      }
      System.out.println("Table created successfully");
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac CreateTable.java
\>java CreateTable

上記のコマンドの実行後、次の出力が表示されます-

Table created successfully

HSQLDB-テーブルの削除

既存のHSQLDBテーブルを削除するのは非常に簡単です。 ただし、既存のテーブルを削除すると、テーブルを削除した後に失われたデータは回復されないため、非常に注意する必要があります。

構文

以下は、HSQLDBテーブルを削除するための一般的なSQL構文です。

DROP TABLE table_name;

employeeという名前のテーブルをHSQLDBサーバーから削除する例を考えてみましょう。 以下は、employeeという名前のテーブルを削除するクエリです。

DROP TABLE employee;

上記のクエリの実行後、次の出力が表示されます-

(0) rows effected

HSQLDB – JDBCプログラム

以下は、HSQLDBサーバーからテーブル従業員を削除するために使用されるJDBCプログラムです。

次のコードを DropTable.java ファイルに保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DropTable {
   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      int result = 0;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeUpdate("DROP TABLE employee");
      }catch (Exception e) {
         e.printStackTrace(System.out);
      }

      System.out.println("Table dropped successfully");
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac DropTable.java
\>java DropTable

上記のコマンドの実行後、次の出力が表示されます-

Table dropped successfully

HSQLDB-クエリの挿入

INSERT INTOコマンドを使用して、HSQLDBでクエリの挿入ステートメントを実行できます。 テーブルの列フィールドの順序に従って、ユーザー定義データを提供する必要があります。

構文

以下は、クエリを INSERT するための一般的な構文です。

INSERT INTO table_name (field1, field2,...fieldN)
VALUES (value1, value2,...valueN );

文字列型のデータをテーブルに挿入するには、二重引用符または一重引用符を使用して、挿入クエリステートメントに文字列値を提供する必要があります。

値がid = 100、title = Learn PHP、Author = John Poulで、 tutorials_tbl という名前のテーブルにレコードを挿入し、提出日が現在の日付である例を考えてみましょう。

以下は、指定された例のクエリです。

INSERT INTO tutorials_tbl VALUES (100,'Learn PHP', 'John Poul', NOW());

上記のクエリの実行後、次の出力が表示されます-

1 row effected

HSQLDB – JDBCプログラム

これは、指定された値id = 100、タイトル= PHPの学習、作成者=ジョンポール、および提出日が現在の日付であるテーブルにレコードを挿入するJDBCプログラムです。 指定されたプログラムを見てください。 コードを InserQuery.java ファイルに保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class InsertQuery {
   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      int result = 0;
      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection( "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeUpdate("INSERT INTO tutorials_tbl
            VALUES (100,'Learn PHP', 'John Poul', NOW())");
         con.commit();
      }catch (Exception e) {
         e.printStackTrace(System.out);
      }
      System.out.println(result+" rows effected");
      System.out.println("Rows inserted successfully");
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac InsertQuery.java
\>java InsertQuery

上記のコマンドの実行後、次の出力が表示されます-

1 rows effected
Rows inserted successfully
*INSERT INTO* コマンドを使用して、 *tutorials_tbl* テーブルに次のレコードを挿入してください。
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ステートメントで必須フィールドのリストに言及する必要があります。

構文

選択クエリの一般的な構文は次のとおりです。

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • 1つのSELECTコマンドで1つ以上のフィールドをフェッチできます。
  • フィールドの代わりに星印(*)を指定できます。 この場合、SELECTはすべてのフィールドを返します。
  • WHERE句を使用して、任意の条件を指定できます。
  • SELECTがレコードを返し始める位置から、OFFSETを使用してオフセットを指定できます。 デフォルトでは、オフセットはゼロです。
  • LIMIT属性を使用して、返品の数を制限できます。

以下は、 tutorials_tbl テーブルからすべてのレコードのid、title、authorフィールドを取得する例です。 SELECTステートメントを使用してこれを実現できます。 以下は、この例のクエリです。

SELECT id, title, author FROM tutorials_tbl

上記のクエリを実行すると、次の出力が表示されます。

+------+----------------+-----------------+
|  id  |      title     |    author       |
+------+----------------+-----------------+
| 100  |     Learn PHP  |    John Poul    |
| 101  |     Learn C    |    Yaswanth     |
| 102  |   Learn MySQL  |     Abdul S     |
| 103  |   Learn Excell |   Bavya kanna   |
| 104  |   Learn JDB    |    Ajith kumar  |
| 105  |   Learn Junit  |   Sathya Murthi |
+------+----------------+-----------------+

HSQLDB – JDBCプログラム

以下は、 tutorials_tbl テーブルからすべてのレコードのid、title、authorフィールドを取得するJDBCプログラムです。 次のコードを SelectQuery.java ファイルに保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class SelectQuery {

   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      ResultSet result = null;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeQuery(
            "SELECT id, title, author FROM tutorials_tbl");

         while(result.next()){
            System.out.println(result.getInt("id")+" | "+
               result.getString("title")+" | "+
               result.getString("author"));
         }
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のコードをコンパイルおよび実行します。

\>javac SelectQuery.java
\>java SelectQuery

上記のコマンドの実行後、次の出力が表示されます-

100 | Learn PHP | John Poul
101 | Learn C | Yaswanth
102 | Learn MySQL | Abdul S
103 | Learn Excell | Bavya Kanna
104 | Learn JDB | Ajith kumar
105 | Learn Junit | Sathya Murthi

HSQLDB-Where句

通常、SELECTコマンドを使用してHSQLDBテーブルからデータを取得します。 WHERE条件節を使用して、結果のデータをフィルター処理できます。 WHEREを使用して、選択基準を指定して、テーブルから必要なレコードを選択できます。

構文

HSQLDBテーブルからデータを取得するSELECTコマンドのWHERE句の構文は次のとおりです。

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • コンマで区切られた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句を使用することで可能です。 以下は同じクエリです。

SELECT id, title, author FROM tutorials_tbl WHERE title = 'Learn C';

上記のクエリを実行すると、次の出力が表示されます。

+------+----------------+-----------------+
| id   |      title     |    author       |
+------+----------------+-----------------+
| 101  |      Learn C   |   Yaswanth      |
+------+----------------+-----------------+

HSQLDB – JDBCプログラム

以下に、タイトル Learn C を持つtutorials_tblテーブルからレコードデータを取得するJDBCプログラムを示します。 次のコードを WhereClause.java に保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class WhereClause {

   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      ResultSet result = null;
      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeQuery(
            "SELECT id, title, author FROM tutorials_tbl
            WHERE title = 'Learn C'");

         while(result.next()){
            System.out.println(result.getInt("id")+" |
               "+result.getString("title")+" |
               "+result.getString("author"));
         }
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }

}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のコードをコンパイルおよび実行します。

\>javac WhereClause.java
\>java WhereClause

上記のコマンドを実行すると、次の出力が表示されます。

101 | Learn C | Yaswanth

HSQLDB-クエリの更新

テーブルの値を変更するときはいつでも、UPDATEコマンドを使用できます。 これにより、HSQLDBテーブルのフィールド値が変更されます。

構文

UPDATEコマンドの一般的な構文は次のとおりです。

UPDATE table_name SET field1 = new-value1, field2 = new-value2 [WHERE Clause]
  • 1つ以上のフィールドをすべて更新できます。
  • WHERE句を使用して、任意の条件を指定できます。
  • 一度に1つのテーブルの値を更新できます。

チュートリアルのタイトルを「Learn C」からID「101」を持つ「C and Data Structures」に更新する例を考えてみましょう。 以下は、更新のクエリです。

UPDATE tutorials_tbl SET title = 'C and Data Structures' WHERE id = 101;

上記のクエリを実行すると、次の出力が表示されます。

(1) Rows effected

HSQLDB – JDBCプログラム

チュートリアルのタイトルを Learn C から CおよびData Structures に更新し、ID 101 を持つJDBCプログラムを次に示します。 次のプログラムを UpdateQuery.java ファイルに保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class UpdateQuery {

   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      int result = 0;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeUpdate(
            "UPDATE tutorials_tbl SET title = 'C and Data Structures' WHERE id = 101");
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
      System.out.println(result+" Rows effected");
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac UpdateQuery.java
\>java UpdateQuery

上記のコマンドの実行後、次の出力が表示されます-

1 Rows effected

HSQLDB-句の削除

HSQLDBテーブルからレコードを削除したいときはいつでも、DELETE FROMコマンドを使用できます。

構文

HSQLDBテーブルからデータを削除するDELETEコマンドの一般的な構文は次のとおりです。

DELETE FROM table_name [WHERE Clause]
  • WHERE句が指定されていない場合、指定されたMySQLテーブルからすべてのレコードが削除されます。
  • WHERE句を使用して、任意の条件を指定できます。 *一度に1つのテーブルのレコードを削除できます。

id* 105 を持つ *tutorials_tbl という名前のテーブルからレコードデータを削除する例を考えてみましょう。 以下は、指定された例を実装するクエリです。

DELETE FROM tutorials_tbl WHERE id = 105;

上記のクエリの実行後、次の出力が表示されます-

(1) rows effected

HSQLDB – JDBCプログラム

以下に、指定された例を実装するJDBCプログラムを示します。 次のプログラムを DeleteQuery.java に保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class DeleteQuery {

   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      int result = 0;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeUpdate(
            "DELETE FROM tutorials_tbl   WHERE id=105");
      } catch (Exception e) {

         e.printStackTrace(System.out);
      }
      System.out.println(result+" Rows effected");
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac DeleteQuery.java
\>java DeleteQuery

上記のコマンドの実行後、次の出力が表示されます-

1 Rows effected

HSQLDB-LIKE句

RDBMS構造にはWHERE句があります。 完全一致を行うには、等号(=)を指定したWHERE句を使用できます。 ただし、著者名に「john」を含める必要があるすべての結果を除外する必要がある場合があります。 これは、WHERE句とともにSQL LIKE句を使用して処理できます。

SQLのLIKE句を%文字と一緒に使用すると、UNIXのメタキャラクター(*)のように機能しますが、コマンドプロンプトですべてのファイルまたはディレクトリをリストします。

構文

LIKE句の一般的なSQL構文は次のとおりです。

SELECT field1, field2,...fieldN table_name1, table_name2...
WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • WHERE句を使用して、任意の条件を指定できます。
  • WHERE句とともにLIKE句を使用できます。
  • 等号の代わりにLIKE句を使用できます。
  • LIKE句を%記号と共に使用すると、メタキャラクター検索のように機能します。
  • ANDまたはOR演算子を使用して、複数の条件を指定できます。
  • WHERE …​ LIKE句をDELETEまたはUPDATE SQLコマンドとともに使用して、条件を指定できます。

著者名が John で始まるチュートリアルデータのリストを取得する例を考えてみましょう。 以下は、指定された例のHSQLDBクエリです。

SELECT * from tutorials_tbl WHERE author LIKE 'John%';

上記のクエリを実行すると、次の出力が表示されます。

+-----+----------------+-----------+-----------------+
|  id |      title     |   author  | submission_date |
+-----+----------------+-----------+-----------------+
| 100 |    Learn PHP   | John Poul | 2016-06-20      |
+-----+----------------+-----------+-----------------+

HSQLDB – JDBCプログラム

以下は、著者名が John で始まるチュートリアルデータのリストを取得するJDBCプログラムです。 コードを LikeClause.java に保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class LikeClause {

   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      ResultSet result = null;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeQuery(
            "SELECT * from tutorials_tbl WHERE author LIKE 'John%';");

         while(result.next()){
            System.out.println(result.getInt("id")+" |
               "+result.getString("title")+" |
               "+result.getString("author")+" |
               "+result.getDate("submission_date"));
         }
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のコードをコンパイルおよび実行します。

\>javac LikeClause.java
\>java LikeClause

次のコマンドを実行すると、次の出力が表示されます。

100 | Learn PHP | John Poul | 2016-06-20

HSQLDB-結果の並べ替え

SQL SELECTコマンドは、レコードの取得および表示中に特定の順序に従う要件がある場合は常に、HSQLDBテーブルからデータをフェッチします。 その場合、 ORDER BY 句を使用できます。

構文

HSQLDBからのデータをソートするためのORDER BY句とともにSELECTコマンドの構文を次に示します。

SELECT field1, field2,...fieldN table_name1, table_name2...
ORDER BY field1, [field2...] [ASC [DESC]]
  • フィールドがリストされている場合、返された結果を任意のフィールドでソートできます。
  • 結果を複数のフィールドでソートできます。
  • キーワードASCまたはDESCを使用して、昇順または降順で結果を取得できます。 デフォルトでは、昇順です。
  • WHERE …​ LIKE句を通常の方法で使用して条件を設定できます。

著者名を昇順で並べることにより、 tutorials_tbl テーブルのレコードをフェッチおよびソートする例を考えてみましょう。 以下は同じクエリです。

SELECT id, title, author from tutorials_tbl ORDER BY author ASC;

上記のクエリを実行すると、次の出力が表示されます。

+------+----------------+-----------------+
| id   |     title      |     author      |
+------+----------------+-----------------+
| 102  |  Learn MySQL   |     Abdul S     |
| 104  |  Learn JDB     |    Ajith kumar  |
| 103  |  Learn Excell  |    Bavya kanna  |
| 100  |  Learn PHP     |    John Poul    |
| 105  |  Learn Junit   |   Sathya Murthi |
| 101  |  Learn C       |    Yaswanth     |
+------+----------------+-----------------+

HSQLDB – JDBCプログラム

作成者名を昇順で並べることにより、 tutorials_tbl テーブルのレコードをフェッチおよびソートするJDBCプログラムを次に示します。 次のプログラムを OrderBy.java に保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class OrderBy {

   public static void main(String[] args) {
      Connection con = null;
      Statement stmt = null;
      ResultSet result = null;

      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt = con.createStatement();
         result = stmt.executeQuery(
            "SELECT id, title, author from tutorials_tbl
            ORDER BY author ASC");

         while(result.next()){
            System.out.println(result.getInt("id")+" |
            "+result.getString("title")+" |
            "+result.getString("author"));
         }
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }
}

次のコマンドを使用して、データベースを起動できます。

\>cd C:\hsqldb-2.3.4\hsqldb
hsqldb>java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0
file:hsqldb/demodb --dbname.0 testdb

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac OrderBy.java
\>java OrderBy

上記のコマンドを実行すると、次の出力が表示されます。

102 | Learn MySQL           | Abdul S
104 | Learn JDB             | Ajith kumar
103 | Learn Excell          | Bavya Kanna
100 | Learn PHP             | John Poul
105 | Learn Junit           | Sathya Murthi
101 | C and Data Structures | Yaswanth

HSQLDB-結合

単一のクエリを使用して複数のテーブルからデータを取得する必要がある場合は、RDBMSからJOINSを使用できます。 単一のSQLクエリで複数のテーブルを使用できます。 HSQLDBに参加するという行為は、2つ以上のテーブルを1つのテーブルに粉砕することを指します。

次の顧客と注文の表を検討してください。

Customer:
+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad |  2000.00 |
| 2  |  Khilan  | 25  |   Delhi   |  1500.00 |
| 3  |  kaushik | 23  |   Kota    |  2000.00 |
| 4  | Chaitali | 25  |   Mumbai  |  6500.00 |
| 5  |  Hardik  | 27  |   Bhopal  |  8500.00 |
| 6  |  Komal   | 22  |    MP     |  4500.00 |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
Orders:
+-----+---------------------+-------------+--------+
|OID  |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      |  3000  |
| 100 | 2009-10-08 00:00:00 |      3      |  1500  |
| 101 | 2009-11-20 00:00:00 |      2      |  1560  |
| 103 | 2008-05-20 00:00:00 |      4      |  2060  |
+-----+---------------------+-------------+--------+

次に、顧客のデータと、それぞれの顧客が発注した注文金額を取得してみましょう。 これは、顧客テーブルと注文テーブルの両方からレコードデータを取得していることを意味します。 これを実現するには、HSQLDBのJOINSコンセプトを使用します。 以下は、同じものに対するJOINクエリです。

SELECT ID, NAME, AGE, AMOUNT FROM CUSTOMERS, ORDERS WHERE CUSTOMERS.ID =
ORDERS.CUSTOMER_ID;

上記のクエリを実行すると、次の出力が表示されます。

+----+----------+-----+--------+
| ID |   NAME   | AGE | AMOUNT |
+----+----------+-----+--------+
|  3 | kaushik  |  23 |  3000  |
|  3 | kaushik  |  23 |  1500  |
|  2 | Khilan   |  25 |  1560  |
|  4 | Chaitali |  25 |  2060  |
+----+----------+-----+--------+

結合タイプ

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の基本的な構文は次のとおりです。

SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;

次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  | SALARY   |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad | 2000.00  |
| 2  |  Khilan  | 25  |   Delhi   | 1500.00  |
| 3  |  kaushik | 23  |   Kota    | 2000.00  |
| 4  | Chaitali | 25  |   Mumbai  | 6500.00  |
| 5  |  Hardik  | 27  |   Bhopal  | 8500.00  |
| 6  |  Komal   | 22  |     MP    | 4500.00  |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      | 3000   |
| 100 | 2009-10-08 00:00:00 |      3      | 1500   |
| 101 | 2009-11-20 00:00:00 |      2      | 1560   |
| 103 | 2008-05-20 00:00:00 |      4      | 2060   |
+-----+---------------------+-------------+--------+

さて、次のようにINNER JOINクエリを使用してこれらの2つのテーブルを結合しましょう-

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
INNER JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

上記のクエリを実行すると、次の出力が表示されます。

+----+----------+--------+---------------------+
| ID |   NAME   | AMOUNT |         DATE        |
+----+----------+--------+---------------------+
| 3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
| 3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
| 2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
| 4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
+----+----------+--------+---------------------+

左結合

HSQLDB LEFT JOINは、右のテーブルに一致するものがない場合でも、左のテーブルからすべての行を返します。 つまり、ON句が右側のテーブルの0(ゼロ)レコードと一致する場合、結合は結果に行を返しますが、右側のテーブルの各列にはNULLを返します。

これは、左結合が左テーブルのすべての値に加えて、右テーブルの一致した値、または一致する結合述語がない場合はNULLを返すことを意味します。

構文

LEFT JOINの基本的な構文は次のとおりです-

SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;

ここで、特定の条件は、要件に基づいて任意の特定の式にすることができます。

次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  | SALARY   |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad | 2000.00  |
| 2  |  Khilan  | 25  |   Delhi   | 1500.00  |
| 3  |  kaushik | 23  |   Kota    | 2000.00  |
| 4  | Chaitali | 25  |   Mumbai  | 6500.00  |
| 5  |  Hardik  | 27  |   Bhopal  | 8500.00  |
| 6  |  Komal   | 22  |    MP     | 4500.00  |
| 7  |  Muffy   | 24  |  Indore   | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |        DATE         | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |     3       | 3000   |
| 100 | 2009-10-08 00:00:00 |     3       | 1500   |
| 101 | 2009-11-20 00:00:00 |     2       | 1560   |
| 103 | 2008-05-20 00:00:00 |     4       | 2060   |
+-----+---------------------+-------------+--------+

さて、次のようにLEFT JOINクエリを使用してこれら2つのテーブルを結合しましょう-

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

上記のクエリの実行後、次の出力が表示されます-

+----+----------+--------+---------------------+
| ID |   NAME   | AMOUNT |         DATE        |
+----+----------+--------+---------------------+
|  1 |  Ramesh  |  NULL  |        NULL         |
|  2 |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|  3 |  kaushik |  3000  | 2009-10-08 00:00:00 |
|  3 |  kaushik |  1500  | 2009-10-08 00:00:00 |
|  4 | Chaitali |  2060  | 2008-05-20 00:00:00 |
|  5 |  Hardik  |  NULL  |        NULL         |
|  6 |  Komal   |  NULL  |        NULL         |
|  7 |  Muffy   |  NULL  |        NULL         |
+----+----------+--------+---------------------+

右結合

HSQLDB RIGHT JOINは、左のテーブルに一致するものがない場合でも、右のテーブルのすべての行を返します。 これは、ON句が左側のテーブルの0(ゼロ)レコードと一致する場合、結合は結果に行を返しますが、左側のテーブルの各列にNULLを返すことを意味します。

これは、右結合が右テーブルのすべての値に加えて、左テーブルの一致した値、または一致する結合述部がない場合はNULLを返すことを意味します。

構文

*RIGHT JOIN* の基本的な構文は次のとおりです-
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;

次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  | 32  | Ahmedabad |  2000.00 |
| 2  |  Khilan  | 25  |   Delhi   |  1500.00 |
| 3  |  kaushik | 23  |   Kota    |  2000.00 |
| 4  | Chaitali | 25  |   Mumbai  |  6500.00 |
| 5  |  Hardik  | 27  |   Bhopal  |  8500.00 |
| 6  |  Komal   | 22  |     MP    |  4500.00 |
| 7  |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |       DATE          | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |      3      |  3000  |
| 100 | 2009-10-08 00:00:00 |      3      |  1500  |
| 101 | 2009-11-20 00:00:00 |      2      |  1560  |
| 103 | 2008-05-20 00:00:00 |      4      |  2060  |
+-----+---------------------+-------------+--------+

さて、次のようにRIGHT JOINクエリを使用してこれらの2つのテーブルを結合しましょう-

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
RIGHT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

上記のクエリを実行すると、次の結果が表示されます。

+------+----------+--------+---------------------+
|  ID  |   NAME   | AMOUNT |        DATE         |
+------+----------+--------+---------------------+
|  3   |  kaushik |  3000  | 2009-10-08 00:00:00 |
|  3   |  kaushik |  1500  | 2009-10-08 00:00:00 |
|  2   |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|  4   | Chaitali |  2060  | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

完全参加

HSQLDB FULL JOINは、左右の外部結合の結果を結合します。

結合されたテーブルには、両方のテーブルのすべてのレコードが含まれ、どちらかの側で欠落している一致に対してNULLが入力されます。

構文

FULL JOINの基本的な構文は次のとおりです-

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

ここで、特定の条件は、要件に基づいて任意の特定の式にすることができます。

次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |  ADDRESS  |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  | 32  | Ahmedabad | 2000.00  |
|  2 |  Khilan  | 25  |   Delhi   | 1500.00  |
|  3 |  kaushik | 23  |   Kota    | 2000.00  |
|  4 | Chaitali | 25  |   Mumbai  | 6500.00  |
|  5 |  Hardik  | 27  |   Bhopal  | 8500.00  |
|  6 |  Komal   | 22  |   MP      | 4500.00  |
|  7 |  Muffy   | 24  |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+
+-----+---------------------+-------------+--------+
| OID |         DATE        | CUSTOMER_ID | AMOUNT |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |    3        | 3000   |
| 100 | 2009-10-08 00:00:00 |    3        | 1500   |
| 101 | 2009-11-20 00:00:00 |    2        | 1560   |
| 103 | 2008-05-20 00:00:00 |    4        | 2060   |
+-----+---------------------+-------------+--------+

さて、次のようにFULL JOINクエリを使用してこれらの2つのテーブルを結合しましょう-

SELECT ID, NAME, AMOUNT, DATE FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;

上記のクエリを実行すると、次の結果が表示されます。

+------+----------+--------+---------------------+
|  ID  |    NAME  | AMOUNT |        DATE         |
+------+----------+--------+---------------------+
|   1  |  Ramesh  |  NULL  |        NULL         |
|   2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|   3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
|   3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
|   4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
|   5  |  Hardik  |  NULL  |        NULL         |
|   6  |   Komal  |  NULL  |        NULL         |
|   7  |   Muffy  |  NULL  |        NULL         |
|   3  |  kaushik |  3000  | 2009-10-08 00:00:00 |
|   3  |  kaushik |  1500  | 2009-10-08 00:00:00 |
|   2  |  Khilan  |  1560  | 2009-11-20 00:00:00 |
|   4  | Chaitali |  2060  | 2008-05-20 00:00:00 |
+------+----------+--------+---------------------+

自己参加

SQL SELF JOINは、テーブルが2つのテーブルであるかのようにテーブルをそれ自体に結合するために使用され、SQLステートメントで少なくとも1つのテーブルの名前を一時的に変更します。

構文

SELF JOINの基本的な構文は次のとおりです-

SELECT a.column_name, b.column_name...
FROM table1 a, table1 b
WHERE a.common_field = b.common_field;

ここで、WHERE句は、要件に基づいて任意の式にすることができます。

次の2つのテーブルを検討してください。1つはCUSTOMERSテーブル、もう1つはORDERSテーブルというタイトルです。

+----+----------+-----+-----------+----------+
| ID |    NAME  | AGE |   ADDRESS |   SALARY |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad | 2000.00  |
|  2 |  Khilan  |  25 |   Delhi   | 1500.00  |
|  3 |  kaushik |  23 |   Kota    | 2000.00  |
|  4 | Chaitali |  25 |   Mumbai  | 6500.00  |
|  5 |  Hardik  |  27 |   Bhopal  | 8500.00  |
|  6 |  Komal   |  22 |   MP      | 4500.00  |
|  7 |  Muffy   |  24 |   Indore  | 10000.00 |
+----+----------+-----+-----------+----------+

さて、次のようにSELF JOINクエリを使用してこのテーブルを結合しましょう-

SELECT a.ID, b.NAME, a.SALARY FROM CUSTOMERS a, CUSTOMERS b
WHERE a.SALARY > b.SALARY;

上記のクエリの実行後、次の出力が表示されます-

+----+----------+---------+
| ID |   NAME   | SALARY  |
+----+----------+---------+
| 2  |  Ramesh  | 1500.00 |
| 2  |  kaushik | 1500.00 |
| 1  | Chaitali | 2000.00 |
| 2  | Chaitali | 1500.00 |
| 3  | Chaitali | 2000.00 |
| 6  | Chaitali | 4500.00 |
| 1  |  Hardik  | 2000.00 |
| 2  |  Hardik  | 1500.00 |
| 3  |  Hardik  | 2000.00 |
| 4  |  Hardik  | 6500.00 |
| 6  |  Hardik  | 4500.00 |
| 1  |  Komal   | 2000.00 |
| 2  |  Komal   | 1500.00 |
| 3  |  Komal   | 2000.00 |
| 1  |  Muffy   | 2000.00 |
| 2  |  Muffy   | 1500.00 |
| 3  |  Muffy   | 2000.00 |
| 4  |  Muffy   | 6500.00 |
| 5  |  Muffy   | 8500.00 |
| 6  |  Muffy   | 4500.00 |
+----+----------+---------+

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です。

次のクエリを実行します。

create table tcount_tbl(author varchar(40) NOT NULL, tutorial_count INT);
INSERT INTO tcount_tbl values ('Abdul S', 20);
INSERT INTO tcount_tbl values ('Ajith kumar', 5);
INSERT INTO tcount_tbl values ('Jen', NULL);
INSERT INTO tcount_tbl values ('Bavya kanna', 8);
INSERT INTO tcount_tbl values ('mahran', NULL);
INSERT INTO tcount_tbl values ('John Poul', 10);
INSERT INTO tcount_tbl values ('Sathya Murthi', 6);

次のコマンドを使用して、 tcount_tbl テーブルのすべてのレコードを表示します。

select *from tcount_tbl;

上記のコマンドを実行すると、次の出力が表示されます。

+-----------------+----------------+
|     author      | tutorial_count |
+-----------------+----------------+
|      Abdul S    |      20        |
|    Ajith kumar  |      5         |
|        Jen      |     NULL       |
|    Bavya kanna  |      8         |
|       mahran    |     NULL       |
|     John Poul   |      10        |
|   Sathya Murthi |      6         |
+-----------------+----------------+

tutorial_count列がNULLであるレコードを見つけるためのクエリは次のとおりです。

SELECT* FROM tcount_tbl WHERE tutorial_count IS NULL;

クエリの実行後、次の出力を受け取ります。

+-----------------+----------------+
|     author      | tutorial_count |
+-----------------+----------------+
|       Jen       |     NULL       |
|      mahran     |     NULL       |
+-----------------+----------------+

tutorial_count列がNULLでないレコードを見つけるためのクエリは次のとおりです。

SELECT * FROM tcount_tbl WHERE tutorial_count IS NOT NULL;

クエリの実行後、次の出力を受け取ります。

+-----------------+----------------+
|      author     | tutorial_count |
+-----------------+----------------+
|      Abdul S    |      20        |
|     Ajith kumar |       5        |
|     Bavya kanna |       8        |
|     John Poul   |      10        |
|   Sathya Murthi |       6        |
+-----------------+----------------+

HSQLDB – JDBCプログラム

以下は、tutorial_ countがNULLで、tutorial_countがNOT NULLであるテーブルtcount_tblとは別にレコードを取得するJDBCプログラムです。 次のプログラムを NullValues.java に保存します。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class NullValues {
   public static void main(String[] args) {
      Connection con = null;
      Statement stmt_is_null = null;
      Statement stmt_is_not_null = null;
      ResultSet result = null;
      try {
         Class.forName("org.hsqldb.jdbc.JDBCDriver");
         con = DriverManager.getConnection(
            "jdbc:hsqldb:hsql://localhost/testdb", "SA", "");
         stmt_is_null = con.createStatement();
         stmt_is_not_null = con.createStatement();
         result = stmt_is_null.executeQuery(
            "SELECT *FROM tcount_tbl WHERE tutorial_count IS NULL;");
         System.out.println("Records where the tutorial_count is NULL");

         while(result.next()){
            System.out.println(result.getString("author")+" |
            "+result.getInt("tutorial_count"));
         }
         result = stmt_is_not_null.executeQuery(
            "SELECT* FROM tcount_tbl WHERE tutorial_count IS NOT NULL;");
         System.out.println("Records where the tutorial_count is NOT NULL");

         while(result.next()){
            System.out.println(result.getString("author")+" |
            "+result.getInt("tutorial_count"));
         }
      } catch (Exception e) {
         e.printStackTrace(System.out);
      }
   }
}

次のコマンドを使用して、上記のプログラムをコンパイルして実行します。

\>javac NullValues.java
\>Java NullValues

上記のコマンドを実行すると、次の出力が表示されます。

Records where the tutorial_count is NULL
Jen         | 0
mahran      | 0

Records where the tutorial_count is NOT NULL
Abdul S        | 20
Ajith kumar    | 5
Bavya kanna    | 8
John Poul      | 10
Sathya Murthi  | 6

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」で始まるすべての著者を見つけてください。

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'^A.*');

上記のクエリを実行すると、次の出力が表示されます。

+-----------------+
|     author      |
+-----------------+
|     Abdul S     |
|    Ajith kumar  |
+-----------------+

このクエリを試して、名前が「ul $」で終わるすべての著者を見つけます。

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'.*ul$');

上記のクエリを実行すると、次の出力が表示されます。

+-----------------+
|     author      |
+-----------------+
|    John Poul    |
+-----------------+

このクエリを試して、名前に「th」が含まれるすべての著者を見つけてください。

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'.*th.*');

上記のクエリを実行すると、次の出力が表示されます。

+-----------------+
|     author      |
+-----------------+
|    Ajith kumar  |
|     Abdul S     |
+-----------------+

このクエリを試して、名前が母音(a、e、i、o、u)で始まるすべての著者を見つけます。

SELECT author FROM tcount_tbl WHERE REGEXP_MATCHES(author,'^[AEIOU].*');

上記のクエリを実行すると、次の出力が表示されます。

+-----------------+
|     author      |
+-----------------+
|     Abdul S     |
|    Ajith kumar  |
+-----------------+

HSQLDB-トランザクション

  • トランザクション*は、データベース操作操作の順次グループであり、実行され、1つの作業単位と見なされます。 つまり、すべての操作が正常に実行されると、トランザクション全体が完了します。 トランザクション内のいずれかの操作が失敗すると、トランザクション全体が失敗します。

トランザクションのプロパティ

基本的に、トランザクションは4つの標準プロパティをサポートします。 それらはACIDプロパティと呼ばれます。

*Atomicity* -トランザクション内のすべての操作が正常に実行されます。そうでない場合、トランザクションは失敗した時点で中止され、以前の操作は以前の位置にロールバックされます。

一貫性-データベースは、正常にコミットされたトランザクションの状態を適切に変更します。

分離-トランザクションが互いに独立して動作し、相互に透過的になるようにします。

耐久性-コミットされたトランザクションの結果または効果は、システム障害の場合に持続します。

コミット、ロールバック、およびセーブポイント

これらのキーワードは、主にHSQLDBトランザクションに使用されます。

コミット-COMMITコマンドを実行して、常に成功したトランザクションを完了する必要があります。

ロールバック-トランザクションで障害が発生した場合、ROLLBACKコマンドを実行して、トランザクションで参照されているすべてのテーブルを以前の状態に戻す必要があります。

*Savepoint* -ロールバックするトランザクションのグループ内にポイントを作成します。

次の例では、トランザクションの概念を、コミット、ロールバック、およびセーブポイントとともに説明します。 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

次のコマンドを使用して、上記のデータの行に沿って顧客テーブルを作成します。

CREATE TABLE Customer (id INT NOT NULL, name VARCHAR(100) NOT NULL, age INT NOT
NULL, address VARCHAR(20), Salary INT, PRIMARY KEY (id));
Insert into Customer values (1, "Ramesh", 32, "Ahmedabad", 2000);
Insert into Customer values (2, "Karun", 25, "Delhi", 1500);
Insert into Customer values (3, "Kaushik", 23, "Kota", 2000);
Insert into Customer values (4, "Chaitanya", 25, "Mumbai", 6500);
Insert into Customer values (5, "Harish", 27, "Bhopal", 8500);
Insert into Customer values (6, "Kamesh", 22, "MP", 1500);
Insert into Customer values (7, "Murali", 24, "Indore", 10000);

COMMITの例

次のクエリは、年齢= 25のテーブルから行を削除し、COMMITコマンドを使用してこれらの変更をデータベースに適用します。

DELETE FROM CUSTOMERS WHERE AGE = 25;
COMMIT;

上記のクエリを実行すると、次の出力が表示されます。

2 rows effected

上記のコマンドが正常に実行されたら、以下のコマンドを実行して顧客テーブルのレコードを確認します。

Select *from Customer;

上記のクエリを実行すると、次の出力が表示されます。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
| 1  |  Ramesh  |  32 | Ahmedabad |   2000   |
| 3  |  kaushik |  23 |   Kota    |   2000   |
| 5  |  Harish  |  27 |   Bhopal  |   8500   |
| 6  |  Kamesh  |  22 |    MP     |   4500   |
| 7  |  Murali  |  24 |   Indore  |   10000  |
+----+----------+-----+-----------+----------+

ロールバックの例

入力と同じ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することにより、ロールバック機能について説明するクエリの例を示します。

DELETE FROM CUSTOMERS WHERE AGE = 25;
ROLLBACK;

上記の2つのクエリが正常に実行された後、次のコマンドを使用してCustomerテーブルのレコードデータを表示できます。

Select* from Customer;

上記のコマンドを実行すると、次の出力が表示されます。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  1 |  Ramesh  |  32 | Ahmedabad |   2000   |
|  2 |  Karun   |  25 |   Delhi   |   1500   |
|  3 |  Kaushik |  23 |   Kota    |   2000   |
|  4 | Chaitanya|  25 |   Mumbai  |   6500   |
|  5 |  Harish  |  27 |   Bhopal  |   8500   |
|  6 |  Kamesh  |  22 |     MP    |   4500   |
|  7 |  Murali  |  24 |    Indore |   10000  |
+----+----------+-----+-----------+----------+

削除クエリは、年齢= 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つの異なるレコードを削除することを考えてみましょう。 各削除の前にセーブポイントを作成して、いつでも任意のセーブポイントにロールバックして、適切なデータを元の状態に戻すことができるようにします。

これが一連の操作です。

SAVEPOINT SP1;
DELETE FROM CUSTOMERS WHERE ID = 1;
SAVEPOINT SP2;
DELETE FROM CUSTOMERS WHERE ID = 2;
SAVEPOINT SP3;
DELETE FROM CUSTOMERS WHERE ID = 3;

これで、3つのセーブポイントを作成し、3つのレコードを削除しました。 この状況で、Id 2および3を持つレコードをロールバックする場合は、次のRollbackコマンドを使用します。

ROLLBACK TO SP2;

SP2にロールバックしてから最初の削除のみが行われたことに注意してください。 次のクエリを使用して、顧客のすべてのレコードを表示します。

Select * from Customer;

上記のクエリを実行すると、次の出力が表示されます。

+----+----------+-----+-----------+----------+
| ID |   NAME   | AGE |   ADDRESS |  SALARY  |
+----+----------+-----+-----------+----------+
|  2 |   Karun  |  25 |  Delhi    |   1500   |
|  3 |  Kaushik |  23 |  Kota     |   2000   |
|  4 | Chaitanya|  25 |  Mumbai   |   6500   |
|  5 |  Harish  |  27 |  Bhopal   |   8500   |
|  6 |  Kamesh  |  22 |  MP       |   4500   |
|  7 |  Murali  |  24 |  Indore   |  10000   |
+----+----------+-----+-----------+----------+

セーブポイントを解放

RELEASEコマンドを使用してセーブポイントを解放できます。 以下は一般的な構文です。

RELEASE SAVEPOINT SAVEPOINT_NAME;

HSQLDB-変更コマンド

テーブルまたはフィールドの名前、フィールドの順序、フィールドのデータ型、またはテーブル構造を変更する必要がある場合は、ALTERコマンドを使用して同じことを実現できます。

さまざまなシナリオを使用してALTERコマンドを説明する例を考えてみましょう。

次のクエリを使用して、フィールドの idname を含む testalter_tbl という名前のテーブルを作成します。

//below given query is to create a table testalter_tbl table.
create table testalter_tbl(id INT, name VARCHAR(10));

//below given query is to verify the table structure testalter_tbl.
Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

上記のクエリを実行すると、次の出力が表示されます。

+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM |  TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
|   PUBLIC   |TESTALTER_TBL|     ID     |     4     |   INTEGER |     4      |
|   PUBLIC   |TESTALTER_TBL|    NAME    |     12    |   VARCHAR |     10     |
+------------+-------------+------------+-----------+-----------+------------+

列のドロップまたは追加

HSQLDBテーブルから既存の列をDROPする場合は、DROP句をALTERコマンドと一緒に使用できます。

次のクエリを使用して、テーブルtestalter_tblから列( name )を削除します。

ALTER TABLE testalter_tbl DROP name;

上記のクエリが正常に実行されると、次のコマンドを使用して、名前フィールドがテーブルtestalter_tblから削除されたかどうかを知ることができます。

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

上記のコマンドを実行すると、次の出力が表示されます。

+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM |  TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
|  PUBLIC    |TESTALTER_TBL|      ID    |      4    |   INTEGER |     4      |
+------------+-------------+------------+-----------+-----------+------------+

HSQLDBテーブルに列を追加するときはいつでも、ALTERコマンドと共にADD句を使用できます。

次のクエリを使用して、 NAME という名前の列をテーブル testalter_tbl に追加します。

ALTER TABLE testalter_tbl ADD name VARCHAR(10);

上記のクエリが正常に実行されると、次のコマンドを使用して、名前フィールドがテーブル testalter_tbl に追加されているかどうかを知ることができます。

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

上記のクエリを実行すると、次の出力が表示されます。

+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM |  TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
|  PUBLIC    |TESTALTER_TBL|      ID    |     4     |   INTEGER |     4      |
|  PUBLIC    |TESTALTER_TBL|     NAME   |     12    |   VARCHAR |     10     |
+------------+-------------+------------+-----------+-----------+------------+

列の定義または名前の変更

列の定義を変更する必要がある場合は、 MODIFY または CHANGE 句を ALTER コマンドと一緒に使用してください。

CHANGE句の使用方法を説明する例を考えてみましょう。 テーブル testalter_tbl には、データ型intおよびvarcharを持つ2つのフィールド-idおよびname-が含まれています。 次に、idのデータ型をINTからBIGINTに変更してみましょう。 以下は、変更を加えるためのクエリです。

ALTER TABLE testalter_tbl CHANGE id id BIGINT;

上記のクエリが正常に実行された後、次のコマンドを使用してテーブル構造を検証できます。

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

上記のコマンドを実行すると、次の出力が表示されます。

+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM |  TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
|  PUBLIC    |TESTALTER_TBL|      ID    |     4     |   BIGINT  |     4      |
|  PUBLIC    |TESTALTER_TBL|     NAME   |     12    |   VARCHAR |     10     |
+------------+-------------+------------+-----------+-----------+------------+

次に、 testalter_tbl テーブルの列NAMEのサイズを10から20に増やしてみましょう。 以下は、MODIFY句とALTERコマンドを使用してこれを実現するためのクエリです。

ALTER TABLE testalter_tbl MODIFY name VARCHAR(20);

上記のクエリが正常に実行された後、次のコマンドを使用してテーブル構造を検証できます。

Select * From INFORMATION_SCHEMA.SYSTEM_COLUMNS as C Where C.TABLE_SCHEM =
   'PUBLIC' AND C.TABLE_NAME = 'TESTALTER_TBL';

上記のコマンドを実行すると、次の出力が表示されます。

+------------+-------------+------------+-----------+-----------+------------+
|TABLE_SCHEM |  TABLE_NAME | COLUMN_NAME| DATA_TYPE | TYPE_NAME | COLUMN_SIZE|
+------------+-------------+------------+-----------+-----------+------------+
|  PUBLIC    |TESTALTER_TBL|    ID      |      4    |    BIGINT |     4      |
|  PUBLIC    |TESTALTER_TBL|    NAME    |     12    |   VARCHAR |    20      |
+------------+-------------+------------+-----------+-----------+------------+

HSQLDB-インデックス

  • データベースインデックス*は、テーブル内の操作の速度を向上させるデータ構造です。 インデックスは1つ以上の列を使用して作成でき、迅速なランダム検索とレコードへのアクセスの効率的な順序付けの両方の基礎を提供します。

インデックスの作成中に、SQLクエリを作成するために使用される列を検討し、それらの列に1つ以上のインデックスを作成する必要があります。

実際には、インデックスもテーブルの一種であり、主キーまたはインデックスフィールドと各レコードへのポインタを実際のテーブルに保持します。

ユーザーはインデックスを見ることができません。 これらはクエリを高速化するために使用され、データベース検索エンジンがレコードをすばやく見つけるために使用されます。

INSERTステートメントとUPDATEステートメントは、インデックスを持つテーブルではより時間がかかりますが、SELECTステートメントはこれらのテーブルでより速く実行されます。 理由は、挿入または更新中に、データベースもインデックス値を挿入または更新する必要があるためです。

シンプルでユニークなインデックス

テーブルに一意のインデックスを作成できます。 *一意のインデックス*は、2つの行が同じインデックス値を持つことはできないことを意味します。 以下は、テーブルにインデックスを作成する構文です。

CREATE UNIQUE INDEX index_name
ON table_name (column1, column2,...);

1つ以上の列を使用して、インデックスを作成できます。 たとえば、tutorial_authorを使用して、tutorials_tblにインデックスを作成します。

CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author)

テーブルに単純なインデックスを作成できます。 単純なインデックスを作成するには、クエリからUNIQUEキーワードを省略します。 *単純なインデックス*は、テーブル内の重複値を許可します。

列の値を降順でインデックス付けする場合は、列名の後に予約語DESCを追加できます。

CREATE UNIQUE INDEX AUTHOR_INDEX
ON tutorials_tbl (tutorial_author 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 TABLE testalter_tbl ADD INDEX (c);

ALTERコマンドとともにDROP句を使用して、任意のINDEXを削除できます。 以下は、上記で作成したインデックスを削除するクエリです。

ALTER TABLE testalter_tbl DROP INDEX (c);

INDEX情報の表示

SHOW INDEXコマンドを使用して、テーブルに関連付けられているすべてのインデックスをリストできます。 縦書き形式の出力(\ Gで指定)は、長い行の折り返しを避けるために、このステートメントでしばしば役立ちます。

以下は、テーブルに関するインデックス情報を表示するための一般的な構文です。

SHOW INDEX FROM table_name\G