こんばんは☆
先日データベーススペシャリストを受けて来ました(^^ゞ
結果はまぁまぁで受かるかどうかは微妙なとこです^^;
ともかくせっかく勉強したのもあるので、基礎的なデータベースの知識としてアプリ開発でも使える
SQLの形でわかりやすくまとめていきたいと思います。
今回SQLのSELECT文の例を載せ、データベースの用語を付け足します。
SELECT文だけで色々な例がわかるようにしていきますので(^^)
SELECT文
【選択】
SELECT * FROM score
| score |
|
|
|
|
|
|
|
id |
国語 |
算数 |
理科 |
社会 |
英語 |
|
|
1 |
10 |
20 |
30 |
40 |
50 |
|
|
2 |
15 |
15 |
15 |
15 |
15 |
|
|
3 |
50 |
40 |
30 |
20 |
10 |
|
|
4 |
30 |
30 |
30 |
30 |
30 |
|
|
5 |
20 |
40 |
30 |
20 |
40 |
|
|
|
|
|
|
|
|
|
テーブルscoreの全ての行(タプル)を取り出し、全ての列(属性)を表示します。
【射影】
SELECT person.id, person.name FROM person
| person |
|
|
|
id |
name |
|
|
1 |
sinji |
|
|
4 |
kenji |
|
|
6 |
akira |
|
|
|
|
|
テーブルscore の全ての行に含まれる列 id と列 name を表示します。
【選択】【等結合】【直積】
SELECT * FROM score as s, person as p
WHERE s.id = p.id
|
|
|
|
|
|
|
|
|
|
|
s.id |
国語 |
算数 |
理科 |
社会 |
英語 |
p.id |
name |
|
|
1 |
10 |
20 |
30 |
40 |
50 |
1 |
sinji |
|
|
4 |
30 |
30 |
30 |
30 |
30 |
4 |
kenji |
|
|
|
|
|
|
|
|
|
|
|
テーブルs(score)とテーブルp(person)を結合して、テーブルsとテーブルpに含まれる全ての列
を表示します。
(2つのテーブルを結合して全ての列を表示することを
等結合といいます)
(
=結合する列が重複して表示=集合演算の直積ともいう)
【選択】【射影】【自然結合】
SELECT s.*, p.name FROM score as s, person as p
WHERE a.id = b.id
|
|
|
|
|
|
|
|
|
|
id |
国語 |
算数 |
理科 |
社会 |
英語 |
name |
|
|
1 |
10 |
20 |
30 |
40 |
50 |
sinji |
|
|
4 |
30 |
30 |
30 |
30 |
30 |
kenji |
|
|
|
|
|
|
|
|
|
|
テーブルsとテーブルpを結合して、各テーブルに含まれる列を一部表示します。
(2つのテーブルを結合して結合する列の重複がなく表示することを
自然結合といいます)
(
=結合する列が重複なしに表示)
【選択】【和】
SELECT s.id FROM score as s
UNION
SELECT p.id FROM person as p
|
score |
|
person |
|
s+p |
|
|
id |
|
id |
|
id |
|
|
1 |
|
1 |
|
1 |
|
|
2 |
|
4 |
|
2 |
|
|
3 |
|
6 |
|
3 |
|
|
4 |
|
|
|
4 |
|
|
5 |
|
|
|
5 |
|
|
|
|
|
|
6 |
|
|
|
|
|
|
|
|
テーブルscoreの全ての行を取り出した結果に、テーブルpersonの全ての行を付け足します。
(これは関係代数(関係モデルにおける演算体系)の集合演算の
和に相当します。)
(
UNIONは重複行は1つだけ表示しますが、
UNION ALLだと重複行もそのまま表示します)
【選択】【射影】【差】
SELECT s.id FROM score as s
EXCEPT
SELECT p.id FROM person as p
|
score |
|
person |
|
s-p |
|
|
id |
|
id |
|
id |
|
|
1 |
|
1 |
|
2 |
|
|
2 |
|
4 |
|
3 |
|
|
3 |
|
6 |
|
5 |
|
|
4 |
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
テーブルsの列idを取り出した結果から、テーブルpの列idを取り去ります。
(これは関係代数(関係モデルにおける演算体系)の集合演算の
差に相当します。)
【選択】【射影】【積】
SELECT s.id FROM score as s
INTERSECT
SELECT p.id FROM person as p
|
score |
|
person |
|
s×p |
|
|
id |
|
id |
|
id |
|
|
1 |
|
1 |
|
1 |
|
|
2 |
|
4 |
|
4 |
|
|
3 |
|
6 |
|
|
|
|
4 |
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
テーブルsの列idを取り出した結果から、テーブルpの列idと同じ値のものだけを取り出します。
(これは関係代数(関係モデルにおける演算体系)の集合演算の
積に相当します。)
【選択】【商】
うまくできるSQL文が見つけられていないため、後で記載
| R |
|
|
|
S |
|
|
R÷S |
|
|
A |
B |
X |
|
A |
B |
|
X |
|
|
1 |
111 |
あ |
|
1 |
111 |
|
あ |
|
|
2 |
222 |
あ |
|
2 |
222 |
|
い |
|
|
1 |
111 |
い |
|
|
|
|
う |
|
|
2 |
222 |
い |
|
|
|
|
|
|
|
1 |
111 |
う |
|
|
|
|
|
|
|
2 |
222 |
う |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
テーブルRからテーブルSに含まれる列全てを持つ行を選択し、選択した行からテーブルSに
含まれていない列を取り出します。
(これは関係代数(関係モデルにおける演算体系)の集合演算の
商に相当します。)
SELECT文を用いて、
関係代数の集合演算(和、差、積、直積)
関係代数独自の演算(射影、選択、結合、商)
について合わせて説明しました。
SELECT文だけでも他にも色々と説明したいことがありますが、
それは、後日ここにまとめる形で追記していきます(´・ω・`)
他にわかりにくい箇所があったらおしえてくださいm(_ _)m
0 件のコメント:
コメントを投稿