1 minute read

学んだこと

リレーションで複数テーブルを連結する

  • リレーションとはテーブル同士のつながりを意味する。
  • 例えば、同じテーブル内で品名と生産者名が存在していた場合
    • 生産者と品名を分けて管理をすることができれば、他のデータを追加するとなった場合もデータの管理がしやすく検索が容易になる。

実際に分けるとなった場合、どう分けるべきか

  • 生産者テーブルと販売テーブルと分ける
    • 生産者テーブルでは id,生産者名,住所,電話番号
    • 販売テーブルでは id,品名,価格,何個売れたか,生産者テーブル id
  • 生産者テーブル id を販売テーブルに入れておくことで、生産者テーブルから id を用いて生産者名を検索することができる。

SQL を使ってリレーションを行う場合

  • リレーションするテーブルを FROM で設定し、WHERE 句にてテーブル同士で紐づいているカラムを記述する。
  • 紐づいているカラムを元に検索を行い結果を出力する。
  • (例)SELECT * FROM makers, my_items WHERE makers.id = my_items.maker_id;
    • makers テーブルと my_items テーブルから makers 内にある id と my_items の make_id が同じものを検索してほしいという SQL になる。
    • 省略した書き方もできる。SELECT * FROM makers m, my_items i WHERE m.id = i.maker_id;

GROUP BY

  • 複数行にわたるデータを集約し、集約した複数データをグループ化する。
  • 構文: SELECT カラム名 FROM テーブル名 GROUP BY グループ化したいカラム名
  • 例: SELECT item_id, SUM(count) FROM carts GROUP BY item_id;
    • carts テーブルから item_id と、count を集計した値を取得し item_id でグループ化を行う処理となる。

LEFTJOIN RIGHTJOIN INNER JOIN

LEFT JOIN RIGHT JOIN

  • どちらとも外部結合を行う処理。
  • LEFTJOIN は左側を優先して処理が行われる。
  • RIGHTJOIN は右側を優先して処理が行われる。
  • 構文: SELECT カラム名 FROM テーブル名 LEFT(RIGHT) JOIN テーブル名 ON 条件
  • 例: SELECT item_name, SUM(count) FROM my_items LEFT JOIN carts ON my_items.id=carts.item_id GROUP BY item_name;
    • my_item から item_name と count の合計値を取得します。carts の左側を基準にテーブルを繋ぐ。
    • my_items にあるテーブルはもし carts に紐づかなくても表示するようになる。
    • GROUPBY で item_name としてグループ化する。 | item_name | SUM(count) | | —- | —- | | いちご | 7 | | りんご | 3 | | ブルーベリー | NULL |

INNER JOIN

  • 共通するデータのみ結合を行う処理。
  • 構文: SELECT カラム名 FROM テーブル名 INNER JOIN テーブル名 ON 条件
  • 例: SELECT item_name, SUM(count) FROM my_items INNER JOIN carts ON my_items.id=carts.item_id GROUP BY item_name;

便利な SQL 構文

DISTINCT

  • データの重複を取り除く
  • 構文: SELECT DESTINCT カラム名 FROM テーブル名
  • 例: SELECT DISTINCT item_id from carts;
    • carts テーブルから items_id 内の重複したデータを取り除いて一覧を取得する。

BETWEEN

  • 範囲指定ができる
  • 構文: SELECT カラム名 from テーブル名 WHERE 条件 BETWEEN 項目 AND 項目;
  • 例: SELECT * FROM my_items WHERE price BETWEEN 100 AND 1000;
    • my_items から price が 100~1000 までのデータを取得する。

IN

  • どちらかのデータを取得する
  • 構文: SELECT カラム名 FROM テーブル名 WHERE id IN(項目, 項目);
  • 例: SELECT * FROM my_items WHERE id IN(1, 3);
    • my_items から id の 1 と 3 のデータをどちらかのデータを取得する。

LIMIT

  • 検索結果の表示を絞る
  • 構文: SELECT カラム名 FROM テーブル名 LIMIT 数値
  • 例: SELECT * FROM my_items LIMIT 2;
    • my_items から 2 件だけ取得する
  • 例: SELECT * FROM my_items LIMIT 2,3;
    • my_items から 3 件目から 3 件取得する

AS

  • 別名をつける
  • 例: SELECT sum(count) AS sales_count FROM carts;
    • carts テーブルから count の合計値を sales_count としデータを取得する。

DB のインポート・エクスポート

  • phpMyAdmin には DB のインポート・エクスポート機能が存在する。
  • DB をエクスポートするには、左側からエクスポートしたい DB を選択した状態で、右上のエクスポートを押すことでエクスポートすることができる。
    • エクスポート時の設定は特に変更する必要はなかった。
    • 適宜設定を行う。 alt text
  • DB をインポートするには、新規で DB を作成し、エクスポートしたファイルを使ってインポートを行えばインポートすることができる。
    • インポート時の設定は特に変更する必要はなかった。
    • 適宜設定を行う。 alt text

Tags:

Updated: