(以下の表は、皆様のサイトではズレて表示されているかもしれません。すみません、技がなくて、表示をそろえられません。できれば、近い内に直します)
今日は、明日授業で使うデータベースへの質問(SQL)の例です。
部外者の方は、「EXCEL表への質問」だと思って下さい。
データベースへの質問「SELECT WHERE」命令の構文は次のとおりです。
SELECT a FROM b WHERE c
和訳は: bという表から、cという条件を満たす行(横)を探し、そのa列を表示しなさい、です。
例1:本の表の場合
“book_list”
+———–+——-+—————+——–+————-+
| book_id | title | author | price | comment |
+———-+——–+————–+———+————-|
| 1 | A | OOE | 1700 | funny |
| 2 | B | MISIMA | 2000 | sad |
| 3 | C | NATUME | 1400 | happy |
| 4 | D | MORI | 700 | serious |
| 5 | E | DAZAI | 1000 | sad |
| 6 | F | NATUME | 2400 | love |
+———-+——–+————-+———+————-+
質問例1
SELECT * FROM book_list WHERE price < 1500
和訳:book_listという表で、priceが1500円以下の本の全ての列を表示しなさい。
結果は、次のとおりです。
+———–+——+————-+——-+————-+
| book_id | title | author | price | comment |
+———-+——-+————-+——-+————–|
| 3 | C | NATUME | 1400 | happy |
| 4 | D | MORI | 700 | serious |
| 5 | E | DAZAI | 1000 | sad |
+———-+——-+————+———+————-+
(命令の * は、全ての列を表示せよという意味です)
質問例2
SELECT title,price FROM book_list WHERE author=’NATUME’
和訳:book_listという表で、著者が夏目の本の書名と値段を表示しまさい。
結果:
+——-+——-+
| title | price |
+——-+——-+
| C | 1400 |
| F | 2400 |
+——-+——-+
=========
SQLでは、データベースに対して、表の計算結果を求めることができます。
例2 :平均(average)を求める例
“score_table”
+—–+————–+——-+
| No | subject | score |
+—–+————-+——–+
| A01 | Science | 60 |
| A01 | Math | 50 |
| A01 | English | 40 |
| A02 | Science | 40 |
| A02 | Math | 70 |
| A02 | English | 30 |
+—–+————-+——-+
質問例1
学籍番号(No)がA01の人の平均点を求める場合のSQL文は次のようになります。
SELECT AVG(score) AS AVERAGE FROM score_table WHERE No = ‘A01’
和訳:score_table の学籍番号 = ‘A01’の人の「score」列の平均をとり、AVG(score)を「AVERAGE」と書き直して表示しなさい。
結果は下記のとおりです。
+—————+
| AVERAGE |
+————–+
| 50 |
+————–+
(ASは、別の名に書き換えなさい、という意味です。上の例では、AS指定しないと列名が「AVG(score)」となります)
質問例2 表の中身を(GROUP BY で)グループ化して計算処理することもできます。
GROUP BY の構文は次のとおりです。 SELECT 列名・・・ FROM 表名 GROUP BY 列名;
具体例
SELECT No,SUM(score) FROM score_table GROUP BY No;
和訳:学生ごとに合計点を求めNoとSUM(score)という列を表示しなさい。
+—–+—————-+
| No | SUM(score) |
+—–+—————–+
| A01 | 150 |
| A02 | 140 |
+—–+—————–+
=========
SQLでは、WHERE の中で LIKE を使って幅のある表現をすることができます。
最初の例の「本のリスト」表で、commentがsで始まるものを探すには次の様に指定します。
SELECT * FROM book_list WHERE comment LIKE ‘s%’
(%は、ワイルドカードということですね)