概要
以下、自分用のメモです。最近よく忘れることが多いのでここにメモメモ。。。
SQLite3をコマンドラインで利用する場合に最低限以下を設定しておくと少し見やすくなります。
どれも基本的なものですが、忘れちゃうんですよね・・・年食うと。
.headers on
.mode column
.nullvalue [NULL]
試してみる
こんな感じのテーブル定義と初期データがあるとして
init.sql
CREATE TABLE Departments ( DepartmentID INTEGER PRIMARY KEY, DepartmentName TEXT NOT NULL ); CREATE TABLE Employees ( EmployeeID INTEGER PRIMARY KEY, FirstName TEXT NOT NULL, LastName TEXT NOT NULL, DepartmentID INTEGER REFERENCES Departments(DepartmentID), HireDate TEXT NOT NULL ); CREATE TABLE Projects ( ProjectID INTEGER PRIMARY KEY, ProjectName TEXT NOT NULL, StartDate TEXT NOT NULL, EndDate TEXT, DepartmentID INTEGER REFERENCES Departments(DepartmentID) ); CREATE TABLE Tasks ( TaskID INTEGER PRIMARY KEY, TaskName TEXT NOT NULL, StartDate TEXT NOT NULL, EndDate TEXT, ProjectID INTEGER REFERENCES Projects(ProjectID), EmployeeID INTEGER REFERENCES Employees(EmployeeID) ); INSERT INTO Departments (DepartmentID, DepartmentName) VALUES (1, 'IT'), (2, 'HR'), (3, 'Finance'); INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID, HireDate) VALUES (1, 'Taro', 'Yamada', 1, '2020-01-01'), (2, 'Hanako', 'Suzuki', 1, '2020-01-15'), (3, 'Ichiro', 'Tanaka', 2, '2020-02-01'), (4, 'Yoko', 'Watanabe', 3, '2020-02-15'); INSERT INTO Projects (ProjectID, ProjectName, StartDate, EndDate, DepartmentID) VALUES (1, 'System Upgrade', '2022-01-01', '2022-06-30', 1), (2, 'Recruitment Campaign', '2022-01-01', '2022-12-31', 2), (3, 'Budget Planning', '2022-04-01', '2022-09-30', 3); INSERT INTO Tasks (TaskID, TaskName, StartDate, EndDate, ProjectID, EmployeeID) VALUES (1, 'Server Maintenance', '2022-01-01', '2022-01-15', 1, 1), (2, 'Database Migration', '2022-01-15', '2022-03-15', 1, 2), (3, 'Interview Scheduling', '2022-02-01', '2022-02-28', 2, 3), (4, 'Resume Screening', '2022-01-15', '2022-03-15', 2, 3), (5, 'Financial Forecast', '2022-04-01', '2022-05-31', 3, 4), (6, 'Expense Analysis', '2022-06-01', '2022-09-30', 3, 4); PRAGMA foreign_keys = ON;
これを食べさせて、データベースを作成
$ sqlite3 my.db < init.sql
んで、コマンドラインから操作してみましょう。
$ sqlite3 my.db SQLite version 3.41.2 2023-03-22 11:56:21 Enter ".help" for usage hints. sqlite> .version SQLite 3.41.2 2023-03-22 11:56:21 0d1fc92f94cb6b76bffe3ec34d69cffde2924203304e8ffc4155597af0c191da zlib version 1.2.13 gcc-11.3.0 sqlite> .tables Departments Employees Projects Tasks sqlite> .schema tasks CREATE TABLE Tasks ( TaskID INTEGER PRIMARY KEY, TaskName TEXT NOT NULL, StartDate TEXT NOT NULL, EndDate TEXT, ProjectID INTEGER REFERENCES Projects(ProjectID), EmployeeID INTEGER REFERENCES Employees(EmployeeID) );
オケ。で、Tasksテーブルのデータを見てみます。
sqlite> SELECT * FROM Tasks; 1|Server Maintenance|2022-01-01|2022-01-15|1|1 2|Database Migration|2022-01-15|2022-03-15|1|2 3|Interview Scheduling|2022-02-01|2022-02-28|2|3 4|Resume Screening|2022-01-15|2022-03-15|2|3 5|Financial Forecast|2022-04-01|2022-05-31|3|4 6|Expense Analysis|2022-06-01|2022-09-30|3|4
なんか、うーんって感じの出力になります。ヘッダも無いし・・。
.headers on
てことで、以下でヘッダを表示するように指示します。
sqlite> .headers on
で、再度同じクエリを発行。
sqlite> SELECT * FROM Tasks; TaskID|TaskName|StartDate|EndDate|ProjectID|EmployeeID 1|Server Maintenance|2022-01-01|2022-01-15|1|1 2|Database Migration|2022-01-15|2022-03-15|1|2 3|Interview Scheduling|2022-02-01|2022-02-28|2|3 4|Resume Screening|2022-01-15|2022-03-15|2|3 5|Financial Forecast|2022-04-01|2022-05-31|3|4 6|Expense Analysis|2022-06-01|2022-09-30|3|4
ヘッダーが表示されるようになりました。でも、まだ見やすくない・・・。なんか、ギチギチな感じ。
.mode column
なので、いい感じに表示してもらうように以下を設定。
sqlite> .mode column
再度、クエリを発行。
sqlite> SELECT * FROM Tasks; TaskID TaskName StartDate EndDate ProjectID EmployeeID ------ -------------------- ---------- ---------- --------- ---------- 1 Server Maintenance 2022-01-01 2022-01-15 1 1 2 Database Migration 2022-01-15 2022-03-15 1 2 3 Interview Scheduling 2022-02-01 2022-02-28 2 3 4 Resume Screening 2022-01-15 2022-03-15 2 3 5 Financial Forecast 2022-04-01 2022-05-31 3 4 6 Expense Analysis 2022-06-01 2022-09-30 3 4
いい感じになりました。
で、おもむろに以下のレコードをINSERTしてみます。
sqlite> INSERT INTO Tasks (TaskID, TaskName, StartDate) VALUES (99, 'TEST', date('now'));
で、クエリを発行。
sqlite> SELECT * FROM Tasks; TaskID TaskName StartDate EndDate ProjectID EmployeeID ------ -------------------- ---------- ---------- --------- ---------- 1 Server Maintenance 2022-01-01 2022-01-15 1 1 2 Database Migration 2022-01-15 2022-03-15 1 2 3 Interview Scheduling 2022-02-01 2022-02-28 2 3 4 Resume Screening 2022-01-15 2022-03-15 2 3 5 Financial Forecast 2022-04-01 2022-05-31 3 4 6 Expense Analysis 2022-06-01 2022-09-30 3 4 99 TEST 2023-05-01
NULLか空白とかなのか、見分けが付きません。。
.nullvalue [NULL]
なので、以下を設定します。
sqlite> .nullvalue [NULL]
で、クエリを発行。
sqlite> SELECT * FROM Tasks; TaskID TaskName StartDate EndDate ProjectID EmployeeID ------ -------------------- ---------- ---------- --------- ---------- 1 Server Maintenance 2022-01-01 2022-01-15 1 1 2 Database Migration 2022-01-15 2022-03-15 1 2 3 Interview Scheduling 2022-02-01 2022-02-28 2 3 4 Resume Screening 2022-01-15 2022-03-15 2 3 5 Financial Forecast 2022-04-01 2022-05-31 3 4 6 Expense Analysis 2022-06-01 2022-09-30 3 4 99 TEST 2023-05-01 [NULL] [NULL] [NULL]
うん。いい感じ。
参考情報
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。