結合条件
複数テーブルをまきこんだときに必要
主キーと外部キーがどれとどれなのか
・主キー catsテーブルのc_id
・外部キー(外部にその内容がある) foodsテーブルのc_id
SELECT menu,price,cat
FROM foods,cats
WHERE cats.c_id = foods.c_id;
(WHEREの右辺と左辺はどっちでも逆でもいい)
正しく出た
複数テーブルが連携しているときは必ずこの結合条件を記述する
SELECT menu,price,cat
FROM foods,cats
WHERE cats.c_id = foods.c_id
AND price < 600;
という風にANDでつないで条件を増やすことも可能
SELECT menu,price,cat
FROM foods,cats
WHERE cats.c_id = foods.c_id
AND price < 600
ORDER BY price DESC;
さらに「降順」にする
いまはテーブルが2つだが、
3つなら結合条件も3つ必要
結合条件はすべてANDでつなぐように
麺類で800円以内を抽出値段の高い順
取り出すカラムmenu,price,cat
--->自分版
SELECT menu,price,cat
FROM foods,cats
WHERE cats.c_id=foods.c_id
AND price <=800
AND cat="麺類"
ORDER BY price DESC;
--->先生版
SELECT menu,price,cat
FROM foods,cats
WHERE cats.c_id=foods.c_id
AND price <=800
AND foods.c_id=1
ORDER BY price DESC;
どっちでもいいらしいが、先生版の方が処理は早いらしいので
プライマリキーを使った方が大型データでは速くて有利
ページング
すべてのページを全部出したりしない技術
グーグルで検索結果を全部出していたらえらいことだ
SELECT menu,price FROM foods;
たくさん出てきた
リミット句というのを使うが、これはMariaDBさん(mySQL)の方言的な。
他のところでは別の記述をするらしい
スタート位置が第一引数
取り出し件数が第二引数
リミットはよく使うらしい
SELECT menu,price FROM foods
LIMIT 取り出し位置,件数
0番からはじめる
先頭位置から取り出したくば0にする
5件欲しかったら5にする
SELECT id,menu,price FROM foods
LIMIT 0,5
→5件だけ取り出せた
2ページ目はどうするか?
たとえばグーグルの次へボタンを押したときの挙動だ
SELECT id,menu,price FROM foods
LIMIT 5,5
id6-10までが取り出された。(0はじまりだから)
SELECT id,menu,price FROM foods
LIMIT 10,5
これが3pめになる
値段の高い順10件 menu,price,cat
SELECT menu,price,cat
FROM foods,cats
WHERE foods.c_id=cats.c_id
ORDER BY price DESC
LIMIT 0,10
これですね、最初
SELECT menu,price,cat
FROM foods,cats
LIMIT 0,10
ORDER BY price DESC
と記述したらエラーになった
リミット句は最後に書くようだ
しかもWHERE句を飛ばしたので2つずつ表示されてた