| 対象 | コマンド | 作用 |
|---|---|---|
| データベース | ATTACH DATABASE | 追加 |
| DETACH DATABASE | 分離 | |
| PRAGMA | 設定値の取得/設定 | |
| VACUUM | 不要領域の削除 | |
| テーブル (TABLE) |
CREATE TABLE | 作成 |
| DROP TABLE | 削除 | |
| ビュー | CREATE VIEW | 作成 |
| DROP VIEW | 削除 | |
| データ | INSERT | 追加 |
| SELECT | 取得 | |
| UPDATA | 変更 | |
| DELETE | 削除 | |
| REPLACE | 置換 | |
| インデックス (INDEX) |
CREATE INDEX | 作成 |
| DROP INDEX | 削除 | |
| REINDEX | 再作成 | |
| トランザクション (TRANSACTION) |
BEGIN | 開始 |
| END | 終了 | |
| COMMIT | コミット | |
| ROLLBACK | ロールバック | |
| トリガー | CREATE TRIGGER | 作成 |
| DROP TRIGGER | 削除 | |
| データ衝突 | ON CONFLICT | 動作設定 |
| SQLコマンド | EXPLAIN | 解析 |
| コード | 説明 |
|---|---|
-- |
コメント記号から行末までをコメントとします。(1行コメント) |
/* */ |
コメント開始記号と終了記号で囲まれた部分をコメントとします。 |
テーブルを作成します。
CREATE
[ TEMP | TEMPORARY ] -- テンポラリテーブルとして作成
TABLE TableName
( FieldName [ FieldType ] [ FieldConstraint ] [, ...] )
TEMPキーワード (TEMPORARYでも同義) を指定して作成したテーブルはテンポラリテーブルとなり、データベースへの接続を解除時に自動で削除されます。
作成するフィールドには、データ型とフィールド制約を指定できます。
フィールド名を指定する代わりに、既存のテーブルからフィールドを取得してテーブルを作成することもできます。
CREATE [ TEMP | TEMPORARY ] -- テンポラリテーブルとして作成 TABLE TableName AS SelectCommand -- セレクトコマンド
データを追加します。
INSERT [ OR ROLLBACK | ABORT | FAIL | IGNORE | REPLACE ] -- フィールド制約の違反時の処理 INTO [ DatabaseName. ] TableName [ ( FieldName [, ...] ) ] -- データを追加するフィールドの名前 VALUES ( FieldValue [, ...] ) -- フィールドの値
INSERT INTO table1 ( value1, text1 ) VALUES( 1, 'a' )
フィールド名を省略した場合には、VALUES以下にすべてのフィールドを指定する必要があります。
INSERT INTO table1 VALUES( 1, 2, 'a' )
| 値の種類 | |
|---|---|
| 数値 | そのまま記述 |
| 文字列 | シングルクォート ( ' )で囲んで記述 |
| NULL値 | 「NULL」と記述 |
ORキーワード以下には、フィールドの制約に違反したときの処理を指定することができます。キーワード省略時はABORTの処理となり、INSERTコマンドの処理が中断されます。その他の処理についてはON CONFLICTの項目で説明しています。
INSERT OR IGNORE INTO table1 VALUES( 'test' )
データを取得します。SQLの基礎「SELECT」文を覚えよう - @IT
SELECT [ ALL | DISTINCT ] -- 重複の除外 FieldName [, ...] -- 取得するフィールド [ FROM TableName [, ...] ] -- 対象とするテーブル [ WHERE FilterCondition ] -- 検索条件 [ GROUP BY FieldName [, ...] ] -- グループ化 [ HAVING FilterCondition ] -- グループの検索条件 [ ORDER BY FieldName [ ASC | DESC ] [, ...] ] -- 並べ替え [ LIMIT Number [ OFFSET Number ] ] -- 取得位置
WHERE句で抽出条件の指定を行います。
DISTINCTキーワードを指定すると、重複する行が結果に含まれないようになります。重複と認められるのは、取得されるフィールドすべてが一致した場合です。
なおALLキーワードは重複した行も取得することを意味し、これはキーワード省略時の既定の動作です。よってこれを明示的に指定することはないでしょう。
例えば次のようなNULLを含むフィールドを、ORDER BYで並べ替えるとします。
| field1 | |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | (NULL) |
昇順、降順の指定を変えて結果を比較します。
| No. | 順番 | コード | 結果 |
|---|---|---|---|
| 1 | 降順 | SELECT * FROM table1 ORDER BY field1 DESC |
2, 1, (NULL) |
| 2 | 昇順 | SELECT * FROM table1 ORDER BY field1 ASC |
(NULL), 1, 2 |
| 3 | 昇順 | SELECT * FROM table1 ORDER BY field1 IS NULL, field1 ASC |
1, 2, (NULL) |
No.1の結果からわかるように、既定ではNULLは最も小さな要素とみなされて並べ替えられます。よってこれを昇順で並べると、No.2のようにNULLが最初になり
もし昇順でもNULLを最後に配置したいと考えるならば、IS演算子を併用しNo.3のように記述します。
データを変更します。
UPDATE [ OR ROLLBACK | ABORT | FAIL | IGNORE | REPLACE ] -- フィールド制約の違反時の処理 [ DatabaseName. ] TableName SET FieldName = FieldValue [, ...] -- 変更するフィールド名と値 [ WHERE FilterCondition ] -- 変更対象のデータ抽出条件
WHEREで変更対象のデータを指定しないと、すべてのデータが変更されます。
複数のフィールドを同時に変更するには、フィールド名と値の組をカンマで区切って並べます。
UPDATE table1 SET field1 = 1, field2 = 'test' WHERE index = 1
データを削除します。
DELETE
FROM [ DatabaseName. ]
TableName
[ WHERE FilterCondition ] -- 削除対象のデータ抽出条件
データを大量に削除したときには、VACUUMコマンドで不要となった領域を削除するのが好ましいです。
インデックスを作成します。
CREATE [ UNIQUE ] INDEX [ DatabaseName. ] IndexName ON TableName ( FieldName [, ...] )
CREATE INDEX index1 ON table1( field1, field2 )
なおインデックスとは、データを高速に検索するために作られる補助的なデータ構造です。
インデックスの作り過ぎに注意 - 特集:基礎から理解するデータベースのしくみ:ITpro