# SQL記述形式
ここでは、SQLインターフェースで使用できるSQLの記述形式について示します。
# 使用できる操作
SELECT文の他、CREATE TABLE等のDDL(Data Definition Language、データ定義言語)やINSERT/DELETE文などをサポートしています。詳細はGridDBでサポートされるSQL文を参照して下さい。
# データ型
# データ格納に使用する型
SQLインターフェースでデータの格納に使用する型は次の通りです。この型名はテーブル作成時にカラム型として記述できます。
データ型 | 内容詳細 |
---|---|
BOOL型 | true/false |
BYTE型 | -27から27-1 (8ビット)の整数値 |
SHORT型 | -215から215-1 (16ビット)の整数値 |
INTEGER型 | -231から231-1 (32ビット)の整数値 |
LONG型 | -263から263-1 (64ビット)の整数値 |
FLOAT型 | 単精度型(32ビット) IEEE754で定められた浮動小数点数 |
DOUBLE型 | 倍精度型(64ビット) IEEE754で定められた浮動小数点数 |
TIMESTAMP型 | 日付と時刻の組 |
STRING型 | Unicodeコードポイントを文字とする、任意個数の文字の列 |
BLOB型 | 画像や音声などのバイナリデータのためのデータ型 入力したままの形式で保存されるラージオブジェクト 文字xあるいはXをつけて、X'23AB'のような16進表現もできる |
また、テーブルにNULL値を格納することができます。NULL値に対して“IS NULL”などの演算子を使用すると、SQL仕様に沿った結果を返却します。
# テーブル作成時にカラム型として記述可能な表現
SQLインターフェースでは、テーブル作成時にカラム型として記述された型名について、データ格納に使用する型で列挙した型名と一致しなくても、ルールに従って解釈しデータの格納に使用する型を決定します。
以下のルールを上から順にチェックし、合致したルールによってデータ格納に使用する型を決定します。 ルールのチェック時には記述した型名およびルールでチェックする文字列の大文字小文字は区別しません。 複数のルールに合致した場合はより上にあるルールが優先されます。 どのルールにも当てはまらない場合はエラーとなりテーブル作成に失敗します。
ルールNo. | テーブル作成時にカラム型として記述した識別子 | 作成するテーブルのカラム型 |
---|---|---|
1 | データ格納に使用する型に列挙した型名 | テーブル作成時に指定された型に従う |
2 | REAL | DOUBLE型 |
3 | TINYINT | BYTE型 |
4 | SMALLINT | SHORT型 |
5 | BIGINT | LONG型 |
6 | INTを含む型名 | INTEGER型 |
7 | CHAR, CLOB, TEXTのいずれかを含む型名 | STRING型 |
8 | BLOBを含む型名 | BLOB型 |
9 | REAL, DOUBのいずれかを含む型名 | DOUBLE型 |
10 | FLOAを含む型名 | FLOAT型 |
上記ルールによるデータ型決定の例を示します。
- 記述した型名が"BIGINTEGER"→INTEGER型(ルール6)
- 記述した型名が"LONG"→LONG型(ルール1)
- 記述した型名が"TINYINT"→BYTE型(ルール3)
- 記述した型名が"FLOAT"→FLOAT型(ルール1)
- 記述した型名が"VARCHAR"→STRING型(ルール7)
- 記述した型名が"CHARINT"→INTEGER型(ルール6)
- 記述した型名が"BIGBLOB"→BLOB型(ルール8)
- 記述した型名が"FLOATDOUB"→DOUBLE型(ルール9)
- 記述した型名が"INTREAL"→INTEGER型(ルール6)
- 記述した型名が"FLOATINGPOINT"→INTEGER型(ルール6)
- 記述した型名が"DECIMAL"→エラー
NoSQLインターフェースのクライアントにおけるデータ型と同等の型をSQLインターフェイスで使用する場合は、以下のように記述してください。ただし、一部同等の型が存在せず、使用できないものがあります。
NoSQLインターフェースのデータ型 | 同等の型となるSQLインターフェースのカラム型記述 |
---|---|
STRING(文字列型) | STRING または STRING型となる表現 |
BOOL(ブール型) | BOOL |
BYTE(8ビット整数型) | BYTE または BYTE型となる表現 |
SHORT(16ビット整数型) | SHORT または SHORT型となる表現 |
INTEGER(32ビット整数型) | INTEGER または INTEGER型となる表現 |
LONG(64ビット整数型) | LONG または LONG型となる表現 |
FLOAT(32ビット単精度浮動小数点数型) | FLOAT または FLOAT型となる表現 |
DOUBLE(64ビット倍精度浮動小数点数型) | DOUBLE または DOUBLE型となる表現 |
TIMESTAMP(時刻型) | TIMESTAMP |
GEOMETRY(空間型) | テーブル作成時のカラム型には指定できません |
BLOB型 | BLOB または BLOB型となる表現 |
配列型 | テーブル作成時のカラム型には指定できません |
# コンテナをテーブルとしてアクセスするときのデータ型と値の扱い
NoSQLインターフェースのクライアントで作成したコンテナを、SQLインターフェースでアクセスする場合のコンテナのカラム型および値の扱いを以下に示します。
コンテナのカラム型 | SQLにマッピングされるデータ型 | 値 |
---|---|---|
STRING型 | STRING型 | 元の値と同一 |
BOOL型 | BOOL型 | 元の値と同一 |
BYTE型 | BYTE型 | 元の値と同一 |
SHORT型 | SHORT型 | 元の値と同一 |
INTEGER型 | INTEGER型 | 元の値と同一 |
LONG型 | LONG型 | 元の値と同一 |
FLOAT型 | FLOAT型 | 元の値と同一 |
DOUBLE型 | DOUBLE型 | 元の値と同一 |
TIMESTAMP型 | TIMESTAMP型 | 元の値と同一 |
GEOMETRY型 | NULL定数と同等の型(Types.UNKNOWN) | 全ての値がNULL |
BLOB型 | BLOB型 | 元の値と同一 |
配列型 | NULL定数と同等の型(Types.UNKNOWN) | 全ての値がNULL |
# SQLでサポートしていないデータ型の扱い
NoSQLインタフェースでサポートしているが、SQLインタフェースではサポートしていないデータ型は次の通りです。
- GEOMETRY型
- 配列型
これらのデータ型のデータに対して、SQLインタフェースでアクセスした場合の扱いについて説明します。
テーブル作成 CREATE TABLE
- テーブル作成時のカラムのデータ型として、これらのデータ型は指定できません。エラーになります。
テーブル削除 DROP TABLE
- 削除対象テーブルがこれらのデータ型のカラムを持っていても、テーブル削除はできます。
登録/更新/削除 INSERT/UPDATE/DELETE
これらのデータ型のカラムを持つテーブルに対しては、INSERT/UPDATE/DELETEはエラーになります。
これらのデータ型のカラムの値は指定せずに、サポート範囲のデータ型のカラムの値だけ指定しても、ロウを登録・更新することはできません。
// NoSQLインタフェースを用いて作成したテーブル 名前 : sample1 カラム: id INTEGER型 value DOUBLE型 geometry GEOMETRY型 // INTEGER型とDOUBLE型のカラムのみ指定してロウの登録 →テーブルにGEOMETRY型のカラムがあるので、エラーが発生する INSERT INTO sample1 (id, value) VALUES (1, 192.3)
検索 SELECT
- これらのデータ型のカラムを持つテーブルを検索すると、そのカラムの値は常にNULLが返ります。
索引作成/削除 CREATE INDEX/DROP INDEX
- GEOMETRY型カラムへの索引作成・削除は可能です。
- 配列型カラムへの索引作成・削除はできません。エラーになります。(NoSQLインタフェースでも、配列型カラムへの索引作成・削除は未サポートです)
# ユーザとデータベース
GridDBのユーザには、管理ユーザと一般ユーザの2種類があり、利用できる機能に違いがあります。 また、データベースを作成することで、利用ユーザ単位にアクセスを分離することができます。 ユーザ、データベースの詳細は『GridDB 機能リファレンス』を参照ください。
# ネーミングの規則
ネーミングの規則は次の通りです。
- データベース名・テーブル名・ビュー名・列名・索引名および一般ユーザ名は、1文字以上のASCII英数字ならびにアンダースコア「_」、ハイフン「-」、ドット「.」、スラッシュ「/」、イコール「=」の列で構成されます。
- テーブル名にはノードアフィニティ機能向けに「@」の文字も指定できます。
ノードアフィニティ機能、ネーミングの規則・制限についての詳細は、『GridDB 機能リファレンス』を参照ください。
# メモ
- 名前にASCII英数字とアンダースコア以外の文字を含む、または、先頭文字が数字のテーブルやカラムなどをSQL文に記述する場合は、引用符"で囲んでください。
SELECT "column.a1" FROM "Table-5"
← はじめに サポートされるSQL文 →