データベースの基礎知識

データベースについて最低限覚えておくべき基礎知識を列挙します。

データベースと言えば、どこかデパートみたいなところに行った記憶があります。エスカレータがあって、割と小さい店内。あんまりお客さんも居ないんだけど、それが、どこだったのか思い出せない。

さあ、まとめていきましょう。

まとめ

  • 結合する表に重複する別名がある場合は、表接頭辞を指定する。
  • 表接頭辞を使用するとSQLのパフォーマンスが向上する。
  • 表接頭辞には表別名を指定できる。
  • 表別名を指定すると、そのSQL全体で元の表名は無効になる。
  • 自然結合とは、結合する2つの表に共通して存在するすべての列に基づいて表を結合する等価結合である。
  • 自然結合では明示的に結合条件を指定しなくてよい。
  • USING句を使用すると、結合列を明示的に指定できる。
  • 結合する2つの表に共通して存在する列が複数ある場合、USING句で結合列を指定できる。
  • USING句の結合列には表接頭辞は指定できない。
  • ひとつの結合に対してNATURAL JOIN句とUSING句を同時に使用することはできない。
  • ON句を使用した結合では、結合条件はON句に指定する。
  • ON句を使用した結合では、名前の異なる列を使用して表を結合することができる。
  • ON句を使用した結合では、共通の列名は表接頭辞で修飾する必要がある。
  • SQL:1999結合構文とOracle独自結合構文にパフォーマンス上の違いは無い。
  • Oracleサーバーでは3つ以上の表を結合できる。
  • 結合列の名前が同じで、データ型も同じ場合は、自然結合(NATURAL JOIN句)やUSING句を使用した場合でも、3つ以上の表を結合できる。
  • 3つ以上の表を結合する場合は、1つのSQL文にNATURAL JOIN句とUSING句、ON句を同時に使用できる。
  • 非等価結合とは、結合条件に等価演算子(=)以外の演算子を使用して、条件を満たすデータを取り出す結合である。
  • 自己結合とは、同一の表に2つの表別名を指定することで1つの表を2つの表に見立ててデータを取り出す結合である。
  • 外部結合には左側外部結合、右側外部結合、完全外部結合の3つの結合方法がある。
  • クロス結合とは、デカルト積を戻す結合である。
  • デカルト積とは、結合する表に格納されているデータの全ての組み合わせである。

まとめ

  • 各ユーザはユーザ名と同じ名前のスキーマをひとつ所有する。
  • 他のユーザが所有するスキーマ内のオブジェクトを参照するにはスキーマ名.オブジェクト名で指定する必要がある。
  • オブジェクト名の先頭の文字は数字以外の文字にする。
  • オブジェクト名のアルファベットの大文字・小文字は区別されない。
  • オブジェクト名に使用できる記号は「_」「$」「#」である。
  • 表を作成するにはCREATE TABLE権限が必要である。
  • DEFAULTオプションを指定することで、任意の列にデフォルト値を設定できる。
  • DEFAULT値にはリテラル、式、SQL関数を指定できる。
  • DEFAULT値には、別の列の名前は指定できない。
  • 表を削除すると、表内のすべてのデータと表に定義されている制約、索引も削除される。
  • 表を削除しても、表を参照するビューとシノニムは削除されない。(無効になる)
  • 表の所有者またはDROP ANY TABLE権限を持つユーザだけが表を削除できる。
  • VARCHAR2の最大サイズ指定は必須である。
  • CHAR型の最大サイズ指定を省略した場合、デフォルト値は1となる。
  • LONG列は、副問合せをを使用した表の作成時にコピーできない。(エラーとなる)
  • LONG列はGROUP BY、ORDER BYに指定できない。
  • LONG列はひとつの表に1列だけ作成することができる。
  • LONG列には制約を定義できない。
  • DATE型では世紀、年、月、日、時、分、秒が内部的な数値形式で格納される。
  • ひとつの表に複数のLOB型の列を定義できる。
  • TIMESTAMP型は、秒の小数点以下の値も格納できる。
  • INTERVAL YEAR TO MONTH型とINTERVAL DAY TO SECOND型は2つの日付・時刻の間隔を格納できる。
  • 表内の既存のデータが追加する制約のルールに従っていれば、制約を追加できる。
  • 制約はデータの変更時に自動的にチェックされる。
  • 制約は列レベル、または表レベルで定義できる。
  • 制約名を省略すると、制約名は「SYS_C」で始まる形式になる。
  • ひとつの列に複数の列レベル制約を定義する場合、カンマではなく、開業またはスペースを区切る。
  • ひとつの表に複数の表レベル制約を定義する場合、開業やスペースでなく、カンマで区切る。

 

特集記事

Posted by @erestage