Oracle Bronze SQL基礎I -DDL文①-

#DDL文
本日もまた、SQL基礎の勉強まとめ。今回は、データ型の話が中心。
DDL文とは、データベースのデータ構造を定義する言語を用いたSQL文
- CREATE
- DROP
- ALTER
- COMMIT
- TRUNCATE
- PRUGE  ...など
実行後に現在のトランザクションをコミットする文を指す。

また、スキーマ・オブジェクトとはデータベースに格納する表やビュー、
索引などの総称で特定のユーザーに所有されるもの。
記憶域やロール、ユーザー等システム全体で共有されるものは
スキーマ・オブジェクトではない。

##データ型
データベースに格納する値にはデータ型という、
型設定を行う必要があり、そのデータ型の各特長についてが下記まとめ。

###●CHAR型　文字を扱うデータ型
CHAR型は最大2,000バイトまでの文字データを格納できる固定長のデータ型です。

▽CHAR型

|項目                 |データ                 |
|:--------------------|:---------------------|
|最大格納サイズ        |最大2,000バイト        |
|定義時のサイズ指定    |省略可(省略時サイズ'1') |
|確保するデータサイズ  |固定(定義時に指定したサイズ)|
|固定長・可変長        |固定長                 |

<<例>>
CHAR(5)に「abc」が格納されるた場合、
データの末尾に空白を追加し、長さが5バイトの「abc　　」として格納される

###●VARCHAR2型　文字を扱うデータ型
VARCHAR2型は最大4,000バイトまでの文字データを格納できる可変長のデータ型です。

▽VARCHAR2型　文字を扱うデータ型

|項目                 |データ                 |
|:--------------------|:---------------------|
|最大格納サイズ        |最大4000バイト         |
|定義時のサイズ指定    |省略不可               |
|確保するデータサイズ  |可変(格納するデータに応じて変わる)|
|固定長・可変長        |可変長                 |

###●CLOB型　文字を扱うデータ型
CLOB型は最大4GBまで格納できるデータ型です。

###●NUMBER型
NUMBER型には正と負の数値を格納できます。
NUMBER(桁,内少数桁)

→例えばNUMBER(10,3)に123.4567を入力すると
 小数点第4位が四捨五入され、123.457が格納されます。

###●期間を確認するデータ型(INTERVAL)
期間を確認するデータ型には、下記の2つが存在する。


```sql:anzuame.sql

--期間を年、月の単位で格納する。(「5年6カ月」など)
INTERVAL YEAR TO MONTH
--期間を日、時、分、秒の単位で格納する。(「10日と12時間30分30秒」など)
INTERVAL DAY TO SECOND
```

この2つの型は、ともにDATE型との演算が可能です。
DATE型の値に期間を足すことで、足した期間経過後の日時を取得することができます。

値を格納するためには、以下のような期間リテラルを使用します。
・INTERVAL '5-6' YEAR TO MONTH：5年6ヶ月
・INTERVAL '100' YEAR(3)：100年
・INTERVAL '300' MONTH(3)：300ヶ月
・INTERVAL '10 12:30:30' DAY TO SECOND：10日と12時間30分30秒
　※年や月の精度が2桁より大きい場合は、YEAR(3)などのように精度を指定します


<<例>>
INTERVAL '200' MONTH(=200ヶ月間)
=INTERVAL ’16-8’ YEAR TO MONTH(=16年8ヶ月間)

※期間データ型には書式モデルはありません。
　SELECT文で期間データ型を表示させると、
　　INTERVAL ’16-8’ YEAR TO MONTH は +16-8
　　INTERVAL '50-11' YEAR TO MONTH は +50-11
　　INTERVAL '4 12:30:10.1234567' DAY TO SECOND は +04 12:30:10.123457
　のように表示されます。　


###●DATE型
DATE型は日付データを格納するためのデータ型です。
DATE型には世紀、年、月、日、時、分、秒の値が格納されます。

なお、格納するためには、日付リテラルを使用するか、
文字列や数値をTO_DATE関数でDATE型の値に変換します。

###●TIMESTAMP型
TIMESTAMP型はDATE型を拡張したデータ型で、
世紀、年、月、日、時、分、秒に加え秒の小数点以下の値を格納することができます。

TIMESTAMP型の列に値を格納するためには、日付リテラルを使用するか、
文字列や数値をTO_TIMESTAMP関数でTIMESTAMP型の値に変換します。

なお、TIMESTAMP型の値をDATE型の列へ暗黙的データ変換により、
格納することができます。

###●RAW型
最大2000バイトまでのバイナリデータを格納できる、可変長のデータ型です。

###●ROWID型
列にROWIDを格納するためのデータ型で、
行の一意なアドレスであるROWID疑似列(実際には列として定義されていない列)から
返される値を列に格納するために使用する、BASE64文字列のデータ型です。

###●LONG型　文字を扱うデータ型
LONG型は最大2GBまで格納できる可変長のデータ型です。

LONG型には以下の制限があります。
・LONG型の列は1つの表に1つだけ定義できる
・LONG型の列はGROUP BY句とORDER BY句に指定できない
・副問合せによる表の作成時、LONG型の列はコピーできない
・LONG型の列には、NULLおよびNOT NULL以外の制約を定義できない

###●LONG RAW型
2GBまでの可変長のバイナリデータを格納できるデータ型です。

LONG RAW型は以下の制限があります。
・LONG RAW型の列は1つの表に1つだけ定義できる
・LONG RAW型の列には制約は定義できない
・LONG RAW型の列はGROUP BY句とORDER BY句に指定できない
・副問合せによる表の作成時、LONG RAW型の列はコピーできない

###●BFILE型
最大4GBまでのバイナリデータを格納できる、読み取り専用のデータ型です。
データはOracleのデータファイル内ではなく、
OS上にバイナリファイル(動画やイメージ)として格納され、
ファイルに対するポインタ情報のみが格納されます。

###●バイナリーデータを格納
バイナリデータを扱う主なデータ型は次の通りです。

|項目                 |データ                 |
|:--------------------|:---------------------|
|RAW|最大2000バイトまで格納できる可変長のデータ型|
|LONG RAW|最大2GBまで格納できる可変長のデータ型|
|BLOB|最大4GBまで格納できるデータ型|
|GFILE|最大4GBまで格納できる、読取専用のデータ型|
|BFILE|最大4GBまで格納できる、読取専用のデータ型|

##次回
次回は、制約のお話を書く予定。

余談ですが、この名前のところ、名字名前で登録すると反転しちゃうのどうにかならんかね。
あんず　飴　表記が理想。


随時更新＠あんず飴