第1章

・リレーショナルデータベースは、データを表で管理する。
・複数の表に分類したデータの関連付けは、データの値を使用する。
・表はROWと列COLUMNで構成される。
・行と列が交差する部分をフィールドという。
・フィールドに値が格納されていない状態をNULL値という。
・NULL値は、空白(スペース)や数値の0とは区別される。
・行を一意に識別するための列(または、列の組み合わせ)を主キーという。
・主キーには、重複した値は格納できない。
・主キーには、NULL値を含めることはできない。
・外部キーは、同じ表や他の表の主キー(または、一意キー)を参照する。
・外部キーには、NULL値を含めることができる。
・SQLは、DML(データ操作言語)、DDL(データ定義言語)、DCL(データ制御言語)、トランザクション制御の4つに分類される。
・DMLには、SELECT文、INSERT文、UPDATE文、DELETE文、MERGE文がある。
・DDLには、CREATE文、ALTER文、DROP文、RENAME文、TRUNCATE文、COMMENT文がある。
・DCLには、GRANT文、REVOKE文がある。
・トランザクション制御には、COMMIT文、ROLLBACK文、SAVEPOINT文がある。

第2章
・検索対象の表から特定の列のみを取り出す機能を射影、特定の行のみを取り出す機能を選択、複数の表を関連付けてデータを取り出す機能を結合という。
・SELECT句に複数の列を指定する場合には、,カンマで区切る。
・SELECT句に指定した列の順番で表示される。
・SELECT句に*アスタリスクを指定すると、全ての列のデータが表示される。
・DESCRIBEコマンドを使用すると、表の構造を確認できる。
・算術演算子の優先順位は、*/+-となる。
・算術演算子の優先順位は()丸括弧を使用することで、明示的に指定できる。
・NULL値を含む算術式は、計算結果もNULL値になる。
・列別名にスペースや特殊文字を含む場合や、大文字・小文字を区別する場合は、列別名を”二重引用符(ダブルクォーテーション)で囲む必要がある。
・文字リテラルや日付リテラルを文字式で指定する場合は、’一重引用符(シングルクォーテーション)で囲む必要がある。
・代替引用符(q)演算子を使用して、引用符デリミタを変更できる。
・引用符デリミタには、任意のシングルバイト文字やダブルバイト文字、[]、{}、()、<>の組み合わせを指定できる。
・DISTINCT列名を指定するとその列の重複行が削除される。
・DISTINCTキーワードに続いて、複数の列を指定すると、指定した列の値の組み合わせが一位になる行のみ表示される。
・DISTINCTキーワードは、SELECTキーワードの直後に1度だけ記述する。

第3章
・WHERE句を使用すると、行を取り出すための条件を指定できる。
・WHERE句は、FROM句の後ろに記述する必要がある。
・条件に指定する文字リテラルは、大文字・小文字が区別され、日付リテラルは、日付書式が区別される。
・WHERE句には、列別名を指定できない。
・不等号は、等号またはう等号と組み合わせて、指定できる(>=、<=、<>)
・BETWEEN演算子を使用すると、範囲を指定した条件を指定できる。
・BETWEENを指定した場合、境界値も取り出す範囲に含まれる。NOT BETWEENを指定した場合、境界値は取り出す範囲に含まれない。
・IN演算子を使用すると列値を複数の値と比較する条件を指定できる。
・LIKE演算子を使用すると指定した文字パターンに一致する行を取り出すことができる。
・LIKE演算子では、%と_アンダーバーの2種類のワイルドカードを使用できる。
・ワイルドカードは全角・半角を区別しない。
・ESCAPEオプションを使用すると、ワイルドカードを文字リテラルとして、扱うことができる。
・エスケープ文字には、任意の1倍と文字を指定できる。
・IS NULL演算子を使用すると、列にNULL値が含まれるかどうかを確認できる。
・NULL値との比較は、等号=や不等号<では評価できない。
・等号・不等号を使用してNULL値を評価しても、SQL文はエラーにはならないが、結果は1件も取り出されない。
・AND演算子は、前後の条件が両方ともTRUEの場合にTRUEになる。
・NOT演算子は、条件がFALSEの場合にTRUEを戻す。
・論理演算子の優先順位は、1.NOT、2.AND、3.OR
・OR演算子を使用した複数の条件を、IN演算子で書き換えても実行時のパフォーマンスは同じである。
・ORDER BY句を使用すると、ソートした(並べ替えた)データを取り出すことができる。

・降順でソートする場合は、DESCキーワードを指定する。
・ORDER BY句は、SELECT文の最後に記述する。
・ソート順序のデフォルトはASC(昇順)である。
・NULL値は、もっとも大きい値として扱われる。
・NULL値を含むデータを取り出す順序は、NULLS FIRSTまたは、NULLS LASTキーワードで指定できる。
・ORDER BY句とWHERE句は、同時に指定できる。
・ORDER BY句には、列別名や列の位置を指定できる。
・ORDER BY句には、複数の列を指定できる。
・複数の列を指定した場合、左側に指定した列から順番にソートされる。また、複数の列を指定した場合、列ごとにASCまたは、DESCを指定できる。
・結果セットで、戻される行の数を制限するには、row_limitting_clauseを使用する。
・row_limiting_clauseには、OFFSET句とFETCH句が含まれる。
・OFFSET句には、スキップする行数(制限を開始する行の1つ前の行数)を指定する。
・FETCh句には、返される行数または、行の割合を指定する。
・ROWとROWSに区別はないが、OFFSET句、FETCH句ともに省略不可。
・FIRSTとNEXTに区別はないが、FETCH句を指定する場合は省略不可。

第4章
・単一行関数は、1件の入力データごとに処理を行い、入力データ毎に1件の結果を戻す。
・グループ関数は、複数件の入力データをグループ化して、集計処理を行った結果を1つだけ戻す。
・単一行関数は、SELECT句、WHERE句、ORDER BY句などで使用できる。
・単一行関数は、任意のレベルにネストできる。
・UPPER関数は、引数に指定された文字列を大文字に変換して戻す。
・LOWER関数は、引数に指定された文字列を小文字に変換して戻す。
・INITCAP関数は、引数に指定された文字列に含まれる単語の先頭文字を大文字に、2文字目以降を小文字に変換して戻す。
・CONCAT関数は、引数に指定された2つの文字列を結合して戻す。
・SUBSTR関数は、引数に指定した文字列のm文番目の文字からn文字の文字列を戻す。
・LENGTH関数は、引数に指定された文字列の文字数を戻す。
・INSTR関数は、指定した文字パターンが現れる位置を戻す。
・LPAD関数、RPAD関数は、引数に指定された文字列がn文字になるように、埋め込み文字を埋め込んで戻す。
・TRIM関数は、引数に指定された文字列の左右(前後)にある任意の文字列(削除文字)を取り除いて戻す。
・REPLACE関数は、引数に指定された文字列のうち、任意の文字列(変更前文字)を、別の文字列(変更後文字)に置き換える。
・ROUND関数は、引数に指定された数値を小数点以下n桁に四捨五入して戻す。
・TRUNC関数は、引数に指定した数値を小数点以下n桁に切捨てて戻す。
・MOD関数は、引数nを引数mで割った余りを戻す。
・ROUND関数とTRUNC関数の引数nには、負の値を指定できる。
・日付値は、正規-年-月-日-時-分-秒を表す内部的な数値書式で格納される。
・日付値は、実行環境に設定されている表示書式で表示される。
・英語環境のデフォルトの表示書式は、DD-MON-RR(日-月-年)
・日本語環境のデフォルトの表示書式は、RR-MM-DD(年-月-日)
・日付値に数値を加算すると、指定した数値が日数として、加算される。
・日付値に数値/24を加算すると、指定した数値が時間数として、加算される。
・日付値から日付値を原産すると、指定した2つの日付値の間に経過した日数が戻される。
・日付値に対して、除算や乗算は実行できない。
・日付値同士を加算することはできない。
・SYSDATE関数は、現在の日付(日時)を戻す。
・MONTHS_BETWEEN関数は、引数に指定した2つの日付あいだの月数を戻す。
・ADD_MONTHS関数は、引数指定した日付のnヶ月後の日付を戻す。
・NEXT_DAY関数は、引数に指定した日付の翌日以降に指定した曜日になる最初の日付を戻す。
・LAST_DAY関数は、引数に指定した日付を含む月の、最終日の日付を戻す。
・ROUND関数(日付関数)は、引数に指定された日付値を四捨五入して戻す。
・TRUNC関数(日付関数)は、引数に指定された日付値を切捨てて戻す。

第5章
・暗黙的なデータ型変換とは、Oracleサーバが自動的に行うデータ型の変換であり、データ型の変換が意味を持つ場合にのみ成功する。
・明示的なデータ型変換とは、ユーザが明示的に変換関数を使用して、実行するデータ型の変換であり、Oracleデータベースでは、明示的なデータ型変換が推奨される。
・日付値を数値に変換する関数や、数値を日付値に変換する変換関数は、存在しない。
・TO_CHAR関数の引数に日付値を指定すると、指定された日付書式を使用して、日付値を文字値に変換する。
・日付書式内の半角記号は、そのまま結果に表示される。
・日付書式内に要素および、半角記号以外を指定する場合は、”ダブルクォーテーションで囲む。
・日付書式の大文字・小文字は区別される。
・M要素を指定すると埋め込みモードの有効・無効を切り替えることができる。
・YY要素とRR要素は、世紀の扱い方が異なる。
・TO_DATE関数は、引数に指定された文字値を日付値に変換して戻す。

・時刻が指定されなかった場合は、午前0時0分0秒として、処理する。
・TO_NUMBER関数は、引数に指定された文字値を数値に変換して戻す。
・NVL関数は、引数の式1に指定された値がNULL値以外の場合は、式1を、NULL値の場合は、式2を戻す。
・NVL2関数は、引数の式1に指定された値がNULL値以外の場合は、式2をNULL値の場合は、式3を戻す。
・NULLIF関数は、引数に指定された2つの値を比較して、等しい場合は、NULL値を戻し、等しくない場合は、式1を戻す。
・COALESCE関数は、引数に指定された式リストを先頭(左側)からチェックし、最初に見つかったNULL値以外の値を戻す。COALESCE関数の式リストには、同じデータ型(数値、文字値または、日付値)のデータを指定する必要がある。
・CASE式やDECODE関数を使用すると、SQL文の中にIF-THEN-ELSEロジックを実装できる。

第6章
・グループ関数は、行のグループごとに集計した結果を1つだけ戻す。
・グループ関数は、SELECT句、ORDER BY句、HAVING句で使用できる。
・グループ関数は、WHERE句では使用できない。
・DISTINCTを指定すると重複した値は、1回だけ処理される。
・COUNT関数は、取り出されたデータの件数を戻す。
・MAX関数は、最大値を、MIN関数は、最小値を戻す。
・AVG関数は、平均値を、SUM関数は、合計値を戻す。
・COUNT関数、MAX関数、MIN関数の引数には、文字型、数値型、日付型を指定できる。
・AVG関数、SUM関数、STDDEV関数、VARIANCE関数の引数には、数値型のみ指定できる。
・グループ関数は、NULL値を無視して集計処理を行う。
・GROUP BY句を指定すると、行をグループ化することができる。
・GROUP BY句をおよび、HAVING句は、WHERE句の後ろ、かつ、ORDER BY句の前に指定する。また、GROUP BY句とHAVING句はどちらを先に記述しても同様に動作する。
・GROUP BY句に列別名は指定できない。
・SELECT句の選択リストには、GROUP BY句で指定した列とグループ関数のみ指定できる。
・グループ関数は、最大2レベルまでネストできる。
・グループ関数をネストする場合は、GROUP BY句が必要。
・GROUP BY句に列別名は指定できない。指定した列をSELECT句のリストに指定しなくてもエラーにはならない。
・HAVING句を指定すると、取り出すグループを制限することができる。
・GROUP BY句を指定せずにHAVING句を指定した場合、選択された行全体が1グループとして処理される。

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

第8章
・副問合せは、()丸括弧で囲む。
・主問合せと副問合せのFROM句には、異なる表を指定できる。
・1つの主問合せに複数の副問合せを指定できる。
・副問合せは、WHERE句やHAVING句、FROM句などで使用できる。
・副問合せは、GROUP BY句では使用できない。
・副問合せの実行結果が0件の場合、主問合せの実行結果も0件になる。

▼副問合せの基本構文
SELECT 列名 [,列名・・・]
FROM 表名
WHERE 列名 比較演算子( SELECT 列名
FROM 表名
[WHERE 条件式] );

・単一行副問合せでは、単一行演算子を使用する。
・複数行副問合せでは、複数行演算子を使用する。
・ANYおよびALL演算子は、単一行演算子とセットで使用する必要がある。
・=ANY(値のリスト)は、比較対象の列の値がリスト内の最小値よりも大きい場合にTRUEを戻す。

・<ANY(値のリスト)は、比較対象の列の値がリスト内の最大値よりも、小さい場合にTRUEを戻す。
・>ALL(値のリスト)は、比較対象の列の値がリスト内の最大値よりも大きい場合にTRUEを戻す。
・<ALL(値のリスト)は、比較対象の列の値がリスト内の最小値よりも小さい場合にTRUEを戻す。
・NOT IN(リスト)は、リスト内の全ての値と等しくない時にTRUEを戻す。
・NOT IN(リスト)は、リストにNULL値が含まれるとデータは、1件も戻されない。

第9章
・集合演算子は、複数の問い合わせの結果を1つにまとめるために使用する。
・集合演算子を含む問合せを複合問合せと呼ぶ。
・UNION 2つの問合せ結果を連結し、重複した行を排除して戻す。
・UNION ALL 2つの問合せ結果を連結し、重複した行も含めて戻す。
・INTERSECT 2つの問合せ結果のうち、共通する行だけを戻す。
・MINUS 1つ目の問合せ結果のうち、2つ目の問い合わせ結果にない行を戻す。
・UNION ALL演算子以外の集合演算子を使用すると、問合せ結果は、SELECT句に指定されている列の値で、昇順にソートされる(デフォルトの場合)

・MINUS演算子を使用している場合は、1つ目の問合せと2つ目の問合せの順番を入れ替えると、問合せ結果が変わる。
・複合問い合わせでは、SELECT句に指定する列(または式)の個数を2つの問合せで同数にする必要がある。
・2つ目の問合せのSELECT句に指定する列のデータ型は、1つ目の問合せのSELECT句に指定されている列のデータ型と同じデータ型グループである必要がある。
・ORDER BY句は、複合問合せの最後の問合せに指定する必要がある。また、最初の問合せのSELECT句に指定されている列または、列別名を指定する必要がある。
・複合問合せでは、NULL値は、無視されない。
・集合演算子の優先順位は、すべて同じである。
・()丸括弧を使用すると、集合演算子の優先順位を明示的に指定できる。

第10章
・INSERT句に指定する列名を省略する場合は、VALUES句には、表に定義されている列と同数の値を、表の列構成と同じじゅんばんで指定する。
・INSERT句に指定する列名を省略する場合は、VALUES句には、列名のリストと同数の値を、同じ順番で指定する。
・列のリストから省略された列には、NULL値が格納される(暗黙的手法)
・列にNULLキーワードや’ ’からの文字列を指定するとNULL値が格納される(明示的手法)
・副問合せを使用したINSERT文には、VALUES句は、指定しない。
・UPDATE文のWHERE句を省略すると、表内のすべての行が更新される。
・DELETE文でWHERE句を省略すると、表内のすべての行が削除される。
・DELETE文のWHERE句には、副問合せを使用した条件を指定できる。
・トランザクションとは、論理的な処理単位である。
・DDLとDCLは、1文で1トランザクションとなる。
・DMLを含むトランザクションは、論理的な最小作業単位として扱われる1つまたは、複数のDMLで構成される。
・COMMIT文を実行するとすべての処理が確定する。
・ROLLBACK文を実行するとすべての処理が取り消される。
・SAVEPOINT文を実行するとセーブポイントが作成される。
・ROLLBACK TO SAVEPOINT文を実行すると、指定したセーブポイントまでの処理を取り消す(ロールバックする)。トランザクションは継続する。
・COMMIT文で処理を確定した後は、処理を取り消すことはできない。
・ロールバックした時点以降に作成されたセーブポイントは、破棄される。
・DDLおよびDCLを実行すると自動コミットが実行される。
・SQL * Plus(セッション)が異常終了すると、自動ロールバックが実行される。
・TRUNCATE文は、DDLのため、ロールバックはできない。
・未コミットのデータは、他のセッションからは、参照できない。変更(追加、更新、削除)を行ったセッションだけで確認できる。
・ロックは、トランザクション修了まで保持される。
・コミット後は、すべてのセッションで変更後のデータを参照できる。
・読み取り操作は、書き込み操作によって、待機させられない。
・同一ユーザでも、セッションが異なると未コミットのデータは参照できない。
・FOR UPDATE句を指定すると、SELECT文でも読み取り操作の対象行がロックされる。

第11章
・ユーザは、ユーザ名と同じ名前のスキーマを1つ所有する。
・他のユーザが所有するスキーマ内のオブジェクトを参照するには、スキーマ名.オブジェクト名を指定する。
・オブジェクト名の先頭文字は、数字以外の文字。
・オブジェクト名のアルファベットの大文字・小文字は、区別されない。
・オブジェクト名に使用できる記号は、_アンダーバー、$、#のみである。
・表を作成するには、CREATE TABLE権限が必要である。
・DEFAULTオプションを指定することで、任意の列にデフォルト値を設定できる。
・DEFAULT値には、リテラル、式、SQL関数(SYSDATEやUSERなど)を指定できる。
・DEFAULT値には、別の列の名前は指定できない。
・表を削除すると、表内のすべてのデータと表に定義されている制約、索引も削除される。
・表を削除しても、表を参照するビューとシノニムは、削除されない(無効になる)。
・表の所有者または、DROP ANY TABLE権限を持つユーザだけが表を削除できる。
・VARCHAR2型の最大サイズの指定は、省略できない。
・CHAR型の最大サイズの指定を省略した場合、デフォルト値の1が使用される。
・LONG列は、副問合せを使用した表の作成時にコピーできない(エラーが発生する)
・LONG列は、GROUP BY句とORDER BY句に指定できない。
・LONG列は、1つの表に1つだけ定義できる(LONG列またはLONG RAW列のどちらか1つだけ)
・LONG列には、制約を定義できない。
・DATE型では、世紀、年、月、日、時、分、秒が内部的な数値書式で格納される。
・1つの表に複数のLOB型の列を定義できる。
・TIMESTAMP型は、秒の小数点以下の値も格納できる。
・INTERVAL YEAR TO MONTH型とINTERVAL DAY TO SECOND型は、2つの日付・時刻の間隔を格納できる。
・表内の既存のデータが、追加する制約のルールに従っていれば、制約の追加ができる。
・制約は、データの変更時(追加、更新、削除)に自動的にチェックされる。
・制約は列レベルまたは、表レベルで定義できる(定義された制約に機能的な差はない)
・NOT NULL制約は、列レベルでのみ定義できる。
・複数の列の組み合わせからなる制約(複合の制約)は、表レベルでのみ定義できる。
・制約名を省略すると、制約名は、SYS_Cnの形式に成る。
・1つの列に複数の列レベル制約を定義する場合、カンマではなく、改行または、スペースで区切る。
・1つの表に複数の表レベル制約を定義する場合、改行やスペースではなく、カンマで区切る。
・NOT NULL制約を定義すると、その列には、NULL値を設定できない。
・UNIQUE制約(一意キー制約)を定義すると、その列(または列の組合せ)には、重複した値を格納できないが、NULL値を含むことはできる。
・UNIQUE制約を定義すると自動的に制約と同じ名前の一意索引が作成される。
・列の組合せに対して、UNIQUE制約を定義する場合は、表レベル制約の構文を使用する必要がある。
・PRIMARY key制約(主キー制約)を定義すると、その列(または列の組合せ)には、重複した値やNULL値を格納できない。
・FOREIGN KEY制約(外部キー制約)を定義すると、その列には、参照先の列に存在する値しか格納できない。
・FOREIGN KEY制約(外部キー制約)を定義しても、NULL値を設定できる。
・FOREIGN KEY制約は、UNIQUE制約または、PRIMARY KEY制約が定義されている列しか参照できない。
・CHECK制約を定義すると、その列には、指定した条件に対して、TRUEまたは、NULLを戻す値しか格納できない。

・CHECK制約の条件には、一部の指定を除き、基本的にWHERE句に指定できる条件と同様の指定を行える。
・CHECK制約は、1つの列に複数定義できる。
・CHECK制約の定義には、次の式は使用できない。
・CURRVAL、NEXTVAL,LEVEL、ROWNUM疑似列の参照
・SYSDATE、UID、USER、USERENV関数の呼び出し。
・他の行の値を参照する問合せ
・副問合せを使用した表の作成では、データ型とNOT NULL制約は、新しい表にコピーされ、NOT NULL制約以外の制約は、コピーされない。
・副問合せのSELECT句で計算式や関数を使用している場合は、明示的に列名(列別名)を指定する必要がある。
・既存の表の構造を変更する場合は、ALTER TABLE文を使用する。
・既存の表に列を追加できる(ALTER TABLE文でADDキーワードを使う)
・既存のデータが有る表に列を追加すると、既存の行の新しい列の値は、DEFAULTオプションで指定した値か、NULLになる。
・既存のデータが制約のルールを満たしていれば、既存の表に制約を追加できる。
・新しく追加する列にNOT NULL制約を追加できるのは、表が空の場合か、DEFAULTオプションが指定されている場合である。
・既存の列のデータ型、サイズ、およびデフォルト値は、変更できる(ALTER TABLE文でMODIFYキーワードを使う)
・サイズまたは精度の増加はいつでもできる。
・列のサイズは、次の場合のみ減少できる。
・列にNULL値のみが含まれている。
・表に行がない。
・列のサイズは、既存の列の値未満には減少できない。
・列にNULL値のみが含まれている場合は、データ型を変更できる。
・列にNULL値以外のデータが含まれていても、サイズを変更しない場合は、CHAR型からVARCHAR2型、または、VARCHAR2型からCHAR型へはデータ型を変更できる。
・サイズを大きくする変更は、いつでも可能。
・サイズを小さくする変更は、既存のデータが入らなくなるようなサイズへの変更はできない。
・列のデフォルト値の変更は、以後の豹への挿入のみに適用される。
・列を削除した後も、表には1つ以上の列を残す必要がある。
・列の削除はもとに戻せない。
・別の列から参照される主キーは、CASCADEオプションを指定しない限り削除できない。
・1度に1つの列のみを削除する場合は、ALTER TABLE DROP COLUMN文も使用できる。
・UNUSEDマークを設定すると、削除された列と同等の扱いになり、マークを付けた後は同じ名前の列を作成できる。
・UNUSEDマークが設定されている列の名前の確認や、取り消しはできない。
・UNUSEDマークが設定されている列は、DROP UNUSED COLUMNSを指定したALTER TABLE文で削除する。
・読取り専用モードの表に対しては、データの変更(追加、更新、削除)は行えない。
・読取り専用モードでも、表自体は削除できる。