本日は射影の学習をします。選択とは特定の行を選択することです。リレーショナルデータベースは2次元の表ですから、行と列をもちます。射影は縦つまり列を選択し、選択は列を選択することをさします。なんだか日本語へんですね。しかししょうがありません。これで覚えましょう。
+------+------------+------------+-------+ | no | date | customer | sales | +------+------------+------------+-------+ | 1 | 2003-03-11 | 神奈川商事 | 2000 | | 2 | 2003-03-11 | 相模原商事 | 3000 | | 3 | 2003-03-11 | 八王子商事 | 3000 | | 4 | 2003-03-14 | 八王子商事 | 5000 | | 5 | 2003-03-15 | 神奈川商事 | 2000 | | 6 | 2003-03-15 | 相模原商事 | 3000 | +------+------------+------------+-------+
|
絞込みは簡単で通常のSelect文にWhereで条件を指定します。
構文は SELECT 列名1、列名2、列名3・・・ FROM テーブル名称 where 列名(任意) = 抽出条件;です。早速試してみます。
3月11に取引のあったデータを選択(抽出)してみました。Where以下の指定でdateが条件指定に使う列です。この中で =右側の 値にあうものだけ抽出します。
mysql> select * from test_sales where date = '2003-03-11'; +------+------------+------------+-------+ | no | date | customer | sales | +------+------------+------------+-------+ | 1 | 2003-03-11 | 神奈川商事 | 2000 | | 2 | 2003-03-11 | 相模原商事 | 3000 | | 3 | 2003-03-11 | 八王子商事 | 3000 | +------+------------+------------+-------+
|
今度は神奈川商事の取引はどれぐらいあるのだろう?ということで列にcustomerで条件を’神奈川商事’にしてみました。神奈川商事の取引は11日と15日あることがわかります。
mysql> select * from test_sales where customer = '神奈川商事';
+------+------------+------------+-------+
| no | date | customer | sales |
+------+------------+------------+-------+
| 1 | 2003-03-11 | 神奈川商事 | 2000 |
| 5 | 2003-03-15 | 神奈川商事 | 2000 |
+------+------------+------------+-------+
2 rows in set (0.00 sec)
|
条件指定は=だけでなく不等号も使えます。下記では条件に > を使ってみました。値に2000が入っていません。 > はより上という意味で指定した数値をふくみません。
mysql> select * from test_sales where sales > 2000; +------+------------+------------+-------+ | no | date | customer | sales | +------+------------+------------+-------+ | 2 | 2003-03-11 | 相模原商事 | 3000 | | 3 | 2003-03-11 | 八王子商事 | 3000 | | 6 | 2003-03-15 | 相模原商事 | 3000 | | 4 | 2003-03-14 | 八王子商事 | 5000 | +------+------------+------------+-------+ 4 rows in set (0.00 sec)
|
次は条件指定に >= を使ってみました。今度は2000も含まれています。これを以上といいます。このように > はより上、 >=は以上といい指定した値を含むか、含まないかで違うので注意が必要です。
mysql> select * from test_sales where sales >= 2000; +------+------------+------------+-------+ | no | date | customer | sales | +------+------------+------------+-------+ | 1 | 2003-03-11 | 神奈川商事 | 2000 | | 2 | 2003-03-11 | 相模原商事 | 3000 | | 3 | 2003-03-11 | 八王子商事 | 3000 | | 6 | 2003-03-15 | 相模原商事 | 3000 | | 5 | 2003-03-15 | 神奈川商事 | 2000 | | 4 | 2003-03-14 | 八王子商事 | 5000 | +------+------------+------------+-------+
|
以下に等号 不等号をまとめました。
比較条件
= |
等しい、同じ |
> |
より大きい(指定した値は含まない) |
< |
より小さい(指定した値は含まない) |
>= |
以上(指定した値を含む) |
<= |
以下(指定した値を含む) |
<>または!= |
等しくない |
んっ?等しくないの部分が気になります<> と!=はどういうちがいなのでしょうか?早速テストです。テストしてみましたが、結果は一緒でした。ということでどうちがうのかはわかりませんでした。今後の課題です。しかし違いはないのかもしれません。
mysql> select * from test_sales where sales <> 2000; +------+------------+------------+-------+ | no | date | customer | sales | +------+------------+------------+-------+ | 2 | 2003-03-11 | 相模原商事 | 3000 | | 3 | 2003-03-11 | 八王子商事 | 3000 | | 6 | 2003-03-15 | 相模原商事 | 3000 | | 4 | 2003-03-14 | 八王子商事 | 5000 | +------+------------+------------+-------+ 4 rows in set (0.00 sec)
mysql> select * from test_sales where sales
!= 2000;
+------+------------+------------+-------+
| no | date | customer | sales |
+------+------------+------------+-------+
| 2 | 2003-03-11 | 相模原商事 | 3000 |
| 3 | 2003-03-11 | 八王子商事 | 3000 |
| 6 | 2003-03-15 | 相模原商事 | 3000 |
| 4 | 2003-03-14 | 八王子商事 | 5000 |
+------+------------+------------+-------+
4 rows in set (0.00 sec)
|
|