📖

SQLiteとterminal操作

2024/06/08に公開

データベース論で宿題が出た

還暦を過ぎてプログラミングを始めたどんぐりが、
大学の聴講生になって、いろいろ学んでいる。
ふだんはPostgreSQLを使っているが、SQLiteの宿題が出たので挑戦する。

導入

MacBookはプレインストール。楽ちん。
terminalで、適当なデータベース名または既存のデータベース名で起動。

sqlite3 test.db <= test.dbがデータベース名、これを打ち込むと、以下が出てくる。
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite>

みんなで練習

まずtable設定。3番目は中間tableらしい。外部キーがあるからcodeが長い。
適当に改行しながら書いても大丈夫、最後の行で ; を打てば良い。
最後に外部キーを有効化。

CREATE TABLE product(id TEXT PRIMARY KEY, pname TEXT, price INTEGER);
CREATE TABLE client(id TEXT PRIMARY KEY, cname TEXT);
CREATE TABLE delivery(pid TEXT, cid TEXT, num INTEGER, PRIMARY KEY(pid, cid),
FOREIGN KEY(pid) REFERENCES product(id),
FOREIGN KEY(cid) REFERENCES client(id));
pragma foreign_keys=on

この後、製品名と、顧客名と、配送記録(中間table)のデータを次々入れていく。
先生はterminalでがんがん行くが、めんどうくさい。
こっそり検索して、GUIを探す。

GUIを入れる

https://sqlitebrowser.org
ずるけている間に、CSVから一括入力、とか説明されていた(>_<)
そしてかんたんな検索とかやって、宿題の説明。

宿題用のデータベースをDownload

「プレビューを表示できません」「ウィルスチェックができません」と警告出まくりの
恐ろしげな3.43GBのfileをDownloadする。解凍したら12GBもあるではないか。
なぜだかVSCodeに紐付いてるけど、当然表示できないので、
入れたばかりのGUIで開いてみる。
課題シートには、terminalで十件ずつ表示してみましょう、みたいに書いてある。
確かにこのlimitを忘れたら大変、なんせ3600万件!も入ってる!。
どこから取ってきたビッグデータだ。
先生、私たちになにをさせる気ですか。

select * from akas limit 10;

提出用Folderをつくる

mkdir report2
cd report2/
touch q1_sample.sql q2_type.sql q3_drama.sql .....

回答のSQL文をファイルに入れる

そもそも課題シートに書かれてることの意味がよくわからない。
さっきのビッグデータから検索をする、というSQL文を書くのがもちろん課題なのだけれど、
むしろ私にはterminalでqueryのfileをつくる、という未知の作業に引っかかり続ける。
たぶんこれでいいんだろう、という線。

データベース論               =>講義用のFolder
├── report2               =>提出用Folder
│   ├── q1_sample.sql         =>各問の答えのSQL文
│   └── q2_type.sql
│   └── q3_actor.sql
├── imdb.db               =>Downloadしたデータベース
//データベース論層にいます
//指定された検索を実行するためのSQL文をファイルに記述
echo "SELECT DIStINCT(category) FROM crew;" > report2/q1_sample.sql

宿題は五問、こんなシンプルなSQL文は第一問だけ。

sqlを実行して、検索結果を保存・確認

sqlite3 imdb.db
SQLite version 3.43.2 2023-10-10 13:08:14
Enter ".help" for usage hints.
sqlite> .output report2/q1.txt   =>検索結果を保存するfileができる
sqlite> .read report2/q1_sample.sql   =>さっきつくったSQL文を読む
sqlite> .output stdout =>見えない検索結果をq1.txtに保存
sqlite> .quit     =>SQLiteを終了
cat report2/q1.txt  =>保存した検索結果を確認
//ここに検索結果がずらっと出てくる

report2FolderをZipで圧縮して提出。
Macの場合、control+clickでdropdownから圧縮を選択。

結局

  • 宿題にGUIの出番はなかった。
  • .sqlというfileの存在を知った。
  • fileを実行して検索を行う、という手法を知った。
  • 検索結果を表示しないままファイルに保存する、という手法も知った。

でもきっと、私には二度と使うチャンスがない

四次元年表
https://app.laporte.academy
三次元・四次元表示
https://tempo-spaco.web.app
四次元年表の使い方
https://www.youtube.com/@laporte_academy

四次元年表for Mobile
https://apps.apple.com/jp/app/四次元年表for-mobile/id6502634868

https://play.google.com/store/apps/details?id=academy.laporte.chronomapMobile.chronomap_mobile&hl=ja

Discussion