テーブルの作成方法
テーブルの作成方法について説明します。
テーブルの作成
ここではテーブルを作成及びデータの追加・更新・削除のSQLを説明します。
以下のECサイトの顧客テーブルを作成することにします。
No | 項目名(論理) | 項目名(物理) | 型 | 制約 |
---|---|---|---|---|
1 | 顧客番号 | CUST_NO | INT | 主キー |
2 | 氏名 | CUST_NAME | VARCHAR | 必須 |
3 | 住所 | CUST_ADDR | VARCHAR | 必須 |
4 | 電話番号 | CUST_TEL | VARCHAR | |
5 | 入会日時 | JOIN_DATE | DATE |
テーブルを作成する際は以下のSQL文を実行します。
構文の詳細は公式サイトを参照ください。
【SQL文】
-- テーブル CREATE TABLE MST_CUSTOMER ( CUST_NO INT NOT NULL, -- 顧客番号 CUST_NAME VARCHAR(30) NOT NULL, -- 氏名 CUST_ADDR VARCHAR(100) NOT NULL, -- 住所 CUST_TEL VARCHAR(20), -- 電話番号 JOIN_DATE DATE -- 入会日時 ) ; -- プライマリーキー ALTER TABLE MST_CUSTOMER ADD CONSTRAINT PK_MST_CUSTOMER PRIMARY KEY (CUST_NO) ;
これでテーブルが作成されました。
次にデータを追加してみましょう。
以下のSQL文を実行ます。
【SQL文】
INSERT INTO MST_CUSTOMER VALUES(0001, '佐藤 一郎', '東京都中央区1-1', '090-3000-1234', CURRENT_DATE); INSERT INTO MST_CUSTOMER VALUES(0002, '鈴木 和夫', '東京都港区11', '090-9080-4567', CURRENT_DATE); INSERT INTO MST_CUSTOMER VALUES(0003, '高橋 花子', '東京都葛飾区5-1-4', '090-0300-8901', CURRENT_DATE); INSERT INTO MST_CUSTOMER VALUES(0004, '田中 翔太', '埼玉県さいたま市31', '090-3000-0453', CURRENT_DATE); INSERT INTO MST_CUSTOMER VALUES(0005, '渡辺 明日香', '神奈川県横浜市100', '090-0100-1010', CURRENT_DATE);
データが登録されたか以下のSELECT文でデータを抽出してみます。
SELECT * FROM MST_CUSTOMER ;
実行結果は以下になります。データが追加されています。
CUST_NO CUST_NAME CUST_ADDR CUST_TEL JOIN_DATE ------------- ----------------------------------- ---------------------------------------------------------- ----------------------- ------------ 1 佐藤 一郎 東京都中央区1-1 090-3000-1234 2019-08-31 2 鈴木 和夫 東京都港区11 090-9080-4567 2019-08-31 3 高橋 花子 東京都葛飾区5-1-4 090-0300-8901 2019-08-31 4 田中 翔太 埼玉県さいたま市31 090-3000-0453 2019-08-31 5 渡辺 明日香 神奈川県横浜市100 090-0100-1010 2019-08-31
コメントの追加
テーブル、項目に対しコメントを追加することができます。
カタログに登録され、ちょっと便利です。
構文は以下の通りです。
COMMENT ON DBオブジェクト DBオブジェクト名 IS 'コメント文字列'
-- コメント COMMENT ON TABLE MST_CUSTOMER IS '顧客テーブル'; COMMENT ON COLUMN MST_CUSTOMER.CUST_NO IS '顧客番号'; COMMENT ON COLUMN MST_CUSTOMER.CUST_NAME IS '氏名'; COMMENT ON COLUMN MST_CUSTOMER.CUST_ADDR IS '住所'; COMMENT ON COLUMN MST_CUSTOMER.CUST_TEL IS '電話番号'; COMMENT ON COLUMN MST_CUSTOMER.JOIN_DATE IS '入会日時';
実行後カタログをみてみます。
SELECT NAME, REMARKS FROM SYSIBM.SYSCOLUMNS WHERE TBNAME = 'MST_CUSTOMER' ORDER BY COLNO ;
実行結果は以下になります。カタログにコメントが追加されています。
NAME REMARKS ---------------------------------------------------------- ---------------------------------------------------------- CUST_NO 顧客番号 CUST_NAME 氏名 CUST_ADDR 住所 CUST_TEL 電話番号 JOIN_DATE 入会日時
これを利用して以下のSQLを実行するとCREATE TABLE文が生成できます。
※制約は対応していません。プレーンな表のみです。
-- CEATE TABLE 生成SQL SELECT CASE WHEN COL.COLNO = 0 THEN 'CREATE TABLE ' || TBL.NAME || ' -- ' || TBL.REMARKS || CHR(13) || CHR(10) || '(' || CHR(13) || CHR(10) ELSE '' END || ' ' || COL.NAME || REPEAT(' ', 20 - (LENGTH(COL.NAME)) ) || COL.COLTYPE || CASE WHEN COL.COLTYPE IN ('CHAR', 'VARCHAR', 'LONG VARCHAR') THEN '(' || COL.LENGTH || ')' ELSE '' END || CASE WHEN TBL.COLCOUNT > COL.COLNO + 1 THEN ',' ELSE '' END || REPEAT(' ', 20 - (CASE WHEN COL.COLTYPE IN ('CHAR', 'VARCHAR', 'LONG VARCHAR') THEN LENGTH(TO_CHAR(COL.LENGTH)) + 2 ELSE 0 END + CASE WHEN TBL.COLCOUNT > COL.COLNO + 1 THEN 1 ELSE 0 END ) ) || '-- ' || COL.REMARKS || CASE WHEN TBL.COLCOUNT = COL.COLNO + 1 THEN CHR(13) || CHR(10) || ');' ELSE '' END FROM SYSIBM.SYSTABLES TBL JOIN SYSIBM.SYSCOLUMNS COL ON COL.TBNAME = TBL.NAME WHERE TBNAME = 'MST_CUSTOMER' ORDER BY COLNO ;
CREATE TABLE文が出力されました。まあ、コメントはなくても良いという話はありますが。。。
CREATE TABLE MST_CUSTOMER -- 顧客テーブル ( CUST_NO INTEGER , -- 顧客番号 CUST_NAME VARCHAR (30), -- 氏名 CUST_ADDR VARCHAR (100), -- 住所 CUST_TEL VARCHAR (20), -- 電話番号 JOIN_DATE DATE -- 入会日時 );
おまけに、SELECT文を生成するSQLも記します。
-- SELECT 生成SQL SELECT CASE WHEN COL.COLNO = 0 THEN 'SELECT ' ELSE ' ' END || COL.NAME || CASE WHEN TBL.COLCOUNT = COL.COLNO + 1 THEN CHR(13) || CHR(10) || ' FROM ' || TBL.NAME || ';' ELSE ',' END FROM SYSIBM.SYSTABLES TBL JOIN SYSIBM.SYSCOLUMNS COL ON COL.TBNAME = TBL.NAME WHERE TBNAME = 'MST_CUSTOMER' ORDER BY COLNO ;