「リレーショナル・データベースおよびSQLの理解」について解説します。 参考:https://docs.oracle.com/cd/F19136_01/cncpt.pdf
データベースとは
データベースは、特定のデータを、検索や追加などが簡単にできるように整理したもののことです。 例えば、以下のようなデータのテーブルは「データベース」の一つです。
行・列・データ型を区別する表の「行」は1件分のデータ、「列」はそのデータが持つ項目です。社員表なら、1人の社員が1行、社員番号・氏名・入社日などが列になります。列には名前だけでなく、数値、文字列、日付などのデータ型を定義します。例えば金額を数値型にしておけば、数値として比較したり合計したりできます。SQLでは、欲しい列と条件を指定します。「ファイルの先頭から何番目を読む」といった物理的な格納位置や、索引をたどる順番を通常は利用者が指示しません。OracleがSQLを解析し、データの取得方法を決めます。このように「何が必要か」を表す言語であることがポイントです。また、表は論理的なデータのまとまりです。表1つとOSファイル1つが必ず対応するわけではありません。データファイルは物理的な格納先であり、表・列・行を指定して操作する利用者は、通常その配置を意識せずにSQLを記述できます。変更をひとまとまりにするトランザクショントランザクションは、まとめて確定または取り消す論理的な作業単位です。例えば在庫の移動では、「倉庫Aの在庫を減らす」と「倉庫Bの在庫を増やす」をひとまとまりにします。片方だけを確定すると、在庫の合計が合わなくなるためです。UPDATE stock SET quantity = quantity - 3この例では2つのUPDATEが適切に完了した後でCOMMITを実行し、両方の変更を確定します。途中で処理を続けられなくなった場合は、アプリケーション側でROLLBACKを実行し、ひとまとまりの変更を取り消します。COMMITは変更の確定、ROLLBACKは未確定の変更の取り消しです。すでにコミットした変更を、後からROLLBACKで取り消すことはできません。ここで、SQL文1つの失敗と、トランザクション全体の取り消しは別です。通常、あるSQL文が実行エラーになった場合、そのSQL文による変更は取り消されますが、同じトランザクションで先に成功した別のSQL文まで自動的にすべて取り消されるわけではありません。業務処理全体を取り消す判断は、アプリケーションや利用者が行います。DDLの実行による暗黙のコミットOracleでは通常のDDLを実行するとき、実行前に未確定のトランザクションがコミットされ、DDLが成功した後にもコミットされます。明示的にCOMMITを書かなくても確定するため、これを暗黙のコミットと呼びます。例えばUPDATEの後にCREATE TABLEを実行すると、その後のROLLBACKで前のUPDATEを取り消すことはできません。権限を扱うGRANTとREVOKEは、このコースでは目的に応じてDCLとして整理しています。OracleのSQLリファレンスではDDLに含めて扱われ、これらも暗黙のコミットを伴います。分類名だけでなく、処理の対象とコミットの有無を結び付けて理解しましょう。DELETE・TRUNCATE・DROPの違い「全部の行を消す」という説明だけではDELETEかTRUNCATEかは決まりません。「条件を指定する」「取り消せる」「表の定義も削除する」といった条件まで読み取ります。DROPした表を戻すフラッシュバック機能と、トランザクションを取り消すROLLBACKも別の仕組みです。Oracle公式資料:SQLの概要と分類、トランザクションと文レベルの原子性、COMMIT、TRUNCATE TABLE
WHERE warehouse_id = 'A' AND item_id = 101;
UPDATE stock SET quantity = quantity + 3
WHERE warehouse_id = 'B' AND item_id = 101;
COMMIT;
| 社員番号 | 氏名 | 部署 | |
|---|---|---|---|
| 命令 | 何を削除するか | WHEREによる行の選択 | 実行後の表 |
| DELETE | 表の行。条件を省略すると全行 | 可能 | 表の定義は残る。未コミットならROLLBACKできる |
| TRUNCATE TABLE | 表の全行 | 不可 | 表の定義は残る。DDLなので通常のROLLBACKでは戻せない |
| DROP TABLE | 表というオブジェクト | 不可 | 表そのものが削除される。通常のROLLBACKでは戻せない |
| 入社年 | |||
| 1001 | 山田 太郎 | 営業部 | 2022 |
| 1002 | 佐藤 花子 | 総務部 | 2021 |
| 1003 | 鈴木 一郎 | 開発部 | 2024 |
| 1004 | 田中 美咲 | 人事部 | 2023 |
リレーショナルデータベース(RDB)とは
リレーショナルデータベース(RDB)は、データを表(テーブル)形式で管理するデータベースです。複数のテーブルを共通の情報(キー)で関連付ける(リレーションを持たせる)ことで、効率的にデータを管理できます。
例えば、「社員テーブル」と「部署テーブル」を社員番号や部署番号などで関連付けることで、データの重複を減らし、一貫性を保ちながら管理できます。Oracle Databaseをはじめ、多くの業務システムではリレーショナルデータベースが採用されています。
以下の「社員テーブル」と「部署テーブル」の例をもとに、RDBについて説明します。
社員テーブル
| 社員番号 | 氏名 | 部署番号 |
|---|---|---|
| 1001 | 山田 太郎 | 10 |
| 1002 | 佐藤 花子 | 20 |
| 1003 | 鈴木 一郎 | 10 |
部署テーブル
| 部署番号 | 部署名 |
|---|---|
| 10 | 営業部 |
| 20 | 開発部 |
| 30 | 総務部 |
ここで「部署番号」が共通の項目になっており、この値を使って2つのテーブルを関連付けます。これがリレーション(関連)です。 なお、用語が少し紛らわしいですが、RDSは一般的には「Relational Database Service(Amazon RDS)」を指します。一方、「リレーショナルデータベース」は通常RDB(Relational Database)またはRDBMS(Relational Database Management System)と略されます。
データベース管理システム(Database Management System : DBMS)
データベース管理システム(Database Management System : DBMS)はデータの管理に使用するソフトです。データベースの構築や運用に使用します。Oracle DatabaseはDBMSの一つです。
データベース管理システム(DBMS)とは、データの格納、編成および取得を制御するソフトウェアです。 通常、DBMSの要素は次のとおりです。 ・カーネル・コード このコードでは、DBMS用のメモリーと記憶域を管理します。 ・ メタデータのリポジトリ このリポジトリは、通常、データ・ディクショナリと呼ばれます。 ・ 問合せ言語 この言語を使用してデータにアクセスできます。
https://docs.oracle.com/cd/F19136_01/cncpt.pdf
SQLとは
データベースに格納されているデータの参照(問合せ・検索)や変更(追加・更新・削除)を行うのに使用するのがSQLという言語です。 SQLは「Structured Query Language」の頭文字です。 参考:https://docs.oracle.com/cd/E96517_01/cncpt/sql.html
SQLコマンドの種類と特徴
SQLコマンドの種類と特徴を紹介します。
- データ検索
- DML
- DDL
- DCL
上記の内容について詳しく解説します。
SELECTコマンドによるデータ参照
SELECTコマンドは、表のデータを検索するために使用するSQLコマンドです。コマンドの末尾には「;(セミコロン)」を記述します。 例えば、menuという名前の表からすべてのデータを参照するには以下のコマンドを実行します。
SELECT * FROM menu;
WHERE句による検索条件の指定
必要な行だけを得るには、WHERE句を使って対象の行と一致する検索条件を指定します。 例えば、menu表の中から「カレー」に該当する料理の価格の行を参照するには以下のコマンドを実行します。
SELECT price FROM menu WHERE dish_name = 'カレー';
データ操作言語(DML)
表のデータを追加・更新・削除する時に使用するSQLコマンドは「データ操作言語(DML:Data Manipulation Language)」に分類されます。 DMLには以下のようなコマンドがあります。
- INSERTコマンド
- UPDATEコマンド
- DELETEコマンド
データ定義言語(DDL)
表などのオブジェクトを作成・変更・削除するの時に使用するSQLコマンドは、「データ定義言語(DDL:Data Definition Language)」に分類されます。 DDLには以下のようなコマンドがあります。
- CREATEコマンド
- DROPコマンド
- ALTERコマンド
データ制御言語(DCL)
Oracleデータベースに対して、ユーザーごとに操作する実行許可(権限)を設定して操作を実行できるか、できないかを制御するために使用するSQLコマンドは「データ制御言語(DCL:Data Control Language)」に分類されます。 DCLは以下の2つのコマンドがあります。
- GRANTコマンド
- REVOKEコマンド
GRANTコマンドはユーザーに権限を付与することができ、REVOKEコマンドは与えた権限を取り消すことができます。