UNISIA-SE Tech Blog

気まぐれお勉強日記

[応用情報技術] [基礎] [19] 覚書き : データベース(データ操作)

1. 前提条件


このページでは、応用情報技術者試験の出題分野である データベースのデータ操作 に関する覚書きを列挙する。

一度内容を理解したことを前提とし、最低限の解説に留めていることに注意。

2. 集合/関係演算


データベースは、次の集合演算と関係演算でデータ集合を表現する。

集合演算 (和、差、積、直積)
については、下記「 7. 集合」の集合演算と同じ。
[応用情報技術] [基礎] [1] 覚書き : 離散数学 >「 7. 集合」
直積 は、2つのテーブルA、Bの 全組合わせ を表す。

例 \()\) テーブルAとテーブルBの直積A × B
X Y
1a
2b
3c
\(\ \times\ \)
X Z
1d
2e
3f
\(\ =\ \)
A.X A.Y B.X B.Z
1a1d
1a2e
1a3f
2b1d
2b2e
2b3f
3c1d
3c2e
3c3f


関係演算 (選択、射影、結合、商)
選択は、レコードを抽出する 操作(演算)。

射影は、フィールドを抽出する 操作(演算)。

結合は、直積選択射影 を組合わせた操作(演算)で、双方に共通するレコードを抽出する 内部結合(自然結合) と片方のレコードに存在する行のみを抽出する 外部結合 がある。

は、演算をテーブル \(A\ \div\ B\) とした場合、テーブル \(A\) から テーブル \(B\) のレコードに一致するレコードを抽出し、\(B\) のフィールドと重複レコードを削除する操作(演算)。

3. SQL


SQL(Structured Query Language)は、リレーショナルデータベース管理システム(RDBM:Relational DataBase Management System)において、データの操作や定義を行うためのデータベース言語で、次項 4種類のデータ言語に大別される。
4. データ定義言語:SQL-DDL
5. データ定義言語:SQL-DML
6. データ制御言語:SQL-DCL
7. その他のデータ言語(SQL構文)

また、SQLは、国際標準化により多様なリレーショナルデータベースで利用できるようになっており、代表的なもので下記のデータベースがある。
Oracle Database:有償で大規模データ向け。
PostgreSQL:無償で小規模~大規模データ向け。
MySQL:商用利用のみ有償で小規模~大規模データ向け。
SQLite:無償で小規模、中規模データ向け。
Microsoft SQL Server:有償で小規模~大規模データ向け。
Microsoft Access:有償(Office)で小規模データ向け。

4. データ定義言語:SQL-DDL(Data Definition Language


テーブル、ビュー、インデックスなどを定義する命令言語で、以下の命令文を用いたSQLを指す。

CREATE文
データ定義の作成 を実行する命令文。
※ テーブル定義を新規作成する CREATE TABLE など。

以下、CREATE TABLE に指定できる主な制約。

構文 意味
PRIMARY KEY主キー制約
NOT NULL非ナル制約(NOT NULL制約)
REFERENCES参照制約(外部キー制約)
UNIQUE一意性制約

ALTER文
データ定義の変更 を実行する命令文。
※ テーブル定義を変更する ALTER TABLE など。

DROP文
データ定義の削除 を実行する命令文。
※ テーブル定義を削除する DROP TABLE など。

TRUNCATE文
データの全削除 を実行する命令文。
※ テーブルデータを全削除する TRUNCATE TABLE など。

5. データ操作言語:SQL-DML(Data Manipulation Language)


既存のテーブルやビューに対して、データを操作する命令言語で、以下の命令文を用いたSQLを指す。

SELECT文 (検索)
レコードの検索(抽出) を実行する命令文。
以下、SELECT文 に指定できる抽出オプション。

構文 意味
FROM対象テーブルの指定
INNER JOIN親テーブル(FROM)と内部結合(※)
OUTER JOIN親テーブル(FROM)と外部結合(※)
WHERE検索条件の指定
GROUP BYグループ化(特定条件で集計)の指定
HAVINGグループ化後の検索条件の指定
ORDER BY並び順の指定
DISTINCT抽出結果から重複除く指定
※ 親テーブル(FROM)を土台とする LEFT OUTER JOIN と結合するテーブルを土台とする RIGHT OUTER JOIN がある。

INSERT文 (新規登録)
レコードの挿入(新規登録) を実行する命令文。
INSERT INTO の後に 対象テーブル名フィールド名 を指定し、末尾に 設定値 を指定する。
設定値 に関しては、値を直接指定する VALUES と抽出結果を設定する SELECT がある。

UPDATE文 (更新)
レコードの更新 を実行する命令文。
UPDATE の後に 対象テーブル名 を指定し、SET に更新する フィールド名設定値 を指定する。
末尾に WHERE で更新対象の条件を記述し、対象範囲を指定する。

DELETE文 (削除)
レコードの削除 を実行する命令文。
DELETE の後に 対象テーブル名 を指定し、末尾に WHERE で削除対象の条件を記述し、対象範囲を指定する。

副問合せ (サブクエリ)
SQLステートメント内部に入れ子で入っているSQL文を指す。
※ SELECT文で使用されるケースがほとんど

また、共通テーブルを用いて、本体のSQLと入れ子にしているSQLを紐付けたSQLを 相関副問合せ という。

6. データ制御言語:SQL-DCL(Data Control Language)


アクセス権の制御や状態管理を操作する命令言語で、以下の命令文を用いたSQLを指す。

GRANT文
アクセス権限の付与 を実行する命令文。
データベース利用者に対して、テーブルやオブジェクトなどの操作権限を付与する。

REVOKE文
アクセス権限の取消 を実行する命令文。
GRANT文 で付与した権限を取消す。

COMMIT文
トランザクションの確定 を実行する命令文。
トランザクション内で発生したデータ更新を確定する。

ROLLBACK文
トランザクションの破棄 を実行する命令文。
トランザクション内で発生したデータ更新を破棄し、無かったことにする。

7. その他のデータ言語(SQL構文)


以下、上記データ言語以外の代表的なSQL構文。

集計関数
上記、GROUP BY(グループ化) の集計条件となる関数で以下の種類がある。

構文 意味
SUM合計
AVG平均
MAX最大
MIN最小
COUNTレコード数

比較演算子
条件に指定する比較演算子で、以下の種類がある。

演算子 意味
<小なり
>大なり
<=小なりイコール
>=大なりイコール
<>ノットイコール
IN(値1, 値2, 値3 …)値1 or 値2 or 値3 …(複数or条件)
BETWEEN 値1 TO 値2値1~値2の間
LIKE前方後方部分一致
EXISTSレコードの存在有無

集合演算
SELECT結果の和集合演算となる UNION がある。

構文 意味
UNION双方のSELECT結果から同一レコードを集約して統合する。
UNION ALL双方のSELECT結果から同一レコードを集約せず統合する。

カーソル
SELECT結果に対して、1レコードずつ順に読み出す仕組み。
SELECT の前に CURSOR FOR を指定し、結果を DECLARE で任意の変数に格納する。
OPEN でカーソルを開き、FETCH で1レコードずつ読込み、CLOSE でカーソルを閉じる。

ビュー (VIEW)
複数テーブルの特定項目を参照用として1テーブルで表現したもので、導出表 とも呼ばれる。

ビューは、主に参照用として利用されるが、下記の条件下で変更することも可能。
・複数のテーブルを結合していないこと。
・集計関数、DISTINCT、GROUP BYなどで複数レコードを 集約していない こと。

ストアドプロシージャ
データベース操作を一連の処理にまとめ、DBMS(データベース管理システム)に登録したものを指し、プロシージャ名で呼び出して使用する。

以上。


【参考文献】
瀬戸 美月 (2020) 『徹底攻略 応用情報技術者教科書』株式会社インプレス


Copyright UNISIA-SE All Rights Reserved.
s-hama@unisia-se.jp