U-style MySQL独学日記  Since2001 メニューに戻る SQLメニューに戻る
タイトルselect文の使い方
文書管理番号 作成日 分類1 分類2 キーワード
SQL0003 2002-10-10 文法   select where between

今回はselect文を追求して学習します。

今回利用するテーブルを作成します。

stadydb=# create table report(
stadydb(# classNo int,
stadydb(# studentNo int,
stadydb(# studentName char(20),
stadydb(# English int,
stadydb(# Math int,
stadydb(# Japanese int
stadydb(# );
CREATE

前回のcreate table文を利用しています。特に問題はないと思います。

stadydb=# insert into report values(1,1,'1-1name',90,90,90);
INSERT 18755 1
stadydb=# insert into report values(1,2,'1-2name',30,80,40);
INSERT 18756 1
stadydb=# insert into report values(1,3,'1-3name',50,70,20);
INSERT 18757 1
stadydb=# insert into report values(1,4,'1-4name',50,60,70);
INSERT 18758 1
stadydb=# insert into report values(2,1,'2-1name',100,70,60);
INSERT 18759 1
stadydb=# insert into report values(2,2,'2-2name',100,60,40);
INSERT 18760 1
stadydb=# insert into report values(2,3,'2-3name',70,50,100);
INSERT 18761 1
stadydb=# insert into report values(2,4,'2-4name',100,20,20);
INSERT 18762 1

上記は作成したテーブルにデータを入れる作業をしています。これも前回やった通りです。特に問題はないと思いますが、studentnameのところで結果がわかりやすいようにclassNo-StudentNo nameという形で入力しました。

stadydb=# select * from report;
classno | studentno | studentname | english | math | japanese
---------+-----------+----------------------+---------+------+----------
1 | 1 | 1-1name | 90 | 90 | 90
1 | 2 | 1-2name | 30 | 80 | 40
1 | 3 | 1-3name | 50 | 70 | 20
1 | 4 | 1-4name | 50 | 60 | 70
2 | 1 | 2-1name | 100 | 70 | 60
2 | 2 | 2-2name | 100 | 60 | 40
2 | 3 | 2-3name | 70 | 50 | 100
2 | 4 | 2-4name | 100 | 20 | 20
(8 rows)

上記で入力したデータがきちんと入力できているかチェックします。前回同様Select * from テーブル名で全件出力しています。

stadydb=# select studentname,english from report;
studentname | english
----------------------+---------
1-1name | 90
1-2name | 30
1-3name | 50
1-4name | 50
2-1name | 100
2-2name | 100
2-3name | 70
2-4name | 100
(8 rows)

select文の新しい使い方です。
select文は select 列名、列名・・・ from テーブル名
とすることにより指定した列のみを抽出して表示することができます。今回の場合名前と英語の得点を見たい場合を想定して実行しました。

stadydb=# select studentname,english from report where english > 70;
studentname | english
----------------------+---------
1-1name | 90
2-1name | 100
2-2name | 100
2-4name | 100
(4 rows)

whereの使い方です。
whereは条件を指定できます。select 列名、列名・・・(もちろん*も使えます) from テーブル名 where 条件指定。
今回は英語が70点より上の人を条件指定しています。
ここで「より」と書きましたが、これは70点を含まないという意味です。70点を含ませたい場合は「>=」と指定します。これは「以上」といいます。

SQLで使える比較演算子  
等しい
より大きい
より小さい
>= 以上

<=

以下
<> 等しくない

上記は条件指定に使える比較演算子です。

stadydb=# select studentname,english from report where english >= 70;
studentname | english
----------------------+---------
1-1name | 90
2-1name | 100
2-2name | 100
2-3name | 70
2-4name | 100
(5 rows)

先ほどは70点より上(>)でしたが今回は以上にしました。70点の2−3nameさんが加わっています。

stadydb=# select studentname,english from report
stadydb-# where english >=50 and english <= 90;
studentname | english
----------------------+---------
1-1name | 90
1-3name | 50
1-4name | 50
2-3name | 70
(4 rows)

今度はANDを使って2つの条件式を入れています。ANDはその2つの条件どちらも満たすものを実行します。その反対でどちらか一方を指定したい場合はORを使います。

stadydb=# select studentname,english from report
stadydb-# where english between 50 and 90;
studentname | english
----------------------+---------
1-1name | 90
1-3name | 50
1-4name | 50
2-3name | 70
(4 rows)

上記は上のANDと同じ結果を得られます。
where 列名 Between A and B:指定した列名のA以上 B以下を実行します。数値の上限や下限がある場合に利用すると便利です。

stadydb=# select studentname,math from report
stadydb-# where math > 70 and classno = 1;
studentname | math
----------------------+------
1-1name | 90
1-2name | 80
(2 rows)

上記は異なる列名をwhere句の条件として指定しています。1クラスの数学が70より上の人、が選択されます。

 

stadydb=# select studentname,english,math,japanese from report
stadydb-# where math > 70 and english >70 and japanese >70;
studentname | english | math | japanese
----------------------+---------+------+----------
1-1name | 90 | 90 | 90
(1 row)

最後はwhere句で3つの条件式を入れてみました。きちんと実行されるので条件式は複数利用可能ということがわかりました。
上記の例では全ての科目が70点より上の優秀な人が抽出されました。