2014年4月24日木曜日

【SQL】データベースの基礎(SELECT文)

こんばんは☆

先日データベーススペシャリストを受けて来ました(^^ゞ 

結果はまぁまぁで受かるかどうかは微妙なとこです^^; 

ともかくせっかく勉強したのもあるので、基礎的なデータベースの知識としてアプリ開発でも使える
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 件のコメント:

コメントを投稿