SQLコマンド解説

対象 コマンド 作用
データベース 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 解析
SQL As Understood By SQLite

CREATE TABLE

テーブルを作成します。

CREATE
  [ TEMP | TEMPORARY ]  -- テンポラリテーブルとして作成
  TABLE TableName
  ( FieldName [ FieldType ] [ FieldConstraint ] [, ...] )
※ [ ]で囲まれた項目は省略可能です。また[, ...]はカンマ区切りで、複数の項目を指定可能です。

TEMPキーワード (TEMPORARYでも同義) を指定して作成したテーブルはテンポラリテーブルとなり、データベースへの接続を解除時に自動で削除されます。

作成するフィールドには、データ型フィールド制約を指定できます。

既存のテーブルから作成

フィールド名を指定する代わりに、既存のテーブルからフィールドを取得してテーブルを作成することもできます。

CREATE
  [ TEMP | TEMPORARY ]  -- テンポラリテーブルとして作成
  TABLE TableName
  AS SelectCommand      -- セレクトコマンド

sqlite_masterテーブル

SQLiteのデータベースには「sqlite_master」と呼ばれるテーブルが必ず存在し、データベース内に定義されたテーブルの情報を参照できます。(7) How do I list all tables/indices contained in an SQLite database - SQLite Frequently Asked Questions

C:\>sqlite test.sqlite
SQLite version 2.8.17
Enter ".help" for instructions

sqlite> create table user(id,name);
sqlite> .mode line

sqlite> select * from sqlite_master;
    type = table
    name = user
tbl_name = user
rootpage = 3
     sql = create table user(id,name)
テーブルスキーマ (構造) の確認 - テーブルの作成 - SQLite入門

INSERT

データを追加します。

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' )

SELECT

データを取得します。SQLの基礎「SELECT」文を覚えよう - @IT 篠原光太郎 (2000/06/21)

SELECT
  [ ALL | DISTINCT ]               -- 重複の除外
  FieldName [, ...]                -- 取得するフィールド
  [ FROM TableName [, ...] ]       -- 対象とするテーブル
  [ WHERE FilterCondition ]        -- 検索条件
  [ GROUP BY FieldName [, ...] ]   -- グループ化
  [ HAVING FilterCondition ]       -- グループの検索条件
  [ ORDER BY FieldName[ ASC | DESC ] [, ...] ] -- 並べ替え
  [ LIMIT Number [ OFFSET Number ] ]           -- 取得位置
※ [ ]で囲まれた項目は省略可能です。また[, ...]はカンマ区切りで、複数の項目を指定可能です。

WHERE句で抽出条件の指定を行います。またcount()で、条件に一致したデータの件数を取得できます。

重複の除外

DISTINCTキーワードを指定すると、重複する行が結果に含まれないようになります。重複と認められるのは、取得されるフィールドすべてが一致した場合です。

なおALLキーワードは重複した行も取得することを意味し、これはキーワード省略時の既定の動作です。よってこれを明示的に指定することはないでしょう。

昇順による並べ替えでNULLを末尾に配置

たとえば次のようなNULLを含むフィールドを、ORDER BYで並べ替えるとします。

table1
  field1
1 1
2 2
3 (NULL)

これの昇順、降順の指定を変えて結果を比較します。

昇順、降順による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)

(1) の結果からわかるように、既定ではNULLは最も小さな要素とみなされて並べ替えられます。よってこれを昇順で並べると、(2) のようにNULLが最初になります。

もし昇順でもNULLを最後に配置するならば、IS演算子を併用し (3) のように記述します。

UPDATE

データを変更します。

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

データを削除します。

DELETE
  FROM [ DatabaseName. ]
  TableName
  [ WHERE FilterCondition ]  -- 削除対象のデータ抽出条件

WHEREで削除対象のデータを指定しないと、すべてのデータが削除されます。

データを大量に削除したときには、VACUUMコマンドで不要となった領域を削除すべきです。

CREATE INDEX

インデックスを作成します。

CREATE
  [ UNIQUE ] INDEX
  [ DatabaseName. ]
  IndexName
  ON TableName
  ( FieldName [, ...] )
※ [ ]で囲まれた項目は省略可能です。また[, ...]はカンマ区切りで、複数の項目を指定可能です。
CREATE INDEX index1 ON table1( field1, field2 )

なおインデックスとは、データを高速に検索するために作られる補助的なデータ構造です。インデックスの作り過ぎに注意 - 特集:基礎から理解するデータベースのしくみ:ITpro (2006/01/23)

コメント

コード 説明
-- コメント記号から行末までをコメントとします。(1行コメント)
/* */ コメント開始記号と終了記号で囲まれた部分をコメントとします。