今回の記事は応用情報のデータベース分野の用語と頻出SQL文をまとめた記事です。データベース分野は午前では必須ですし、午後も図とよく問われるSQLを押さえておけば簡単ですので是非押さえておきましょう。押さえておく範囲は狭いですが、午前午後両方に出てくるお得な分野ですので、応用情報を受ける方は是非参考にしてみてください。
データベース用語まとめ
データベースの用語は基本的に午前試験で問われます。午後試験のデータベース分野では用語が問われている回は私が実施した過去15回分程度にはなかったような気がします。
午前の用語で聞かれるのは下記ではないでしょうか?
- データベースの性質
- スキーマ構造
- 正規化
- ビックデータ
もちろんSQLも毎回出題されていますので、SQLに関しては次の章にまとめております。では順番に用語をご紹介していきます。
データベースの性質
ACID
データベースのトランザクション処理を行う上で必要不可欠とされる4つの性質(Atomicity・Consistency・Isolation・Durability)の頭文字を並べた言葉。
- 原子性:トランザクションはすべて実行されるか一つも実行されない状態。
- 一貫性:トランザクション前後で整合性が保たれる
- 独立性:トランザクションは独立している
- 永続性:トランザクションで実行されたデータベース操作は永続敵である。(耐久性ともいう)
スキーマ構造
概念スキーマ
データベース化対象の業務とデータの内容を論理的なデータモデルとして表現したもの。概念スキーマを記述するために記号系にはリレーショナルモデルの他にも、ネットワークモデル、階層型モデルなどがある。リレーショナルモデルではE-R図の作成、表定義、表の正規化が概念スキーマに相当する。
外部スキーマ
概念スキーマで定義されたデータモデル上に利用者ごとの目的に応じた見方を表現したもの。リレーショナルモデルのビューやネットワークモデルのサブスキーマが外部スキーマに相当する。
内部スキーマ
概念スキーマで定義されたデータモデルを記憶装置上にどのような形式で格納するかを表現したもの。ファイル編成やインデックスの設定などが内部スキーマに相当する。
スタースキーマ
複数の外部参照を1つ(あるいはごく少数)のテーブルに集約するスキーマ。ファクトテーブル(中心)とディメンションテーブル(その他で構成。
データディクショナリ
データディクショナリ(DD)は、データベースのメタデータやデータ定義情報を効率よく管理する情報の保管庫。他のデータベースと同じく表とビューで構成されていて次のような情報が格納されています。(概念スキーマ、外部スキーマ、内部スキーマとそれらの変換定義情報など)
正規化
第1正規形
行に繰り返しがない。
第2正規形
第1正規形を満たし、主キーに部分関数従属する属性が存在しない状態。
第3正規形
社員番号→所属部門コード,所属部門コード→所属部門名というように主キーに対して推移的に非キー属性の値が決まるものがある場合で、下記のような主キーに対しての推移的な関数従属を排除するためにその属性を別表に移したもののことを第3正規形という。
(社員番号,氏名,所属部門コード)
(所属部門コード,所属部門名)
第2正規形を満たし、かつ、主キーからの推移的関数従属が存在しない状態である。
ビックデータ
ビックデータ
- データマイニング
大量のデータを分析し,単なる検索だけでは分からない隠れた規則や相関関係を見つけ出す - データマート
データウェアハウスに格納されたデータから特定の用途に必要なデータだけを取り出し,構築する。 - OLAP(Online Analytical Processing)
データウェアハウスやデータマートからデータを取り出し,多次元分析を行う。
スライシング(多次元データベースをある断面で切り取って2次元の表にする)
ダイシング(スライシングは多次元データベースの中にある縦横軸を指定して、2次元の表にする)
ドリリング(多次元データベースの一部を集計する) - OLTP
基幹システムなどのリアルタイム処理の手法です。ユーザーによるアクションへの即時対応が目的 - データレイク
必要に応じて加工するために,データを発生したままの形で格納する。
Hadoop(ハドゥープ)
ビッグデータの取り扱いを目的とした分散処理のフレームワーク。
その他
NOSQL
- ドキュメント指向DB
データ項目の値として階層構造のデータをドキュメントとしてもつことができる。また,ドキュメントに対しインデックスを作成することもできる。 - グラフ指向DB
ノード,リレーション,プロパティで構成され,ノード間をリレーションでつないで構造化する。ノード及びリレーションはプロパティをもつことができる。 - キーバリューストア(KVS)
一つのキーに対して一つの値をとる形をしている。値の型は定義されていないので,様々な型の値を格納することができる。 - カラム指向DB
一つのキーに対して複数の列をとる形をしている。関係データベースとは異なり,列の型は固定されていない。
導出表
1つ以上の基礎となる実表(DBに実データを持つ表)から関係演算・集合演算といったSQL問合せによって作成される仮想的な表全般を指します。
is-a(汎化-特化)関係
is-a(汎化-特化)関係「動物-犬」や「家電-テレビ」などのように「…は、○○である」で表される関係。
part-of(集約-分解)関係
part-of(集約-分解)関係「コンピュータ-CPU」や「自転車-サドル」などのように「…は、○○の一部である」で表される関係。
ネットワークモデル
ネットワークモデルは、多対多のレコード関係を表現するのに適している。親は複数の子を持つことができ、子も複数の親を持つことができるという関係を網状に表すネットワークモデルの説明です。
階層モデル
データを木構造で構成し、あるレコードには1つの親レコードと複数の子レコードが関連をもつモデルです。親と子は1対多の関係で関連付けられます。
関係モデル
関係モデルは、データを二次元の表として管理するモデルです。複数の表は属性の値で関連付けられます。
ボイス・コッド正規形
ボイス・コッド正規形は,関係モデルで使用される形式である。ボイス・コッド正規形は第3正規形の条件を満たしつつ、すべての列が主キーに完全関数従属で、他に完全関数従属関係がないものを言います。
2相コミットプロトコル
トランザクションを他のサイトに更新可能かどうかを確認する第1相と、更新を確定する第2相の2つのフェーズに分け、各サイトのトランザクションをコミットもロールバックも可能な中間状態にしてから、全サイトがコミットできる場合だけトランザクションをコミットする方法。原子性・一貫性を保証。
コーパス
自然言語の文章を大量に収集したデータベース。
ライブマイグレーション
仮想サーバを停止させずに物理サーバ間を仮想サーバに移動することが可能。
ペトリネット
ペトリネット(Petri Net)は、プレース、トランジション、トークンの3つの要素を使用した有向グラフでシステムの動作を記述する図法です。
CMDB(Configuration Management Database)
構成管理データベースのことで、ITサービスの提供に必要な「資産」と「構成」の情報を一元管理するデータベースです。
頻出SQL文まとめ
SQL文に関しては午前・午後両方で問われます。午前試験では基本的にはSQLを実行した後の結果やSQLの機能や関数の意味などが問われることが多いです。ただ、かなり回数は少ないですが、SQLを空欄に当てはめるなども出題されていた(過去15年分しか確認していませんが。。)ので是非押さえておきましょう。
下記の流れで紹介していきます。
- SQL関連用語
- 頻出SQL文
SQL関連用語
ストアドプロシージャ(Stored Procedure)
一連の処理手順をプログラムとしてまとめて実行できる処理モジュールをDBMS上に用意したもの。
VARCHAR・CHAR
CHAR(10)は常に10バイトでそれ以下のバイトの場合はバイト数がその数に減る。そのバイト数は固定。VARCHARは可変長。補足:日本語は2バイト。
直積
直積はデータ操作で、2つの関係(表)に含まれる要素のすべての組合せから成る表のことです。
べき等
複数回同一操作をしても、一回しか実行しなくても結果が同じになる(selectなど)
レプリケーション
一つのノードへのレコード挿入を他のノードでも実行する
頻出SQL文
基本SQL
最低限CRUDは抑えときましょう。
create table テーブル名 (id int, name varchar(10)); -- テーブル作成
insert into テーブル名 ... -- データ追加
select * from テーブル名 ... -- データ検索
update テーブル名 set = ... -- データ更新
delete テーブル名 where ... -- データ削除
... where id = 1 -- where句 条件で結果を絞る
... order by id -- order by句 条件でソート
GROUP BY句
ほぼ確実に出題されている気がします。SQLノータッチの方は答えづらいので、少しでも勉強している方はかなり簡単に回答できます。基本的にgroupごとに結果をまとめて取得するものです。
クラス 点数
a 10
a 20
b 30
a 30
b 30
select クラス,avg(点数) from 上のテーブル group by クラス
------
a 20
b 30
------
ちなみにgroup byしたデータを絞る場合はwhereでなく、「having」を使う。これも良く出る。
クラス 点数
a 10
a 20
b 30
a 30
b 30
select クラス,avg(点数) from 上のテーブル group by クラス having クラス = a
------
a 20
------
最後に、group byを実行するとselect分で出力できる項目にはgroup by でグルーピングした項目と計算系(sumやavg、countなど)のみです。このルールで午前午後かなりの問題が解けます。
クラス 点数 先生
a 10 aaaさん
a 20 aaaさん
b 30 bbbさん
a 30 aaaさん
b 30 bbbさん
select クラス,avg(点数),先生 from 上のテーブル group by クラス,先生
------
a 20 aaaさん
b 30 bbbさん
------
上記のように先生を結果に出力したい場合は、group by句にそのカラムも追加する必要があります。
group by長くなりましたがかなり重要。
計算系SQL
先ほどのgroup by句でも説明に使いましたがこちらもほぼ頻出です。
select count(*) from ... -- データの個数
select max(項目) from ... -- 点数などの項目の一番上のデータを取得
select sum(*) from ... -- 点数などの項目合計を取得
select avg(*) from ... -- 点数などの項目の平均点を取得
in句
こちらもほぼ頻出。条件の中にデータが含まれているかの条件句です。
select count(*) from テーブル where 点数 in (0,1,2,3) -- 0,1,2,3の中に含まれている点数のデータが抽出される
exists句
こちらもほぼ頻出。条件の中にデータが存在しているかの条件句です。
select count(*) from テーブル where exists 点数 < 30 -- 30以下の点数のデータ抽出される
副問い合わせ(サブクエリ)
こちらも必ず出ます。かっこで囲ってSELECT文の結果を使います。みた方が早いです。
-- 通蔵のselect文
select id, name from テーブル where id in (0,1,2) ;
-- サブクエリを含むselect文(上記とやっていることは同じだがin句の中身をselect文で取得している)
select id, name from テーブル where id in (select id from テーブル where id < 3);
-- 通常のinsert文
insert into テーブル (id, name) values (1, 'aaa');
-- サブクエリを使用したinsert
insert into テーブル (id, name) values (select id, name from 取得元テーブル where id < 100);
join句
こちらも必ず出題されます。テーブルを結合します。結合条件が違うという差があります。
- inner join:内部結合
- left join:外部結合
ここまでがかなり良く問われる頻出SQLです。
頻出ではないがよく聞かれるSQL
カラム定義
create文が出ることまあまああり、この辺りのカラム定義で制約をつけるSQLは知っておく方が良いです。主キー、一意制約、外部キー、not Null、デフォルト値セット、参照、自動採番をカラムに設定するCREATE文です。
CREATE TABLE SAMPLETABLE
(
no int auto_increment
id int PRIMARY KEY,
name varchar(50) UNIQUE NOT NULL,
tel varchar(12) default '000-0000-0000'
FOREIGN KEY(refNo) REFERENCES anotherTable(refNo)
);
between句
こちらもほぼ頻出。条件の間にデータが存在しているかの条件句です。
select count(*) from テーブル where between 点数 40 and 50 -- 40点以上50点以下の点数のデータ
GRANT
稀に聞かれます。GRANT文は、特定のユーザに表などのデータベースオブジェクトに対する権限を付与するSQL文です。
GRANT {権限3,権限2} ON テーブル TO ユーザ;
GRANT SELECT, UPDATE ON table1 TO user1;
REVOKEで権限削除。使用方法はGRANTの部分を置き換えるのみです。
念の為押さえておくべきSQL
CREATE ASSERTION
こちらは午前の用語で出ていたような気がします。CREATE ASSERTION文は、スキーマ内の複数のテーブルに対して制約を適用するSQL文です。テーブルAの合計がテーブルB・Cの合計になるという制約をつけるSQL。
CREATE ASSERTION totalCount
CHECK (SELECT COUNT(*) FROM TableA) = (SELECT COUNT(*) FROM TableB) + (SELECT COUNT(*) FROM TableB);
CASCADE
こちらは午前の用語で出ていたような気がします。参照データの同時削除を行う。
オン.com参照してます。

ALTER TABLE
出ているのをみたことはないですが、念の為。カラムの追加・更新・削除などで使用。
-- 単一カラム追加
ALTER TABLE sample ADD COLUMN addCol VARCHAR(8);
-- 複数の場合
ALTER TABLE sample ADD (addCol1 VARCHAR(8),addCol2 VARCHAR(8));
-- カラムの定義変更(複数は上記と同じ要領)
ALTER TABLE sample MODIFY COLUMN addCol VARCHAR(8);
-- カラム削除(複数は上記と同じ要領)
ALTER TABLE sample DROP COLUMN address;
以上で今回の記事は終了です。随時更新していきます。他にも応用情報の分野ごとのまとめ記事を作成しているので是非参考にしてみてください。
コメント