SQLを使う(4)
LEFT JOIN、RIGHT JOIN - 外部結合
- リレーションを張れば複数のテーブルからデータを取り出すことができますが、取り出せないデータもあります
- その場合は、テーブルの結合の方法を変えることで、片方のテーブルには存在しないデータを取り出し表示させることも可能です
値が0のデータは表示されない
SELECT i . item_name , SUM( c . count ) FROM my_items i , carts c WHERE i . id=c . item_id GROUP BY c . item_id;
この時点で、売上のない「ブルーベリー」は表示されません。
このことを表示するために「外部結合」を利用します。
外部結合
- 一方のテーブルにさえデータがあれば、必ず表示されるというリレーションを作ることができます
SELECT i . item_name , SUM( count ) FROM my_items i LEFT JOIN carts c ON i . id=c . item_id GROUP BY c . item_id;
外部結合の使い方
SELECT … FROM テーブル1 LEFT JOIN テーブル2 ON 結合の条件 WHERE …
内部結合
SELECT … FROM テーブル1 INNER JOIN テーブル2 ON 結合の条件 WHERE …
DISTINCT、BETWEEN、IN、LIMIT - その他の便利なSQL
BETWEEN - 間を示す
SELECT * FROM my_items WHERE price >= 50 AND price < 150;
- このSQLは、以下のようにも記述できます
SELECT * FROM my_items WHERE price BETWEEN 50 AND 149;
IN - 複数の値を一気に指定する
SELECT * FROM my_items WHERE id=2 OR id=4;
- このSQLは、以下のようにも記述できます
SELECT * FROM my_items WHERE id IN ( 2, 4 );
LIMIT - 件数を制限する
- 何万件もあるようなテーブルの場合に、検索結果の表示を制限を加えることができます
SELECT * FROM carts LIMIT 2;
始まりの位置を指定する
SELECT * FROM carts LIMIT 2, 3;
… LIMIT 開始位置 , 件数
AS - フィールドに別名をつける
SELECT i . item_name , SUM( c . count ) FROM my_items i , carts c WHERE i . id=c . item_id GROUP BY c . item_id;
- 販売数の合計部分のフィールド名は「SUM( c.count )」という名前になります
- このままでは何の結果なのかがわかりにくい状態なので、別名をつけてわかりやすくします
SELECT i .item_name , SUM( c . count ) AS sales_count FROM my_items i , carts c WHERE i .id=c . item_id GROUP BY c . item_id;