これは大学の講義内容をまとめたものです。
リレーショナル「代数」とは
- 単一または複数のリレーションに対して定義された演算の体系
- 線形「代数」: 線形空間の元(ベクトル)に対する和, 内積などの演算の体系
- SQL言語の基礎
集合演算
和両立(union compatible)
- リレーションスキーマR(A1,A2,…,An)とS(B1,B2,…,Bn)が次の2つの条件を満たすとき, リレーションRとSは和両立である.
- RとSの次元が等しい(つまりn=m)
- 各i(1≤i≤n) に対して, 属性Ai と Biのドメインが等しい(つまりdom(Ai)=dom(Bi))
- 必ずしも属性名は同じでなくてよい
直積演算
- 直積, デカルト積(Curtesiun product): R×S={(u,v)|u∈R∧v∈S
集合演算の演習
(1) 下記に示すリレーションRaとRbに対して、和集合、共通集合、差集合の各演算結果を求めよ
| 商品番号 | 商品名 | 値段 |
|---|
| P1 | N1 | C1 |
| P2 | N2 | C2 |
| P5 | N5 | C5 |
| P6 | N6 | C6 |
| P8 | N8 | C8 |
| 商品番号 | 商品名 | 値段 |
|---|
| P1 | N1 | C1 |
| P3 | N3 | C3 |
| P4 | N4 | C4 |
| P7 | N7 | C7 |
| P8 | N8 | C8 |
結果
| 商品番号 | 商品名 | 値段 |
|---|
| P1 | N1 | C1 |
| P2 | N2 | C2 |
| P3 | N3 | C3 |
| P4 | N4 | C4 |
| P5 | N5 | C5 |
| P6 | N6 | C6 |
| P7 | N7 | C7 |
| P8 | N8 | C8 |
| 商品番号 | 商品名 | 値段 |
|---|
| P2 | N2 | C2 |
| P5 | N5 | C5 |
| P6 | N6 | C6 |
(2)下記に示すリレーションR1, R2に対して直積集合R1×R2を求めなさい
結果
| A | B | C |
|---|
| a | x | 1 |
| a | y | 1 |
| a | z | 1 |
| b | x | 1 |
| b | y | 1 |
| b | z | 1 |
| c | x | 1 |
| c | y | 1 |
| c | z | 1 |
関係演算
選択演算(selection)
リレーションRの中から条件式Fを満たすタプルを抽出する演算
σF(R)={t|t∈R∧PF(t)=true}
- 条件式Fの例
- A1=′文字列′,A2>30,A1=A2
- (年齢>20)∧(所属=′情報工学科′)
射影演算(projection)
リレーションRから, 指定した属性集合βのみを持つリレーションを抽出する演算
πβ(R)=t[β]|t∈R
結合演算(join)
二つのリレーションRとSを条件Fに従って一つのリレーションに結合する. 内部結合(inner join)とも呼ぶ.
R⋈FS=(u,v)|u∈R∧v∈S∧PF((u,v)=true)
等結合(equi-join)
結合演算の条件Fとして, 二つのリレーションの対応する属性が等しいことを用いるもの.
自然結合演算(natural join)
等結合で得られるリレーションから重複する属性を射影により取り除いたもの
- 交換法則と結合法則が成り立つ
R⋈S=S⋈(R⋈S)⋈T=R⋈(S⋈T)
外部結合演算(outer join)
一方のリレーションRのタプルのうち, もう一方のリレーションSに対応するタプルがないものは, 対応するSの属性値をNULLにする
- 左外部結合(left outer join)
左側のタプルを残す
- 右外部結合(right outer join)
右側のタプルを残す
- 完全外部結合(complete outer join)
両方のタプルを残す
集合演算の演習
(1)下記に示すリレーションRとSに対して, 結合条件を両リレーションにおける属性Bが等しいとした場合の内部結合, 自然結合, 左外部結合, 右外部結合, 完全外部結合の各演算結果を求めよ
| A | B |
|---|
| D001 | 001 |
| D002 | 002 |
| D003 | 002 |
| D004 | 004 |
| D005 | 005 |
結果
| A | B | B | C |
|---|
| D001 | 001 | 001 | a |
| D002 | 002 | 002 | b |
| D003 | 002 | 002 | b |
| D004 | 004 | 004 | d |
| A | B | C |
|---|
| D001 | 001 | a |
| D002 | 002 | b |
| D003 | 002 | b |
| D004 | 004 | d |
| A | B | B | C |
|---|
| D001 | 001 | 001 | a |
| D002 | 002 | 002 | b |
| D003 | 002 | 002 | b |
| D004 | 004 | 004 | d |
| D005 | 005 | NULL | NULL |
| A | B | B | C |
|---|
| D001 | 001 | 001 | a |
| D002 | 002 | 002 | b |
| D003 | 002 | 002 | b |
| NULL | NULL | 003 | c |
| D004 | 004 | 004 | d |
| A | B | B | C |
|---|
| D001 | 001 | 001 | a |
| D002 | 002 | 002 | b |
| D003 | 002 | 002 | b |
| NULL | NULL | 003 | c |
| D004 | 004 | 004 | d |
| D005 | 005 | NULL | NULL |
以下のリレーションRについて与えられた演算結果を求めよ
π日付,商品名(σ日付=2013/10/3(R))
| 管理番号 | 日付 | 社員番号 | 商品番号 | 商品番号 | 商品名 | 値段 |
|---|
| D001 | 2013/10/1 | P001 | C003 | C003 | P2 | 148,000 |
| D003 | 2013/10/1 | P005 | H001 | H001 | P3 | 39,800 |
| D004 | 2013/10/2 | P002 | M002 | M002 | P4 | 58,800 |
| D005 | 2013/10/2 | P001 | R001 | R001 | P1 | 49,800 |
| D006 | 2013/10/3 | P003 | C003 | C003 | P2 | 148,000 |
| D008 | 2013/10/3 | P002 | M002 | M002 | P4 | 58,800 |
結果
| 日付 | 商品名 |
|---|
| 2013/10/3 | P2 |
| 2013/10/3 | P4 |
商演算(division)
- R÷S=t|t∈πX−Y(R)∧∀u∈S:(t,u)∈R
- Sの各タプルに対して同じ値を持つRのタプルを選択
- Rの属性集合XからSの属性集合Yを除いた上で同じ値を持つタプルを集約
- Sのすべてのタプルを含んでいる場合に対応するタプルを選択
商演算は直積演算の逆演算
- 整数などの商演算と同じように(R×S)÷S=Rが成立
- (R÷S)×S=Rは成立しない(整数演算と同じ)
商演算の演習
次のリレーション、サークル活動、サークルに対して与えられた演算結果を求めなさい
サークル活動÷サークル
| 学生ID | サークル名 |
|---|
| 001 | 野球 |
| 002 | サッカー |
| 003 | 野球 |
| 003 | サッカー |
| 005 | サッカー |
| 005 | 空手 |
| 008 | 野球 |
| 008 | サッカー |
| 008 | 空手 |
| 011 | 野球 |
| 011 | サッカー |
| 011 | 空手 |
結果