SQLiteとterminal操作
データベース論で宿題が出た
還暦を過ぎてプログラミングを始めたどんぐりが、
大学の聴講生になって、いろいろ学んでいる。
ふだんは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を入れる
そしてかんたんな検索とかやって、宿題の説明。
宿題用のデータベースを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を実行して検索を行う、という手法を知った。
- 検索結果を表示しないままファイルに保存する、という手法も知った。
でもきっと、私には二度と使うチャンスがない
四次元年表
三次元・四次元表示 四次元年表の使い方四次元年表for Mobile
Discussion