SQLite - 出力のソート(ORDER BY)
指定したカラムを昇順(ASC,省略可)または降順(DESC)でソートして出力する。
sqlite> select * from AAA; tt rr ---------- ---------- aaa 8.0 bbb 7.0 ccc 6.0 ddd 5.0 aaa 4.0 bbb 3.0 ccc 2.0 ddd 1.0 sqlite> select * from AAA order by tt asc, rr desc; tt rr ---------- ---------- aaa 8.0 aaa 4.0 bbb 7.0 bbb 3.0 ccc 6.0 ccc 2.0 ddd 5.0 ddd 1.0 sqlite> select * from AAA order by rr, tt desc; tt rr ---------- ---------- ddd 1.0 ccc 2.0 bbb 3.0 aaa 4.0 ddd 5.0 ccc 6.0 bbb 7.0 aaa 8.0
SQLite - カラム方向の結合(JOIN)
2つのテーブルの指定したカラムで結合することで2つのテーブルをカラム方向に広げたひとつのテーブルとして扱う
sqlite> select * from AAA; tt ii ---------- ---------- aaa 1 bbb 2 ccc 3 ddd 4 sqlite> select * from BBB; ii rr ---------- ---------- 1 1.0 2 2.0 3 3.0 5 5.0
INNNER JOINまたはOUTER JOINにより、tt, ii, rrというカラムを持つひとつのテーブルに結合される。
内部結合(INNER JOIN)
SQLite - 集計関数
sqlite> select * from AAA; ii tt rr ---------- ---------- ---------- 1 aaa 1.0 2 bbb 2.0 3 ccc 3.0 ddd 4.0 5 eee
SUMとTOTAL
SQLite - WHERE句
sqlite> select * from AAA; ii tt ---------- ---------- 1 aaa bbb 3 ccc 4 5 ddd 6 eee fff 8 9 ggg
一致、比較、否定
SQLite - ビューとインデックス
sqlite> create table AAA(ii integer, tt text, rr real); sqlite> insert into AAA values(1, 'aaa', 0.8), ...> (2, 'aaa', 0.7), ...> (3, 'bbb', 0.6), ...> (4, 'bbb', 0.5), ...> (5, 'ccc', 0.4), ...> (6, 'ccc', 0.3), ...> (7, 'ddd', 0.2), ...> (8, 'ddd', 0.1); sqlite> select * from AAA; ii tt rr ---------- ---------- ---------- 1 aaa 0.8 2 aaa 0.7 3 bbb 0.6 4 bbb 0.5 5 ccc 0.4 6 ccc 0.3 7 ddd 0.2 8 ddd 0.1
VIEW
SQLite - ROWIDとカラム制約事項
ROWID
特に指定しなくても、レコードをユニークに決定するROWIDというinteger型のカラムが内部的に付加される。
sqlite> create table AAA(ii integer, tt text); sqlite> insert into AAA values(10, 'aaa'),(20, 'bbb'); sqlite> select rowid,* from AAA; rowid ii tt ---------- ---------- ---------- 1 10 aaa 2 20 bbb
PRIMARY KEY
主キーを指定する。
create table テーブル名( カラム1名 カラム1型名 primary key, ……); create table テーブル名( カラム1名 カラム1型名, ……, primary key(カラム名, …… ));
ひとつのカラムを主キーにする場合はどちらの書き方でも良いが、二つ以上のカラムを主キーにする場合は後者の書き方とする。
主キーの値(複数カラムの場合は値の組み合わせ)が同じレコードを追加することはできない。
注意点として、主キーをNULLにしたレコードは複数追加することが可能。ただし後でNULLを変更した場合に、既に存在する主キーを一致する場合はエラーになる。
sqlite> create table AAA(ii integer, tt text, primary key(ii, tt) ); sqlite> insert into AAA values(10, 'aaa'); sqlite> insert into AAA values(null, 'aaa'); sqlite> insert into AAA values(null, 'aaa'); sqlite> insert into AAA values(40, 'bbb'); sqlite> select rowid,* from AAA; rowid ii tt ---------- ---------- ---------- 1 10 aaa 2 aaa 3 aaa 4 40 bbb sqlite> update AAA set ii=10 where rowid=2; Error: UNIQUE constraint failed: AAA.ii, AAA.tt sqlite> insert into AAA values(20, 'aaa'); sqlite> insert into AAA values(10, 'aaa'); Error: UNIQUE constraint failed: AAA.ii, AAA.tt