教育サーバーのページ
オンラインテキスト目次
システムプログラミング演習
テーブルに保存されたデータを表示したり、検索する場合には、以下 のようなSELECTコマンドを利用する。
mysql> select 検索したい項目 from 検索対象であるテーブル名;
たとえば、以下のfruitテーブルに格納されているすべてのデータを 取り出して表示してみよう。
no | name | price |
---|---|---|
1 | apple | 100 |
2 | grape | 130 |
3 | banana | 90 |
4 | peach | 150 |
5 | meron | 600 |
そのためには、以下のようなSELECTコマンドを実行することが必要となる。 その実行結果については、次のようになる。
mysql> select * from fruit; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 1 | apple | 100 | | 2 | grape | 130 | | 3 | banana | 90 | | 4 | peach | 150 | +------+--------+-------+ 4 rows in set (0.00 sec) mysql>
たとえば、noフィールドとnameフィールドのような 特定のフィールドの情報を取り出したい場合には、 取り出したいフィールドを、 ,(カンマ)で区切り、 さらに続けて、FROM後に検索対象となるテーブルを 指定する。この場合のコマンドと実行結果は、 以下のようになる。
mysql> select no, name from fruit; +------+--------+ | no | name | +------+--------+ | 1 | apple | | 2 | grape | | 3 | banana | | 4 | peach | | 5 | meron | +------+--------+ 5 rows in set (0.00 sec)
SELECTコマンドには、条件式を指定して、検索することが可能 である。この場合には、FROMの後ろにWHERE節で条件を付加する。
mysql> select * from テーブル名 where 条件式;
フィールド名 比較演算子 データ
比較演算子の意味は、以下の表のとおりである。
式 | 内容 |
---|---|
フィールド名 = 検索キー(データ) | 検索キーと一致する |
フィールド名 < 検索キー(データ) | 検索キーより小さい |
フィールド名 > 検索キー(データ) | 検索キーより大きい |
フィールド名 >= 検索キー(データ) | 検索キー以上 |
フィールド名 <= 検索キー(データ) | 検索キー以下 |
フィールド名 <> 検索キー(データ) | 検索キーと一致しない |
実際に、fruitテーブルから条件式を指定して、レコードを取り出してみる。 まず、noフィールドの値が3のレコードを抽出する。その結果は 以下のようになる。
mysql> select * from fruit where no = 3; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 3 | banana | 90 | +------+--------+-------+ 1 row in set (0.00 sec) mysql>
priceフィールドの値が100以上のレコードを検索すると以下のようになる。
mysql> select * from fruit where price >= 100; +------+-------+-------+ | no | name | price | +------+-------+-------+ | 1 | apple | 100 | | 2 | grape | 130 | | 4 | peach | 150 | | 5 | meron | 200 | +------+-------+-------+ 4 rows in set (0.05 sec) mysql>さらに、文字列を対象に検索する。その場合には、 文字列の部分はシングルコーテーション(')で囲むことが 必要になる。 具体的には、nameフィールドの値が'banana'であるレコード を抽出している。
mysql> select * from fruit where name = 'banana'; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 3 | banana | 90 | +------+--------+-------+ 1 row in set (0.00 sec) mysql>
2つ以上の条件を論理演算子を組み合わせることで、 複数の条件を満足するレコードを取り出すことができる。 なお、論理演算子には、and, or, notの3種類がある。
2つ以上の条件を満足するレコードを検索するために用いる。 たとえば、noが4以上で、かつ、nameがmeronであるレコードを 検索してみる。 必要なコマンドと実行結果は以下のようになる。
mysql> select * from fruit where no >= 4 and name = 'meron'; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 5 | meron | 600 | +------+--------+-------+ 1 row in set (0.00 sec) mysql>
2つ以上の条件のうちどれかいづれかの 条件が成り立つレコードを検索するために用いる。 たとえば、noフィールドの値が4、または、nameフィールドの値が meronであるレコードを検索するためのコマンドとその実行結果は 以下のようになる。
mysql> select * from fruit where no >= 4 or name = 'meron'; +------+-------+-------+ | no | name | price | +------+-------+-------+ | 4 | peach | 150 | | 5 | meron | 600 | +------+-------+-------+ 2 rows in set (0.03 sec) mysql>
not演算子に続く検索条件が成立しないレコードを検索する ために利用する。たとえば、noが2または5でないレコードを 検索するために必要なコマンドとその実行結果は、次のようになる。
mysql> select * from fruit where not(no = 2 or no = 5); +------+--------+-------+ | no | name | price | +------+--------+-------+ | 1 | apple | 100 | | 3 | banana | 90 | | 4 | peach | 150 | +------+--------+-------+ 3 rows in set (0.00 sec) mysql>
mysql> select * from テーブル名 where 条件式 like パターン;
LIKE演算子では、以下のようなワイルドカード文字が指定できる。 なお、これらの文字は半角で使用する。
文字 | 意味 |
---|---|
% | 任意のn文字(nは0文字以上)に一致 |
_ | 任意の1文字に一致 |
パターン検索として、まず、priceが100代のレコードを検索してみよう。 必要となるコマンドとその実行結果を以下に示す。
mysql> select * from fruit where price like '1__'; +------+-------+-------+ | no | name | price | +------+-------+-------+ | 1 | apple | 100 | | 2 | grape | 130 | | 4 | peach | 150 | +------+-------+-------+ 3 rows in set (0.01 sec) mysql>
次に、%を使って上記の検索をおこなう。そのために必要となるコマンド と実行結果を以下に示される。
mysql> select * from fruit where price like '1%'; +------+-------+-------+ | no | name | price | +------+-------+-------+ | 1 | apple | 100 | | 2 | grape | 130 | | 4 | peach | 150 | +------+-------+-------+ 3 rows in set (0.01 sec) mysql>
さらに、LIKE演算子とnot演算子を使って、 nameの文字列のなかにaが含まれていないレコードを検索してみよう。 必要となるコマンドとその実行結果を以下に示す。
mysql> select * from fruit where name not like '%a%'; +------+-------+-------+ | no | name | price | +------+-------+-------+ | 5 | meron | 600 | +------+-------+-------+ 1 row in set (0.00 sec) mysql>
検索結果の表示件数を制限するためには、limitを利用する。 その場合の書式を以下に示す。
mysql> select 表示するフィールド名 from テーブル名 limit 表示件数; mysql> select 表示するフィールド名 from テーブル名 limit 表示開始位置, 取り出したい件数;
最初の書式に従って、表示件数を指定すると、検索の最初の行から指定された件数 分だけ表示される。以下では、3件のデータを順番に表示するための コマンドとその実行結果が示される。
mysql> select * from fruit limit 3; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 1 | apple | 100 | | 2 | grape | 130 | | 3 | banana | 90 | +------+--------+-------+ 3 rows in set (0.00 sec) mysql>
2番目の書式に従って、2件目から3件のデータを表示させてみよう。 ただし、表示開始位置は始点を0として数える。 必要なコマンドとその実行結果は、次のようになる。
mysql> select * from fruit limit 1,3; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 2 | grape | 130 | | 3 | banana | 90 | | 4 | peach | 150 | +------+--------+-------+ 3 rows in set (0.00 sec) mysql>
番号やIDなどキーにして小さい順に並べることを昇順に並べるという。 また、大きい順に並べることを降順に並べるという。
その場合の書式を以下に示す。
mysql> select 表示するフィールド名 from テーブル名 order by 並び替え対象のフィールド名; mysql> select 表示するフィールド名 from テーブル名 order by 並び替え対象のフィールド名 desc;
まず、前者の書式に従い、fruitテーブルをpriceフィールドで昇順に 並び替えてみよう。 必要なコマンドと実行結果は以下のようになる。
mysql> select * from fruit order by price; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 3 | banana | 90 | | 1 | apple | 100 | | 2 | grape | 130 | | 4 | peach | 150 | | 5 | meron | 600 | +------+--------+-------+ 5 rows in set (0.03 sec) mysql>
次に、後者の書式に従い、fruitテーブルをpriceフィールドで 降順に並び替えてみよう。 必要なコマンドと実行結果は以下のようになる。
mysql> select * from fruit order by price desc; +------+--------+-------+ | no | name | price | +------+--------+-------+ | 5 | meron | 600 | | 4 | peach | 150 | | 2 | grape | 130 | | 1 | apple | 100 | | 3 | banana | 90 | +------+--------+-------+ 5 rows in set (0.00 sec) mysql>
数値や文字列の範囲を指定し、そこに含まれるデータを検索する ためには、BETWEEN ... AND ....コマンドを利用する。 その場合の書式を以下に示す。
mysql> select 表示するフィールド名 from テーブル名 where 範囲指定対象のフィールド名 between 条件1 and 条件2;
ここでは、priceが100から200までのレコードを検索してみよう。 必要となるコマンドと実行結果を以下に示す。
mysql> select * from fruit where price between 100 and 200; +------+-------+-------+ | no | name | price | +------+-------+-------+ | 1 | apple | 100 | | 2 | grape | 130 | | 4 | peach | 150 | +------+-------+-------+ 3 rows in set (0.03 sec) mysql>なお、範囲に文字列を指定する場合には、'(シングルクオーテーション)で 文字列を囲むことが必要である。
また、BETWEEN ... AND ... と同じような範囲指定をINを使っておこなう ことができる。INを利用する場合には、連続しない数値や文字列を指定 できる。コマンドの形式は以下のようになる。
mysql> select 表示するフィールド名 from テーブル名 where 範囲指定対象のフィールド名 in (条件1, 条件2, ...);
次の例では, priceフィールドの値が100か、200か、300のいづれかの場合に 検索をおこなってみよう。そのために必要となるコマンドとその実行結果を 以下に示す。
mysql> select * from fruit where price in(100, 200, 300); +------+-------+-------+ | no | name | price | +------+-------+-------+ | 1 | apple | 100 | +------+-------+-------+ 1 row in set (0.06 sec) mysql>
問題-0
問題-2
問題-3
問題-4
問題-5
問題-6
問題-7
問題-8
問題-9
no | name | price |
---|---|---|
1 | watermeron | 2000 |
2 | pineapple | 500 |
3 | strawberry | 500 |
4 | cherry | 1500 |
5 | peach | 400 |