SQL 教育用資料
データ登録とデータ抽出(基礎編)
前回作成したテーブルに、データを登録する方法と、その内容を確認する方法を学びます。
データ登録
テーブルにデータを登録するには、INSERTを使用します。
とりあえず、前回作成したユーザーマスタにデータを登録してみましょう。
sqlite> .schema EmployeeMaster
CREATE TABLE EmployeeMaster (
EmployeeCode int NOT NULL,
EmployeeSurname text NOT NULL,
EmployeeName text NOT NULL,
EmployeeSex int,
EmployeeStatus int DEFAULT 1 NOT NULL,
PRIMARY KEY (EmployeeCode)
);
sqlite> INSERT INTO EmployeeMaster VALUES ( 1, '演習', '一号', '1', 1);
sqlite>
エラーが出なければ、SELECTを使って確認します。
データ抽出
さて、データを登録できたかどうかを確認するために、データを抽出してみましょう。 データ抽出には、SELECTを使用します。
sqlite> SELECT * FROM employeemaster ;
1|演習|一号|1|1
sqlite>
このようにして、データを登録、確認することが出来ます。
データ登録の応用
SQLiteも分類上RDBMS(relational database management system)です。 そのため、関係性がわかればどのような方法でもデータを登録することができます。
カラム名とデータを一致させた方法で INSERT してみましょう。
sqlite> INSERT INTO EmployeeMaster (EmployeeCode, EmployeeSurname, EmployeeName, EmployeeSex, EmployeeStatus) VALUES ( 2, '演習', '二号', '0', 1);
sqlite>
カラムに DEFAULT が設定されている場合は省略できます。 ついでなのでカラムの順序も入れ替えて見ましょう。名と姓の順序を変えてみます。
sqlite> INSERT INTO EmployeeMaster (EmployeeCode, EmployeeName, EmployeeSurname, EmployeeSex) VALUES ( 3, '三号', '演習', '1');
sqlite>
SELECT を使って中身を確認してください。
sqlite> SELECT * FROM employeemaster ;
1|演習|一号|1|1
2|演習|二号|0|1
3|演習|三号|1|1
sqlite>
データの一括登録
一件のデータを登録する場合は先ほどのように入力してゆけばよいのですが、数十件あると大変です。 だからといって、メモ帳に作成してから、貼り付けるのも大変です。
そこで、テーブルを作成した時と同じように、ファイルから読み出す方法を使って登録することが出来ます。 では、まずはファイルを作成しましょう。
$ cd sqlfile
$ vi employeemaster.data.sql
INSERT INTO employeemaster VALUES ( 4, '演習', '四号', '0');
INSERT INTO employeemaster VALUES ( 5, '演習', '五号', '1');
$
さて、準備が出来たので、テーブルを登録した時と同じ要領で登録してみます。
sqlite> .read employeemaster.data.sql
とすると下記エラーが表示されて失敗すると思います。
Error: near line 1: table employeemaster has 5 columns but 4 values were supplied
Error: near line 2: table employeemaster has 5 columns but 4 values were supplied
このあたり、DBによっては、Default があるので通るものもあるのですが、きちんと書けという事なのでSQLを修正します。
INSERT INTO employeemaster (EmployeeCode, EmployeeSurname, EmployeeName, EmployeeSex) VALUES ( 4, '演習', '四号', '0');
INSERT INTO employeemaster (EmployeeCode, EmployeeSurname, EmployeeName, EmployeeSex) VALUES ( 5, '演習', '五号', '1');
もう一度、.read を使ってインポートを実行したら、確認してみましょう。
sqlite> SELECT * FROM employeemaster ;
1|演習|一号|1|1
2|演習|二号|0|1
3|演習|三号|1|1
4|□□|□□|0|1
5|□□|□□|1|1
sqlite>
こうなっていたら残念賞。 何が悪かったかを考察して、DBファイルを削除してもう一度同じ手順を繰り返すか、何かしらで頑張れ。
sqlite> SELECT * FROM employeemaster ;
1|演習|一号|1|1
2|演習|二号|0|1
3|演習|三号|1|1
4|演習|四号|0|1
5|演習|五号|1|1
sqlite>
これで、データの登録方法と簡単な抽出方法は終わりになります。
演習
問題1
employeemaster に下記のデータを追加登録してください。
employeecode | employeesurname | employeename | employeesex | employeestatus |
---|---|---|---|---|
11 | 宮地 | 勤 | 1 | 1 |
12 | 鈴木 | ヒカル | 0 | 1 |
13 | 佐藤 | 真一 | 1 | 0 |
14 | 岡部 | 幸平 | 1 | 0 |
15 | 河本 | 哲平 | 1 | 1 |
16 | 鈴木 | はるか | 0 | 1 |
17 | 花田 | 一徳 | 1 | 1 |
18 | 野村 | ヒロ | 1 | 0 |
19 | 浜崎 | 惇 | 1 | 0 |
20 | 梅本 | 真希 | 0 | 1 |
データは、なんちゃって個人情報で作成しました。
問題2
前回の演習で作成したテーブル MaterielDivMaster に下記のデータを登録してください。
MaterielDivCode | MaterielDivName | MaterielDivNote |
---|---|---|
1 | デスクトップパソコン | |
2 | ノートパソコン | |
3 | ディスプレイ | |
4 | パッケージソフトウェア | |
5 | シェアウェア |
前回の演習の解答
前回の演習のテーブル作成だけ解答を提示します。
CREATE TABLE MaterielDivMaster (
MaterielDivCode INT NOT NULL, -- 資材区分コード
MaterielDivName TEXT NOT NULL, -- 資材区分名
MaterielDivNote TEXT, -- 資材区分備考
PRIMARY KEY(MaterielDivCode)
);
CREATE TABLE MaterielMaster (
MaterielCode INT NOT NULL, -- 資材コード
MaterielDivCode INT NOT NULL, -- 資材区分コード
MaterielStatus INT DEFAULT 1 NOT NULL, -- 資材ステータス
MaterielMaker TEXT DEFAULT 'N/A' NOT NULL, -- メーカー
ModelNo TEXT NOT NULL, -- 型番
ProductNo TEXT DEFAULT 'N/A' NOT NULL, -- 製造番号
SerialNo TEXT DEFAULT 'N/A' NOT NULL, -- シリアル番号
Note1 TEXT, -- 備考1
Note2 TEXT, -- 備考2
RegistDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 登録日
DiscardDate TIMESTAMP, -- 廃棄日
PRIMARY KEY(MaterielCode)
);
ここまでが演習の解答。
ポイントは、初期値に定義値を使っているところ。 現在日時を表すキーワードがわかれば簡単だったと思うのですが、意味が分からない場合に苦労する箇所でもある。 どういうキーワードで検索するかで答えが出てくるかなどの理解につなげてください。
追加で作成するテーブル
以降で必要になるので、それ以外にいくつかのテーブルを作成します。
CREATE TABLE LicenseStocData (
MaterielCode INT NOT NULL, -- 資材コード
MaxStoc INT DEFAULT 0, -- 最大在庫数
Stoc INT NOT NULL, -- 使用数
LastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 最終更新日
PRIMARY KEY(MaterielCode)
);
CREATE TABLE UsageHistory (
MaterielCode INT NOT NULL, -- 資材コード
EmployeeCode INT NOT NULL, -- 社員コード
StartDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 使用開始日
EndDate TIMESTAMP, -- 使用終了日
Status INT DEFAULT 1 NOT NULL, -- ステータス
Note TEXT, -- 備考
Register INT, -- 登録者
RegistDate TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, -- 登録日
LastUpdater INT, -- 最終更新者
LastUpdate TIMESTAMP, -- 最終更新日
PRIMARY KEY(MaterielCode, EmployeeCode, StartDate)
);
とりあえずここまで作成してください。