「Sqlite」の版間の差分

提供:GizmoLabs - だいたい CAD LISP なサイト
(ページの作成:「sqlite のメモ データベース : データが入ったもの テーブル : ユーザテーブル、レッスンテーブルetc === フィールド/カラム:列...」)
 
編集の要約なし
1行目: 1行目:
sqlite のメモ
sqlite のメモ


データベース : データが入ったもの
* データベース : データが入ったもの
テーブル : ユーザテーブル、レッスンテーブルetc
* テーブル : ユーザテーブル、レッスンテーブルetc
===
* フィールド/カラム:列
フィールド/カラム:列
* レコード:行
レコード:行
===




13行目: 11行目:


・データベースの作成、接続
・データベースの作成、接続
sqlite3  
sqlite3  
sqlite3 dbname.拡張子 で入る(無ければ作られる)
sqlite3 dbname.拡張子 で入る(無ければ作られる)
ex.
ex.
sqlite3 mysample.sqlite3
sqlite3 mysample.sqlite3




・ヘルプの表示: .help
・ヘルプの表示:  
.help


・SQLiteの終了: .exit
・SQLiteの終了:  
.exit


・データベースの削除:ファイルを消せばOK
・データベースの削除:
ファイルを消せばOK


テーブルを作る
テーブルを作る
* セミコロンまでが1命令
* セミコロンまでが1命令
ex.
ex.
create table users (name);
create table users (name);
create table users (name, email);
create table users (name, email);


テーブルの構造を見る
テーブルの構造を見る
.schema users;
.schema users;


テーブル削除
テーブル削除
drop tabele users;
drop tabele users;


テーブル名変更
テーブル名変更
alter table users rename to dtusers;
alter table users rename to dtusers;


カラムの変更
カラムの変更
alter table dtuser add colum pwd;
alter table dtuser add colum pwd;




データ型の種類
データ型の種類
NULL
* NULL
INTEGER
* INTEGER
REAL
* REAL
TEXT
* TEXT
BLOB(BINALY LARGE OBJECT)
* BLOB(BINALY LARGE OBJECT)


* データ型は指定可能だが必須でない
* データ型は指定可能だが必須でない
ex.
ex.
create table users (name text, email text);
create table users (name text, email text);


* データ型は指定するとそれになるように努力するが確約はされない
* データ型は指定するとそれになるように努力するが確約はされない
63行目: 64行目:
IDを自動連番に
IDを自動連番に
ex.
ex.
create table users (id integer primmary key autoincrement);
create table users (id integer primmary key autoincrement);


名前の空を禁止
名前の空を禁止
create table users (id integer primmary key autoincrement, name text not null);
create table users (id integer primmary key autoincrement, name text not null);


emailをユニークに
emailをユニークに
create table users (id integer primmary key autoincrement, name text not null, email text unique);
create table users (id integer primmary key autoincrement, name text not null, email text unique);


age のデフォルト値を20に
age のデフォルト値を20に
ex
ex
create table users (id integer primmary key autoincrement, name text not null, email text unique, age integer default 20);
create table users (id integer primmary key autoincrement, name text not null, email text unique, age integer default 20);




値チェック
値チェック
create table lessons (title, count_lessons check(count_lesons>0));
create table lessons (title, count_lessons check(count_lesons>0));


インデックスの作成
インデックスの作成
ex. ege にインデックスを付ける
ex. ege にインデックスを付ける
create index age on users (age);
create index age on users (age);


-------------------------------------------------------------------------------  
-------------------------------------------------------------------------------  
88行目: 89行目:
ex.
ex.
* 文字はシングルクォーテーションで囲む
* 文字はシングルクォーテーションで囲む
insert into users (name, email, age) values ('taguche', 'a@a.com', 20);
insert into users (name, email, age) values ('taguche', 'a@a.com', 20);


* 文字中にあるシングルクォーテーションは '' 2個続けて表現する
* 文字中にあるシングルクォーテーションは '' 2個続けて表現する
insert into users (name, email, age) values ('it''s a pen', 'a@a.com', 20);
insert into users (name, email, age) values ('it''s a pen', 'a@a.com', 20);


データの抽出
データの抽出
ex. usersテーブルを全部見る
ex. usersテーブルを全部見る
select * from users;
select * from users;


scoreの昇順で抽出
scoreの昇順で抽出
select * from users order by score;
select * from users order by score;


scoreの降順で抽出
scoreの降順で抽出
select * from users order by score desc;
select * from users order by score desc;


scoreの降順の上位3つ
scoreの降順の上位3つ
select * from users order by score desc limit 3;
select * from users order by score desc limit 3;


score が 200以上
score が 200以上
select * from users where score >= 200;
select * from users where score >= 200;


taguchi で抽出
taguchi で抽出
select * from users where name = 'taguchi';
select * from users where name = 'taguchi';


taguchi 以外で抽出
taguchi 以外で抽出
select * from users where name <> 'taguchi';
select * from users where name <> 'taguchi';


tagで始まる名前で抽出
tagで始まる名前で抽出
select * from users where name like 'tag*';
select * from users where name like 'tag*';




組み込み関数(core function)を使う
組み込み関数(core function)を使う
件数の取得
件数の取得
select count(*) from users;
select count(*) from users;


score の最大値レコード
score の最大値レコード
select max(score) from users;
select max(score) from users;


score の最小値レコード
score の最小値レコード
select min(score) from users;
select min(score) from users;


ランダム(数値)
ランダム(数値)
select random();
select random();


ランダムに一個レコード
ランダムに一個レコード
select * from users order by random() limit 1;
select * from users order by random() limit 1;


name を抽出して値の文字数を出す
name を抽出して値の文字数を出す
select name, length(name) from users;
select name, length(name) from users;


型を取得する
型を取得する
select name, typeof(name) from users;
select name, typeof(name) from users;


データを集計する
データを集計する
name score team text
name score team text
ユニークな値を週出
ユニークな値を週出
select distinct team from users;
select distinct team from users;


チーム毎のスコア合計
チーム毎のスコア合計
select team , sum(score) from users group by team;
select team , sum(score) from users group by team;


日付・時刻(date time function)
日付・時刻(date time function)
select current_time;
select current_time;
select current_date;
select current_date;
select current_timestamp;
select current_timestamp;
select insert into users (name, created) value ('taguche', current_timestamp);
select insert into users (name, created) value ('taguche', current_timestamp);


時間をフォーマット変えて表示
時間をフォーマット変えて表示
select strftime('%Y年', current_timestamp);
select strftime('%Y年', current_timestamp);
2012年
2012年


-----------------------------
-----------------------------
データの更新
データの更新
ex. taguche 君を new taguche に
ex. taguche 君を new taguche に
update users set name = 'new taguche' where name = 'taguche';
update users set name = 'new taguche' where name = 'taguche';


ex. new taguche 君を taguche にして、 score を 500 に
ex. new taguche 君を taguche にして、 score を 500 に
update users set name = 'taguche', score = 500 where name = 'new taguche';
update users set name = 'taguche', score = 500 where name = 'new taguche';


-----------------------------
-----------------------------
データ削除
データ削除
users 全削除
users 全削除
delete from users;
delete from users;


100 以下のものを削除
100 以下のものを削除
delete from users where score <=100;
delete from users where score <=100;


内部のID付きで表示
内部のID付きで表示
select ROWID, * from users;
select ROWID, * from users;


ROWIDが4のレコードを削除
ROWIDが4のレコードを削除
delete from users where ROWID = 4;
delete from users where ROWID = 4;


複数テーブルからの抽出
複数テーブルからの抽出
ex. users テーブル (id integer primary key autoincrement, name, team)
ex.  
    games テーブル(user_id, score)
users テーブル (id integer primary key autoincrement, name, team)
games テーブル(user_id, score)


上のものから合計を出してみる
上のものから合計を出してみる
usersテーブルの id name team フィールドを選択スコアを合計する。
users テーブルの id name team フィールドを選択スコアを合計する。
game テーブルで game.user_id を users.id = game.user_id で関連付けて id 毎に抽出
game テーブルで game.user_id を users.id = game.user_id で関連付けて id 毎に抽出


select id, name, team, sum(score) from users, games where users.id = game.user_id group by users.id
select id, name, team, sum(score) from users, games where users.id = game.user_id group by users.id


重複があったらテーブル名を明示する
重複があったらテーブル名を明示する
select users.id  
select users.id  


外部ファイルからのデータ取り込み
外部ファイルからのデータ取り込み
.show
.show
.sepalator , 区切りを , に
.sepalator , 区切りを , に


.import users.txt users
.import users.txt users
.header on <<< カラム名を表示する
.header on <<< カラム名を表示する


--------------------------
--------------------------
バックアップ
バックアップ
.dump 全テーブル
.dump 全テーブル
.dump users users テーブル
.dump users users テーブル
.output users.dump ファイル名を設定。
.output users.dump ファイル名を設定。
.show で確認
.show で確認
.read users.dump ダンプを読み込む
.read users.dump ダンプを読み込む

2018年6月19日 (火) 10:08時点における版

sqlite のメモ

  • データベース : データが入ったもの
  • テーブル : ユーザテーブル、レッスンテーブルetc
  • フィールド/カラム:列
  • レコード:行



コマンドラインでの

・データベースの作成、接続

sqlite3 
sqlite3 dbname.拡張子 で入る(無ければ作られる)
ex.
sqlite3 mysample.sqlite3


・ヘルプの表示:

.help

・SQLiteの終了:

.exit

・データベースの削除:

ファイルを消せばOK

テーブルを作る

  • セミコロンまでが1命令

ex.

create table users (name);
create table users (name, email);

テーブルの構造を見る

.schema users;

テーブル削除

drop tabele users;

テーブル名変更

alter table users rename to dtusers;

カラムの変更

alter table dtuser add colum pwd;


データ型の種類

  • NULL
  • INTEGER
  • REAL
  • TEXT
  • BLOB(BINALY LARGE OBJECT)
  • データ型は指定可能だが必須でない

ex.

create table users (name text, email text);
  • データ型は指定するとそれになるように努力するが確約はされない
 (つまり別の型が入る可能性もある)

テーブルの操作関連


テーブル作成時のオプション例 IDを自動連番に ex.

create table users (id integer primmary key autoincrement);

名前の空を禁止

create table users (id integer primmary key autoincrement, name text not null);

emailをユニークに

create table users (id integer primmary key autoincrement, name text not null, email text unique);

age のデフォルト値を20に ex

create table users (id integer primmary key autoincrement, name text not null, email text unique, age integer default 20);


値チェック

create table lessons (title, count_lessons check(count_lesons>0));

インデックスの作成 ex. ege にインデックスを付ける

create index age on users (age);

データの挿入 ex.

  • 文字はシングルクォーテーションで囲む
insert into users (name, email, age) values ('taguche', 'a@a.com', 20);
  • 文字中にあるシングルクォーテーションは 2個続けて表現する
insert into users (name, email, age) values ('its a pen', 'a@a.com', 20);

データの抽出 ex. usersテーブルを全部見る

select * from users;

scoreの昇順で抽出

select * from users order by score;

scoreの降順で抽出

select * from users order by score desc;

scoreの降順の上位3つ

select * from users order by score desc limit 3;

score が 200以上

select * from users where score >= 200;

taguchi で抽出

select * from users where name = 'taguchi';

taguchi 以外で抽出

select * from users where name <> 'taguchi';

tagで始まる名前で抽出

select * from users where name like 'tag*';


組み込み関数(core function)を使う 件数の取得

select count(*) from users;

score の最大値レコード

select max(score) from users;

score の最小値レコード

select min(score) from users;

ランダム(数値)

select random();

ランダムに一個レコード

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

name を抽出して値の文字数を出す

select name, length(name) from users;

型を取得する

select name, typeof(name) from users;

データを集計する

name score team text

ユニークな値を週出

select distinct team from users;

チーム毎のスコア合計

select team , sum(score) from users group by team;

日付・時刻(date time function)

select current_time;
select current_date;
select current_timestamp;
select insert into users (name, created) value ('taguche', current_timestamp);

時間をフォーマット変えて表示

select strftime('%Y年', current_timestamp);
2012年

データの更新 ex. taguche 君を new taguche に

update users set name = 'new taguche' where name = 'taguche';

ex. new taguche 君を taguche にして、 score を 500 に

update users set name = 'taguche', score = 500 where name = 'new taguche';

データ削除

users 全削除
delete from users;

100 以下のものを削除

delete from users where score <=100;

内部のID付きで表示

select ROWID, * from users;

ROWIDが4のレコードを削除

delete from users where ROWID = 4;

複数テーブルからの抽出 ex.

users テーブル (id integer primary key autoincrement, name, team)
games テーブル(user_id, score)

上のものから合計を出してみる

users テーブルの id name team フィールドを選択スコアを合計する。
game テーブルで game.user_id を users.id = game.user_id で関連付けて id 毎に抽出
select id, name, team, sum(score) from users, games where users.id = game.user_id group by users.id

重複があったらテーブル名を明示する

select users.id 

外部ファイルからのデータ取り込み

.show
.sepalator ,		区切りを , に
.import users.txt users
.header on <<< カラム名を表示する

バックアップ

.dump 				全テーブル
.dump users			users テーブル
.output users.dump	ファイル名を設定。
.show で確認
.read users.dump ダンプを読み込む