表(TABLE)の作成と管理
1. データベースオブジェクトとスキーマ
データベースに格納されているオブジェクトを、データベースオブジェクトと呼びます。データベースオブジェクトとは、表・ビュー・索引などのデータベースの中で扱われるものを指します。本項で説明する表もデータベースオブジェクトの一つです。
またデータベースオブジェクトはすべて「スキーマ名.オブジェクト名」でユニークに管理されています。同じオブジェクト名でもスキーマが異なれば、全く別のオブジェクトとして認識されます。
2. 表作成
本項では、表の作成手順と制約事項を紹介します。
まず表を作成する前に制約事項を知っておく必要があるので以下に表の作成する際の表名/列名のルールを示します。(Oracleの場合)
文字で開始する必要がある
長さは30バイト以下
英数字、記号($_#)、漢字、ひらがな、カタカナは使用可能
予約語は使用できない
同一スキーマ内ではユニークでなければならない
大文字/小文字は区別されない
|
次に使用可能なデータ型について紹介します。(Oracleの場合)
文字型
■CHAR(Size)
固定長の文字データ型。Sizeには1−2000バイトまで指定可能です。固定長の文字列データとして扱われるため、未使用部分は空白が充填されます。
■VARCHAR2(Size)
可変長のデータ型。Sizeには1−4000バイトまで指定可能です。CHAR型との違いは格納された文字列データのみが保管される点です。このためデータベース容量を節約できます。
■LONG
可変長のデータ型。VARCHAR2型とことなり最大2Gバイトまでテキストデータを格納できます。ただしLONG型は表ごとに1つしか使用できず、WHERE/GROUP
BY句・整合性制約・索引では使用できません。また副問い合わせを使用して表を作成する際には、LONG型の列はコピーされません。
数値型
■NUMBER(Precision、Scale)
数値データ型。Precisionは桁数を表し、38桁まで使用可能です。Scaleは小数点以下の桁数を表し、38桁まで指定可能です。
日付型
■DATE
日付・時間を含む固定長7バイトの日付データ型。
バイナリ型
■RAW(Sise)
可変長バイナリ型。Sizeは、1〜2000バイトまで指定可能です。
■LONG RAW
可変長バイナリ型。2Gバイトまでバイナリデータを格納可能です。ただしLONG RAW型は表ごとに1つしか使用できず、WHERE/GROUP BY句・整合性制約・索引では使用できません。また副問い合わせを使用して表を作成する際には、LONG
RAW型の列はコピーされません。
LOB型
■BLOB
バイナリデータ型。最大サイズ4Gバイトまで指定可能です。LONG型とことなり表に複数定義可能です。異なる表領域にも格納でき効率的にデータへアクセス可能です。
■CLOB
文字データ型。最大サイズ4Gバイトまで指定可能です。LONG型とことなり表に複数定義可能です。異なる表領域にも格納でき効率的にデータへアクセス可能です。
■BFILE
読み取り専用バイナリデータ型。BFILEはOSファイルとして保存されているデータにアクセスできます。最大サイズ4Gバイトまで指定可能です。LONG型とことなり表に複数定義可能です。異なる表領域にも格納でき効率的にデータへアクセス可能です。
ROWID型
■RAWID
表の中の一意なアドレスを表すBASE64文字列。ROWID疑似列から戻される値に使用します。
日時および期間型
■TIMESTAMP(Precision)
DATA型の拡張です。Precisionには0−9まで格納できます。デフォルトは6です。
■TIMESTAMP(Precision) WITH TIME ZONE
TIMESTAMPにタイムゾーン変位を付加します。
■TIMESTAMP(Precision) WITH LOCAL TIME ZONE
TIMESTAMPにデータベースタイムゾーン変位を付加します。
■INTERVAL YEAR TO MONTH
時間間隔(年月)を格納します。
■INTERVAL DAY TO SECOND
時間間隔(日、時、分、秒)を格納します。
|
以下に表の作成コマンドを示します。(CREATE TABLE文)
SQL> CREATE TABLE 従業員
2 (従業員NO NUMBER(4),
3 従業員名 VARCHAR2(10),
4 担当 VARCHAR2(10),
5 上司 NUMBER(4),
6 入社日 DATE DEFAULT SYSDATE,
7 給与 NUMBER(9),
8 コミッション NUMBER(9),
9 部署NO NUMBER(2));
表が作成されました。
SQL> DESC 従業員
名前 NULL? 型
--------- -------- ------------------
従業員NO NUMBER(4)
従業員名 VARCHAR2(10)
担当 VARCHAR2(10)
上司 NUMBER(4)
入社日 DATE
給与 NUMBER(9)
コミッション NUMBER(9)
部署NO NUMBER(2)
SQL>
|
※DEFAULTオプションを使用することにより、列にデフォルト値を設定することができます。列に値のない行を挿入するとDAFAULTオプションで指定された値が設定されます。これによりNULL値が入力されることを防止します。
以下にDATEとTIMESTAMPの違いが分かりやすいように、テスト表を作成しDATEとTIMESTAMPそれぞれにSYSDATEを代入して表示することで比較しています。
SQL> CREATE TABLE TEST1
2 (COL1 NUMBER,
3 COL2 DATE,
4 COL3 TIMESTAMP);
表が作成されました。
SQL> DESC TEST1
名前 NULL? 型
---- ----- -----
COL1 NUMBER
COL2 DATE
COL3 TIMESTAMP(6)
SQL> INSERT INTO TEST1 VALUES(1,SYSDATE,SYSDATE);
1行が作成されました。
SQL> COL COL3 FORMAT A30
SQL> SELECT * FROM TEST1;
COL1 COL2 COL3
---------- -------- ------------------------------
1 09-04-19 09-04-19 10:13:15.000000
SQL>
|
3. 既存表から新しい表の作成
既に定義されている表の構造をもとに新しい表を作成することができます。既存から新しい表を作成する際のコマンドとして「CREATE TABLE AS」が用意されています。
以下に既存表から新しい表を作成する際の特徴を示します。
列の名前、行のデータ、NOT NULL制約のみがコピーされる
NOT NULL以外の制約やトリガーはコピーせれない
副問い合わせリストに式(四則演算など)を用いるときは、列別名を指定する
|
|
スポンサードリンク
|