The Sixwish project

SQL - Education

このエントリーをはてなブックマークに追加

データ登録とデータ抽出(基礎編)

前回作成したテーブルに、データを登録する方法と、その内容を確認する方法を学びます。

データ登録

テーブルにデータを登録するには、INSERTを使用します。

とりあえず、前回作成したユーザーマスタにデータを登録してみましょう。

lain=> \d usermaster
         Table "public.employeemaster"
     Column      |  Type   |     Modifiers
-----------------+---------+--------------------
 employeecode    | integer | not null
 employeesurname | text    | not null
 employeename    | text    | not null
 employeesex     | integer |
 employeestatus  | integer | not null default 1
Indexes:
    "employeemaster_pkey" PRIMARY KEY, btree (employeecode)

lain=> INSERT INTO employeemaster VALUES ( 1, '演習', '一号', '1');
INSERT 0 1
lain=> 

さて、同じようにINSERT X Xと表示されたのを確認できたら次に進みます。

データ抽出

さて、データを登録できたかどうかを確認するために、データを抽出してみましょう。
データ抽出には、SELECTを使用します。

lain=> SELECT * FROM employeemaster ;
 employeecode | employeesurname | employeename | employeesex | employeestatus
--------------+-----------------+--------------+-------------+----------------
            1 | 演習                         | 一号                    |           1 |              1
(1 row)

lain=> 

このようにして、データを登録、確認することが出来ます。

データの一括登録

一件のデータを登録する場合は先ほどのように入力してゆけばよいのですが、数十件あると大変です。
だからといって、メモ帳に作成してから、貼り付けるのも大変です。

そこで、テーブルを作成した時と同じように、ファイルから読み出す方法を使って登録することが出来ます。
では、まずはファイルを作成しましょう。

[lain@sixwish ~]$ cd sqlfile
[lain@sixwish sqlfile]$ vi employeemaster.data.sql
INSERT INTO employeemaster VALUES ( 2, '演習', '二号', '0');
INSERT INTO employeemaster VALUES ( 3, '演習', '三号', '1');
INSERT INTO employeemaster VALUES ( 4, '演習', '四号', '0');
INSERT INTO employeemaster VALUES ( 5, '演習', '五号', '1');
[lain@sixwish sqlfile]$

さて、準備が出来たので、テーブルを登録した時と同じ要領で登録してみます。

[lain@sixwish sqlfile]$ psql -f employeemaster.data.sql lain
INSERT 0 1
INSERT 0 1
INSERT 0 1
INSERT 0 1
[lain@sixwish sqlfile]$

さて、確認してみましょう。

[lain@sixwish sqlfile]$ psql
lain=> SELECT * FROM employeemaster ;
 employeecode | employeesurname | employeename | employeesex | employeestatus
--------------+-----------------+--------------+-------------+----------------
            1 | 演習                         | 一号                    |           1 |              1
            2 | 演習                         | 二号                    |           0 |              1
            3 | 演習                         | 三号                    |           1 |              1
            4 | 演習                         | 四号                    |           0 |              1
            5 | 演習                         | 五号                    |           1 |              1
(5 rows)

lain=> 

これで、データの登録方法と簡単な抽出方法は終わりになります。

演習

問題1
employeemaster に下記のデータを追加登録してください。
employeecodeemployeesurnameemployeenameemployeesexemployeestatus
11宮地11
12鈴木ヒカル01
13佐藤真一10
14岡部幸平10
15河本哲平11
16鈴木はるか01
17花田一徳11
18野村ヒロ10
19浜崎10
20梅本真希01
データは、なんちゃって個人情報で作成しました。
問題2
前回の演習で作成したテーブル MaterielDivMaster に下記のデータを登録してください。
MaterielDivCodeMaterielDivNameMaterielDivNote
1デスクトップパソコン 
2ノートパソコン 
3ディスプレイ 
4パッケージソフトウェア 
5シェアウェア 

データの一括登録に関する補足

実際に、数百件のデータを登録するような場合は、このような方式ではなく、COPYを使うことが推奨されています。
このCOPYは、PostgreSQL独自の拡張コマンドですが、高速に大量のデータを投下できるコマンドなのでそこそこ便利……かな?
ここでは取り扱いませんが、調べてみるのも一興かと。

前回の演習の解答

前回の演習のテーブル作成だけ解答を提示します。

[lain@sixwish ~]$ cd sqlfile
[lain@sixwish sqlfile]$ vi MaterielDivMaster.sql
CREATE TABLE MaterielDivMaster (
 MaterielDivCode INT NOT NULL, -- 資材区分コード
 MaterielDivName TEXT NOT NULL, -- 資材区分名
 MaterielDivNote TEXT, -- 資材区分備考
   PRIMARY KEY(MaterielDivCode)
);
[lain@sixwish sqlfile]$ vi MaterielMaster.sql
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 now() NOT NULL, -- 登録日
 DiscardDate TIMESTAMP, -- 廃棄日
   PRIMARY KEY(MaterielCode)
);
[lain@sixwish sqlfile]$ ls
MaterielDivMaster.sql  MaterielMaster.sql  employeemaster.sql
[lain@sixwish sqlfile]$

ここまでが演習の解答。

ポイントは、初期値に関数を利用する場合。
now() が何をするかはさておき、関数を利用する場合はシングルクォートで括ってはいけないということ。
括った場合にどうなるかはあとで調べてみてください。

追加で作成するテーブル

以降で必要になるので、それ以外にいくつかのテーブルを作成します。

[lain@sixwish sqlfile]$ vi LicenseStocData.sql
CREATE TABLE LicenseStocData (
 MaterielCode INT NOT NULL, -- 資材コード
 MaxStoc INT DEFAULT 0,     -- 最大在庫数
 Stoc INT NOT NULL, -- 使用数
 LastUpdate TIMESTAMP DEFAULT now(), -- 最終更新日
   PRIMARY KEY(MaterielCode)
);
[lain@sixwish sqlfile]$ vi UsageHistory.sql
CREATE TABLE UsageHistory (
 MaterielCode INT NOT NULL, -- 資材コード
 EmployeeCode INT NOT NULL, -- 社員コード
 StartDate TIMESTAMP DEFAULT now() NOT NULL, -- 使用開始日
 EndDate TIMESTAMP, -- 使用終了日
 Status INT DEFAULT 1 NOT NULL, -- ステータス
 Note TEXT, -- 備考
 Register INT, -- 登録者
 RegistDate TIMESTAMP DEFAULT now() NOT NULL, -- 登録日
 LastUpdater INT, -- 最終更新者
 LastUpdate TIMESTAMP, -- 最終更新日
   PRIMARY KEY(MaterielCode, EmployeeCode, StartDate)
);
[lain@sixwish sqlfile]$

とりあえずここまで作成してください。