データベース検索

(以下の表は、皆様のサイトではズレて表示されているかもしれません。すみません、技がなくて、表示をそろえられません。できれば、近い内に直します)
今日は、明日授業で使うデータベースへの質問(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%’
(%は、ワイルドカードということですね)