SQLite操作メモ version 11

2019/05/08 17:09 by yamasyuh68
  :追加された部分   :削除された部分
(差分が大きい場合、文字単位では表示しません)
SQLite入門
SQLite入門
https://www.dbonline.jp/sqlite/

# where

select * from user where address = 'Tokyo'; 

c.execute('select * from musics where title=? ' , '') 

print(c.fetchall())


# Like

select * from user where address like 'S%';
              ----       -------       ---
              table       column     expression

特殊文字
%  任意の0文字以上の文字列
_  任意の1文字

否定
select * from user where name not like '_____'; 

エスケープ
select * from mytable where mycolumn like '%10$%' escape '$'
 この例は $ をエスケープ文字にしている




VACUUM

VACUUM 文を実行することで使用していない領域を解放しファイルのサイズを小さくできる場合があります


カラムを追加する

ALTER TABLE テーブル名 ADD COLUMN カラム名[ データ型]; 

PRIMARY KEY制約とは
主キーが設定されたカラムでは他のデータと重複する値を取ることはできません。 
CREATE TABLE テーブル名(カラム名 PRIMARY KEY, ...); 


INTEGER型のカラムにPRIMARY KEY制約を設定する場合
新しいデータを追加する時に対象のカラムの値を省略すると、 AUTOINCREMENT 制約を設定した時と同じように自動的に数値が格納されます。 
CREATE TABLE テーブル名(カラム名 INTEGER PRIMARY KEY, ...); 

ROWID
ほぼ同じ機能??

NOT NULL 制約
対象のカラムには NULL を格納することができなくなります

UNIQUE 制約
UNIQUE 制約を設定すると、対象のカラムには重複した値を設定することができなくなります

DEFAULT制約
DEFAULT 制約を設定すると、データを追加する時に値を省略した場合のデフォルト値を設定することができます

DEFAULT 制約で指定するデフォルトの値として次の値を指定すると、データを追加した時にその時点の日付や時刻を取得してデフォルトの値としてカラムに可能することができます。 
CURRENT_TIME         HH:MM:SS形式
CURRENT_DATE         YYYY-MM-DD形式
CURRENT_TIMESTAMP    YYYY-MM-DD HH:MM:SS形式
create table user(id integer, name text, ts default CURRENT_TIMESTAMP); 

CHECK制約
カラムに CHECK 制約を設定すると、データを追加する時に値が指定した条件を満たしているかどうかのチェックをすることができます
create table user(id integer, name text, old integer check(old > 18)); 
---> old が10のデータは追加できない
データ入力時のエラーチェックとして使う


# ビューを作成する
create view tokyouser as select id, name from user where address = 'Tokyo'; 
select * from tokyouser;
   これは↓と同じ
select id, name from user where address = 'Tokyo'; 



# インデックス
create index nameindex on user(name);
             ---------    ---- -----
             new         table  column
インデックスの確認
.indices 
 
インデックスの削除 
drop index nameindex; 

# トリガー
特定のテーブルのデータが更新されたら、同時に別のテーブルのデータを更新しておきたい場合があります。このような場合に使用されるのがトリガーです


# データの取得

SELECT * FROM テーブル名; 

SELECT カラム名 , ... FROM テーブル名 ORDER BY カラム名 [ASC | DESC]; 

SELECT カラム名 , ... FROM テーブル名 WHERE 条件式; 

SELECT カラム名 , ... FROM テーブル名  WHERE カラム NOT BETWEEN 値1 AND 値2; 

SELECT カラム名 , ... FROM テーブル名    WHERE カラム IN(値1, 値2, ...); 

SELECT カラム名 , ... FROM テーブル名 WHERE カラム LIKE パターン; 
  %  任意の0文字以上の文字列
  _  任意の1文字

SELECT カラム名 , ... FROM テーブル名 WHERE カラム GLOB パターン; 
  *      任意の0文字以上の文字列
  ?      任意の1文字
  [abc]  a or b or cのいずれかに一致
  [a-d]  aからdまでにいずれかに一致

SELECT カラム名 , ... FROM テーブル名 WHERE カラム IS NULL; 
  NULL そもそも値を設定しない

SELECT DISTINCT カラム名, ... FROM テーブル名;
 重複データの除外

SELECT カラム名, ... FROM テーブル名 LIMIT 行数; 
 取得するデータの数を指定

SELECT カラム名, ... FROM テーブル名 LIMIT 行数 OFFSET 開始位置; 
SELECT カラム名, ... FROM テーブル名 LIMIT 開始位置, 行数; 
 取得を開始する位置の指定する(必ずlimitと組み合わせる)


# SQLite関数

select count(name), count(address) from user; 
 カラム毎のデータ数
select gender, count(*) from user group by gender; 
 カラム毎にグループ化して行数を取得










      

SQLite入門
https://www.dbonline.jp/sqlite/

where

select * from user where address = 'Tokyo';

c.execute('select * from musics where title=? ' , '')

print(c.fetchall())

Like

select * from user where address like 'S%';
---- ------- ---
table column expression

特殊文字
% 任意の0文字以上の文字列
_ 任意の1文字

否定
select * from user where name not like '_____';

エスケープ
select * from mytable where mycolumn like '%10\(%' escape '\) '
この例は $ をエスケープ文字にしている

VACUUM

VACUUM 文を実行することで使用していない領域を解放しファイルのサイズを小さくできる場合があります

カラムを追加する

ALTER TABLE テーブル名 ADD COLUMN カラム名[ データ型];

PRIMARY KEY制約とは
主キーが設定されたカラムでは他のデータと重複する値を取ることはできません。
CREATE TABLE テーブル名(カラム名 PRIMARY KEY, ...);

INTEGER型のカラムにPRIMARY KEY制約を設定する場合
新しいデータを追加する時に対象のカラムの値を省略すると、 AUTOINCREMENT 制約を設定した時と同じように自動的に数値が格納されます。
CREATE TABLE テーブル名(カラム名 INTEGER PRIMARY KEY, ...);

ROWID
ほぼ同じ機能??

NOT NULL 制約
対象のカラムには NULL を格納することができなくなります

UNIQUE 制約
UNIQUE 制約を設定すると、対象のカラムには重複した値を設定することができなくなります

DEFAULT制約
DEFAULT 制約を設定すると、データを追加する時に値を省略した場合のデフォルト値を設定することができます

DEFAULT 制約で指定するデフォルトの値として次の値を指定すると、データを追加した時にその時点の日付や時刻を取得してデフォルトの値としてカラムに可能することができます。
CURRENT_TIME HH:MM:SS形式
CURRENT_DATE YYYY-MM-DD形式
CURRENT_TIMESTAMP YYYY-MM-DD HH:MM:SS形式
create table user(id integer, name text, ts default CURRENT_TIMESTAMP);

CHECK制約
カラムに CHECK 制約を設定すると、データを追加する時に値が指定した条件を満たしているかどうかのチェックをすることができます
create table user(id integer, name text, old integer check(old > 18));
---> old が10のデータは追加できない
データ入力時のエラーチェックとして使う

ビューを作成する

create view tokyouser as select id, name from user where address = 'Tokyo';
select * from tokyouser;
これは↓と同じ
select id, name from user where address = 'Tokyo';

インデックス

create index nameindex on user(name);
--------- ---- -----
new table column
インデックスの確認
.indices

インデックスの削除
drop index nameindex;

トリガー

特定のテーブルのデータが更新されたら、同時に別のテーブルのデータを更新しておきたい場合があります。このような場合に使用されるのがトリガーです

データの取得

SELECT * FROM テーブル名;

SELECT カラム名 , ... FROM テーブル名 ORDER BY カラム名 [ASC | DESC];

SELECT カラム名 , ... FROM テーブル名 WHERE 条件式;

SELECT カラム名 , ... FROM テーブル名 WHERE カラム NOT BETWEEN 値1 AND 値2;

SELECT カラム名 , ... FROM テーブル名 WHERE カラム IN(値1, 値2, ...);

SELECT カラム名 , ... FROM テーブル名 WHERE カラム LIKE パターン;
% 任意の0文字以上の文字列
_ 任意の1文字

SELECT カラム名 , ... FROM テーブル名 WHERE カラム GLOB パターン;

  •  任意の0文字以上の文字列
    

? 任意の1文字
[abc] a or b or cのいずれかに一致
[a-d] aからdまでにいずれかに一致

SELECT カラム名 , ... FROM テーブル名 WHERE カラム IS NULL;
NULL そもそも値を設定しない

SELECT DISTINCT カラム名, ... FROM テーブル名;
重複データの除外

SELECT カラム名, ... FROM テーブル名 LIMIT 行数;
取得するデータの数を指定

SELECT カラム名, ... FROM テーブル名 LIMIT 行数 OFFSET 開始位置;
SELECT カラム名, ... FROM テーブル名 LIMIT 開始位置, 行数;
取得を開始する位置の指定する(必ずlimitと組み合わせる)

SQLite関数

select count(name), count(address) from user;
カラム毎のデータ数
select gender, count(*) from user group by gender;
カラム毎にグループ化して行数を取得