コンテンツにスキップ

SQLite note6 DML1

insert

insert into table01 ( column01, column02 ) values ('value01', 'value12');
insert into table01 ( id, column01, column02 ) values ( null, 'value02', 'value12');
insert into table01 ( id, column01, column02 ) values ( null, 'value03', 'contain'' commna');
insert into table01 ( id, column01, column02 ) values ( null, 'value04', '改行
                                                                          する');

like

_  任意の位置文字
%  0字以上の文字
大文字と小文字を区別しない。
エスケープ文字を指定して検索ができる。
select * from users where name like '%@%' escape '@';

limit

(上位3件を表示)
select * from users order by score desc limit 3;

(上位2件を飛ばして、上から3件を表示。)
select * from users order by score desc limit 3 offset 2;
select * from users order by score desc limit 2, 3;

組み込み関数

集計

select
    count(id)
   ,max(score)
   ,min(score)
   ,avg(score)
from
    users;

文字列操作

select
    name
   ,length(name)
   ,upper(name)
   ,substr(name, 2, 3)
from
    users;

直近で挿入されたレコードのrowid

select last_insert_rowid();

ランダムに1つ抽出

select * from users order by random() limit 1;

case

select
    id
   ,score
   ,case
      when score > 70 then 'A'
      when score > 50 then 'B'
      else 'C'
    end as rank
from
    users
;

transaction

begin transaction;
update users set score = score + 10 where score > 10;
delete from users where score >= 100;
commit;

rollback

begin transaction;
update users set score = 0;
rollback;

日付

select
 datetime('now')              as "タイムゾーンを考慮しない"
,datetime('now', '+09:00:00') as "日本時間"
,date()
,time()
,date('2015-07-17', '+3 months', 'start of month', '-1 day') --2か月後の末日
;