SQL文 基本のキ
投稿日:2019年02月18日
LIKE検索
SELECT * FROM `my_items` WHERE keyword LIKE '%甘い%’;
my_items
というテーブルの keyword
に「甘い」という文字列が含まれているレコードを全部取得する。
%甘い% の「%」は何が入ってもOKという指示
複数条件検索
SELECT * FROM `my_items` WHERE price >= 100 AND price < 150;
WHERE 条件1 AND 条件2 と書く
SELECT * FROM `my_items` WHERE id=1 OR id=3;
WHERE 条件1 OR 条件2 と書く
ORDER BY
降順
SELECT * FROM `my_items` ORDER BY id DESC;
昇順(デフォルト)
SELECT * FROM `my_items` ORDER BY id ASC;
リレーション
2つ以上の?テーブルに関係性を持たせる。
テーブルを2つ作る items と makers など。 items には商品情報(商品名や価格、id)と生産者のID(maker_id 的な)のカラムを作る。 makers には生産者情報とIDカラムを作る。
このとき items.maker_id と makers.id は同じ。 items.maker_id=1 の商品は mkaers.id=1 が作ったもの。
たとえば items.id=1 の商品情報に付随して生産者(makers)の情報も取得したい場合は下記のようなSQLを叩く
SELECT * FROM makers, items WHERE items.id=1 AND makers.id=items.maker_id;
生産者と商品テーブルから 商品IDが2の商品を取得する、このとき生産者IDと商品の生産者IDの関係は一致するものとする。
SELECT * FROM テーブル1, テーブル2 WHERE 条件 AND 関係するテーブルとそのカラム;
GROUP BY
商品がどれだけ売れたか管理するテーブル carts を用意する。 テーブルには購入履歴を管理する ID (id)、商品ID(item_id)、 売上数(count)を用意する。
全商品の売上数
SELECT SUM(COUNT) FROM carts;
cartsテーブルから count の合計を計算(SUM)する
SELECT SUM(合計を計算したいカラム) FROM テーブル名;
商品ID毎の売上数
SELECT item_id, SUM(count) FROM carts GROUP BY item_id;
SELECT 対象カラム … GROUP By グルーピングしたいカラムの用に 対象カラムにグルーピングしたいカラム名を含める必要がある。
SELECT 対象カラム, SUM(合計を計算したいカラム) FROM テーブル名 GROUP BY グルーピングしたいカラム;
商品名毎の売上数
SELECT item_name, SUM(COUNT) FROM my_items, carts WHERE my_items.id=carts.item_id GROUP BY item_id;
SELECT … FROM … WHERE … GROUP BY … という順番。
SELECT 対象カラム, SUM(COUNT) FROM テーブル1, テーブル2 WHERE 条件 GROUP BY グルーピングしたいカラム;
LEFT JOIN
優先するテーブルと優先しないテーブルを結合し結果を表示させる
SELECT item_name, SUM(COUNT) FROM my_items LEFT JOIN carts ON my_items.id=carts.item_id GROUP BY carts.item_id;
SELECT 対象カラム, SUM(COUNT) FROM 優先するテーブルA LEFT JOIN 優先しないテーブルB ON 条件 GROUP BY グルーピングしたいカラム;
DISTINCT
重複除外
SELECT DISTINCT(カラム名) FROM テーブル名;
BETWEEN
冷静と情熱の間(違) 下記の場合、金額(price)が50以上150未満のカラムを取得する
SELECT * FROM テーブル名 WHERE price BETWEEN 50 AND 149;
下記と同じ
SELECT * FROM テーブル名 WHERE price>=50 AND price<150;
IN
指定したテーブルのカラムから 値1または 値2 を持ったカラムを返す IN(値1, 2, 3, 4...) と条件をつなげて書くことができる
SELECT * FROM テーブル名 WHERE カラム名 IN(値1,値2);
# 下記と同じ
SELECT * FROM テーブル名 WHERE カラム名=値1 OR カラム名=値2;
2
3
4
LIMIT
指定したテーブルから数値の数だけ取得する。
SELECT * FROM テーブル名 LIMIT 数値;
# こちらは数値1 から 数値2 件を取得する
SELECT * FROM テーブル名 LIMIT 数値1, 数値2;
# 引数が一つの場合のときは下記と同じ
SELECT * FROM テーブル名 LIMIT 0, 数値2;
# WHERE、ORDER BY と組み合わせる場合は最後に指定する。
SELECT * FROM テーブル名 WHERE ... ORDER BY ... LIMIT 0, 数値2;
2
3
4
5
6
7
8
9
10
省略記法
テーブルを跨ぐとき、全部のカラムにテーブル名を書くのはしんどいので FROM句のテーブ名を書く時に半角空白空けて適当な文字を与えるとテーブル名をその文字に置き換えることができる。
SELECT my_items.item_name, SUM(carts.count) FROM my_items, carts WHERE my_items.id=carts.item_id GROUP BY carts.item_id
↓
SELECT i.item_name, SUM(c.count) FROM my_items i, carts c WHERE i.id=c.item_id GROUP BY c.item_id
2
3
上記の場合、 my_items = i
になり、 carts = c
に置き換えることができる。
それにより、 my_items.item_name
や carts.item_id
は i.item_name
と c.item_id
と書くことができるようになる。