■ 関係演算
関係演算とは
- 関係代数独自の演算であり、以下の4種類がある。
射影
- 表の中から指定した列を取り出す演算である。
[社員]
社員コード | 社員名 | 電話番号 |
---|---|---|
00001 | ホムペ太郎 | 03-0000-1111 |
00002 | ブログ次郎 | 06-9999-2222 |
00003 | ソシャ三郎 | 045-888-3333 |
SELECT 社員名,電話番号 FROM 社員;
[社員]
社員名 | 電話番号 |
---|---|
ホムペ太郎 | 03-0000-1111 |
ブログ次郎 | 06-9999-2222 |
ソシャ三郎 | 045-888-3333 |
選択
- 表の中から指定した行を取り出す演算である。
[社員]
社員コード | 社員名 | 電話番号 |
---|---|---|
00001 | ホムペ太郎 | 03-0000-1111 |
00002 | ブログ次郎 | 06-9999-2222 |
00003 | ソシャ三郎 | 045-888-3333 |
SELECT * FROM 社員 WHERE 社員コード = '00002';
[社員]
社員コード | 社員名 | 電話番号 |
---|---|---|
00002 | ブログ次郎 | 06-9999-2222 |
結合
- 共通の列を結合のキーとして、複数の表を結び付ける演算である。
- 結合には、等結合、自然結合、外部結合などがある。
[社員]
社員コード | 社員名 | 電話番号 | 所属コード |
---|---|---|---|
00001 | ホムペ太郎 | 03-0000-1111 | 01 |
00002 | ブログ次郎 | 06-9999-2222 | 01 |
00003 | ソシャ三郎 | 045-888-3333 | 02 |
[所属]
所属コード | 部署名 |
---|---|
01 | 情報発信部 |
02 | 情報共有部 |
◇等結合
- キー列は演算結果に重複して取り出される。
- 等結合演算 = 直積演算 + 選択演算 で表現できる。
SELECT * FROM 社員,所属 WHERE 社員.所属コード = 所属.所属コード;
社員コード | 社員名 | 電話番号 | 社員.所属コード | 所属.所属コード | 部署名 |
---|---|---|---|---|---|
00001 | ホムペ太郎 | 03-0000-1111 | 01 | 01 | 情報発信部 |
00002 | ブログ次郎 | 06-9999-2222 | 01 | 01 | 情報発信部 |
00003 | ソシャ三郎 | 045-888-3333 | 02 | 02 | 情報共有部 |
◇自然結合
- 等結合の演算結果から重複する列を排除して取り出される。
- 自然結合演算 = 直積演算 + 選択演算 + 射影演算 で表現できる。
SELECT 社員コード,社員名,電話番号,所属.所属コード,部署名 FROM 社員,所属 WHERE 社員.所属コード = 所属.所属コード; ※ SELECT * FROM 社員 NATURAL JOIN 所属; でも可。
社員コード | 社員名 | 電話番号 | 所属コード | 部署名 |
---|---|---|---|---|
00001 | ホムペ太郎 | 03-0000-1111 | 01 | 情報発信部 |
00002 | ブログ次郎 | 06-9999-2222 | 01 | 情報発信部 |
00003 | ソシャ三郎 | 045-888-3333 | 02 | 情報共有部 |
◇外部結合
- 片方または両方のテーブルに存在するすべての行を対象とする結合である。
- 結合する一方の表に値のないデータも取り出せる。
[社員]
社員コード | 社員名 |
---|---|
00001 | ホムペ太郎 |
00002 | ブログ次郎 |
00003 | ソシャ三郎 |
[受講]
社員コード | 研修名 |
---|---|
00001 | HTMLタグ入門 |
00001 | Wiki文法入門 |
00002 | Wiki文法入門 |
SELECT 社員.社員コード,社員名,研修名 FROM 社員 LEFT JOIN 受講 ON 社員.社員コード = 受講.社員コード;
※左外部結合の例である。
社員コード | 社員名 | 研修名 |
---|---|---|
00001 | ホムペ太郎 | HTMLタグ入門 |
00001 | ホムペ太郎 | Wiki文法入門 |
00002 | ブログ次郎 | Wiki文法入門 |
00003 | ソシャ三郎 |
商
- データベースの割り算であり、表Aと表Bの商は、A÷Bと表す。
- A÷Bを求める手順は以下の通り。
◇表Bが1行の場合
[表A]
社員コード | 社員名 | 資格コード |
---|---|---|
00001 | ホムペ太郎 | 01 |
00002 | ブログ次郎 | 01 |
00001 | ホムペ太郎 | 02 |
00002 | ブログ次郎 | 03 |
[表B]
社員コード | 社員名 |
---|---|
00001 | ホムペ太郎 |
まず、表Bとまったく同じ行を抜き出す。
社員コード | 社員名 | 資格コード |
---|---|---|
00001 | ホムペ太郎 | 01 |
00001 | ホムペ太郎 | 02 |
次に、表Bの属性を取り除く。
資格コード |
---|
01 |
02 |
◇表Bが2行以上の場合
[表A]
社員コード | 社員名 | 資格コード |
---|---|---|
00001 | ホムペ太郎 | 01 |
00002 | ブログ次郎 | 01 |
00001 | ホムペ太郎 | 02 |
00002 | ブログ次郎 | 03 |
[表B]
社員コード | 社員名 |
---|---|
00001 | ホムペ太郎 |
00002 | ブログ次郎 |
まず、表Bとまったく同じ行を抜き出す。
社員コード | 社員名 | 所属コード |
---|---|---|
00001 | ホムペ太郎 | 01 |
00002 | ブログ次郎 | 01 |
00001 | ホムペ太郎 | 02 |
00002 | ブログ次郎 | 03 |
次に、表Bの属性以外で同じ値の行を抜き出す。
社員コード | 社員名 | 所属コード |
---|---|---|
00001 | ホムペ太郎 | 01 |
00002 | ブログ次郎 | 01 |
次に、表Bの属性を取り除く。
資格コード |
---|
01 |
01 |
同じ値は1行にまとめる。
資格コード |
---|
01 |
商の結果×表Bで検算し、表Aに同じ行があれば正しい商演算結果である。
【試験対策】
◇内部結合
- FROM句:直積、WHERE句:選択、SELECT句:射影、で行なう。
- テーブル間の値の一致に基ずく。
◇外部結合
- 左外部結合が主であるが、右外部結合、完全外部結合も簡単に覚えておくこと。