忍者ブログ

からすまる日誌 mySQL

授業ノートのまとめ

序章(7) 複数のテーブル

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

序章(7) 複数のテーブル

結合条件
複数テーブルをまきこんだときに必要 
主キーと外部キーがどれとどれなのか
 

・主キー 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つずつ表示されてた
 
PR

コメント

ただいまコメントを受けつけておりません。

プロフィール

HN:
karasumaru
性別:
非公開

P R