DISTINCT、BETWEEN、IN、LIMIT:その他の便利なSQL

DISTINCT:重複をなくす

SELECT item_id FROM carts;


この場合、同じデータが何度も登場します。


以下のように変更すると、

SELECT DISTINCT item_id FROM carts;

BETWEEN:間をなくす

  • 価格と商品を絞り込む
SELECT * FROM my_items WHERE price>=50 AND price<150;


以下のように書くこともできます。

SELECT * FROM my_items WHERE price BETWEEN 50 AND 149;

IN:複数の値を一気に指定する

  • 「1と3の商品を取り出したい」場合
SELECT * FROM my_items WHERE id=1 OR id=3;


しかし、これが何個も続くと面倒です。
そこで同じフィールドに対して複数の値を一気に指定できる「IN」を使います。

SELECT * FROM my_items WHERE id IN (1, 3);

LIMIT:件数を制限する

  • 「LIMIT」を使って取得する件数を制限します
SELECT * FROM carts LIMIT 2;


以下のように、カンマ区切りにすることで始まりの位置を指定することもできます。

SELECT * FROM carts LIMIT 1, 2;




... 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;


フィールド名がつけられ、わかりやすくなりました。


3つのテーブルリレーション

SELECT
 m.name,
 i.item_name, 
 SUM(c.count) AS sales_count 
FROM 
 makers m,
 my_items i LEFT JOIN carts c ON i.id=c.item_id 
WHERE 
 m.id=i.maker_id 
GROUP BY 
 c.item_id
ORDER BY
 sales_count DESC;