SQLite-INDEXEDBY句

「INDEXEDBYindex-name」句は、前のテーブルの値を検索するために名前付きインデックスを使用する必要があることを指定します。

index-nameが存在しないか、クエリに使用できない場合、SQLiteステートメントの準備は失敗します。

「NOTINDEXED」句は、UNIQUEおよびPRIMARY KEY制約によって作成された暗黙のインデックスを含め、前のテーブルにアクセスするときにインデックスを使用しないことを指定します。

ただし、「NOT INDEXED」が指定されている場合でも、INTEGER PRIMARYKEYを使用してエントリを検索できます。

構文

以下は、INDEXED BY句の構文であり、DELETE、UPDATE、またはSELECTステートメントで使用できます。

SELECT|DELETE|UPDATE column1, column2...
INDEXED BY (index_name)
table_name
WHERE (CONDITION);

テーブルCOMPANYについて考えてみます。インデックスを作成し、それを使用してINDEXEDBY操作を実行します。

sqlite> CREATE INDEX salary_index ON COMPANY(salary);
sqlite>

ここで、テーブルCOMPANYからデータを選択すると、次のようにINDEXEDBY句を使用できます。

sqlite> SELECT * FROM COMPANY INDEXED BY salary_index WHERE salary > 5000;

これにより、次の結果が得られます。

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
7           James       24          Houston     10000.0
2           Allen       25          Texas       15000.0
1           Paul        32          California  20000.0
3           Teddy       23          Norway      20000.0
6           Kim         22          South-Hall  45000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0