id | item_name | price | keyword |
---|---|---|---|
1 | いちご | 180 | 赤い、甘い、ケーキ |
2 | りんご | 90 | 丸い、赤い、パイ |
3 | バナナ | 120 | パック、甘い、黄色 |
4 | ベリー | 200 | 袋入り、青い、眼精疲労 |
データベースに上記のデータが入っていることを前提に。テーブル名はmy_items
|
ORDER BY
データを昇順、降順で並べる
データベースのデータの並び順は、基本的にはidの小さい順(昇順)で並べられている。が、実際にはそうとも限らないので、OREDER BY
で並び替えが必要になることがあります。
/* 昇順 */
SELECT * FROM my_items ORDER BY id ASC;
/* 降順 */
SELECT * FROM my_items ORDER BY id DESC;
標準はASCなので、ASCは省略してもOK
WHEREと組み合わせる
例えば、価格が180円以下の商品を安い順に並べる場合は次のように
SELECT * FROM my_items WHERE price<=180 ORDER BY price;
さまざまな算出機能
/* 最も高価な商品を検索 */
SELECT MAX(price) FROM my_items;
/* 最も低価格な商品を検索 */
SELECT MIN(price) FROM my_items;
/* ヒットしたデータ数を取り出す */
SELECT COUNT(id) FROM my_items;
/* 価格の平均を算出 */
SELECT AVG(price) FROM my_items;
リレーション
リレーションは、複数のテーブルをその関連性からつないで1つのテーブルのように扱うことができる。
my_items
テーブル
id | maker_id | item_name | price | keyword |
---|---|---|---|---|
1 | 1 | いちご | 180 | 赤い、甘い、ケーキ |
2 | 2 | りんご | 90 | 丸い、赤い、パイ |
3 | 1 | バナナ | 120 | パック、甘い、黄色 |
4 | 3 | ベリー | 200 | 袋入り、青い、眼精疲労 |
makers
テーブル
id | name | address | tel |
---|---|---|---|
1 | ヤマダ | 東京都港区 | 0000 |
2 | サイトウ | 北海道小樽市 | 1111 |
3 | カワカミ | 神奈川県横浜市 | 2222 |
リレーションを使う
SELECT * FROM makers, my_items WHERE my_items.id=1 AND makers.id=my_items.maker_id;
実際に実行してみると、1つのテーブルで管理されているかのように関連付けて表示されます。
ポイントはFROM
。テーブルを,
で区切っていくつも指定できる。複数のテーブルからデータを一括で取り出せる。
WHEREでリレーションを張る
ただし、複数のテーブルを指定したら、必ずキーとなるカラムを使って結びつけないといけない。
... AND makers.id=my_items.maker_id;
これは、makersテーブルのidとmy_itemsテーブルのmake_idが一致したデータを検索するという意味。テーブル名に続けて.
でくっつけてカラム名を記述。
このように、複数のテーブルをつないでデータを検索することをリレーションを張るといいます。
テーブル名のショートカット
SELECT * FROM makers m, my_items i WHERE i.id=1 AND m.id=i.maker_id;
このように書くと、makersをmに、my_itemsをiに指定できる。見分けがつく短い名前がいいでしょう。