いつか、技術ブログを

新人SE(OJT中)が技術ブログを書きたがっているブログです

オラクルのSQLの勉強メモまとめ

いま、この問題集を解いてオラクルマスターのブロンズのSQLの勉強をしてるのですが、そのメモのまとめです。

徹底攻略 ORACLE MASTER Bronze 12c SQL基礎問題集[1Z0-061]対応

徹底攻略 ORACLE MASTER Bronze 12c SQL基礎問題集[1Z0-061]対応

自分がよく忘れる部分の箇条書きです。

  • SQLはStructured Query Languageの略
  • PL/SQLは、SQLに条件分岐とか変数とかの機能を追加した、オラクル社独自のプログラミング言語
  • 一重引用符で囲むもの:文字リテラル、日付リテラル、日付書式、数値書式
  • 二重引用符で囲むもの:ネーミング規則に従わない名前、日付書式中の文字リテラル
  • NULLを含む計算式の結果はNULLになる
  • NULLと文字列を連結すると文字列になる
  • 比較演算子を使うとき、NULL値は検索対象外
  • ORDER BY句では、NULL値は無限大とみなされる
  • WHERE句では、文字リテラルの大文字と小文字は区別される
  • SELECT文の中で列別名を使用できるのはORDER BY句のみ
  • 表別名を指定した時は、列名修飾に表別名を使わないとエラーになる
  • SUBSTRは文字を抽出する関数、INSTRは指定文字列の位置を戻す関数
  • デフォルトの日付書式はDD-MON-RR
  • NEXT_DAYは曜日の次の日付を戻す関数
  • ROUNDやTRUNCの第二引数は、デフォルトが0で整数、1だと小数点第一位まで戻す、と覚える
  • 数値書式要素に¥(円の記号)はないので、ローカルの通過記号を表示するLを使う
  • WHERE句では、グループ関数を使うことはできない(WHERE句では、グループに分ける前に戻す行を制限している)。グループ化の後に戻す行を制限するには、HAVINGを使う。
  • WHERE句の中でグループ関数(SUMとかAVGとか)を使うとエラーになるので、副問合せを使う
  • TO_DATE関数の、年月などの省略時のデフォルトは、当年/当月/1日/午前0時0分0秒
  • 自然結合とUSING句による結合では、結合に使われた表名や表別名で修飾するとエラーになる
  • 副問合せは、SELECT文の中ではWHERE句、HAVING句、FROM句の中で使用できる
  • NATURAL JOIN句とUSING句は、一度にどちらかしか使えない
  • 集合演算子を使用する時、SELECT文では、「選択する列の数」「対応する列のデータ型の種類」が一致しなければならない
  • UNION ALLは行をそのままくっつける
  • UNIONは行をくっつけて重複を消してソートする
  • INTERSECTは両方の問い合わせに共通の行を選んで、重複を消してソートする
  • MINUSは最初の問合せから、2番目の問合せにもあった行を引いて(消して)、重複を消してソートする
  • DML文は、データ操作言語のことで、SELECT、INSERT、UPDATE、DELETEなどがある
  • INSERT文⬇︎
    • 列名は省略可能(INSERT INTO 表 VALUES〜)、すべての列に対して値を指定する。
    • 表の後に列名をリストするとき、一部列を省略するとデフォルト値が入る(デフォルト値は変更してなければnull)。
  • UPDATE文とDELETE文⬇︎
    • 同時に複数行を操作(更新/削除)できる
    • where句を省略すると表内のすべての行を操作(更新/削除)する
  • SELECT〜FOR UPDATE文を使うと、行レベルで排他ロックできる
  • スキーマ名のデフォルトは自分のユーザー名
  • varchar2(n)の n は最大長を表し、nを超えるデータはエラーになる
  • number(p,s)の p は精度(全桁数)で、 s は位取り(小数点以下の桁数)
  • 制約には5種類ある。列レベル構文でのみ定義できるのがNOT NULL制約であり、列レベルと表レベルのどちらでも定義できるのがUNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK制約である
  • 外部結合演算子(+)は、全ての行が取り出されない方の後ろに書く。
    where emp.deptno(+)=dept.deptnoなら、dept表は全行表示する。