U-style MySQL独学日記  Since2001 メニューに戻る SQLメニューに戻る
タイトルSELECT:選択(特定の行の選択)
文書管理番号 作成日 分類1 分類2 キーワード
SQL0007 2003-03-13 データ検索 選択 select

 本日は射影の学習をします。選択とは特定の行を選択することです。リレーショナルデータベースは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)