LoginSignup
0
1

More than 3 years have passed since last update.

Oracle Bronze SQL基礎I -DDL文①-

Last updated at Posted at 2019-11-27

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つが存在する。

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まで格納できる、読取専用のデータ型

次回

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

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

随時更新@あんず飴

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1