SQL文 基本のキ

投稿日:2019年02月18日

Tags: sql メモ

LIKE検索

SELECT * FROM `my_items` WHERE keyword LIKE '%甘い%;
1

my_items というテーブルの keyword に「甘い」という文字列が含まれているレコードを全部取得する。 %甘い% の「%」は何が入ってもOKという指示

複数条件検索

SELECT * FROM `my_items` WHERE price >= 100 AND price < 150;
1

WHERE 条件1 AND 条件2 と書く

SELECT * FROM `my_items` WHERE id=1 OR id=3;
1

WHERE 条件1 OR 条件2 と書く

ORDER BY

降順

SELECT * FROM `my_items` ORDER  BY id DESC;
1

昇順(デフォルト)

SELECT * FROM `my_items` ORDER  BY id ASC;
1

リレーション

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

生産者と商品テーブルから 商品IDが2の商品を取得する、このとき生産者IDと商品の生産者IDの関係は一致するものとする。

SELECT * FROM テーブル1, テーブル2 WHERE 条件 AND 関係するテーブルとそのカラム;
1

GROUP BY

商品がどれだけ売れたか管理するテーブル carts を用意する。 テーブルには購入履歴を管理する ID (id)、商品ID(item_id)、 売上数(count)を用意する。

全商品の売上数

SELECT SUM(COUNT) FROM carts;
1

cartsテーブルから count の合計を計算(SUM)する

SELECT SUM(合計を計算したいカラム) FROM テーブル名;
1

商品ID毎の売上数

SELECT item_id, SUM(count) FROM carts GROUP BY item_id;
1

SELECT 対象カラム … GROUP By グルーピングしたいカラムの用に 対象カラムにグルーピングしたいカラム名を含める必要がある。

SELECT 対象カラム, SUM(合計を計算したいカラム) FROM テーブル名 GROUP BY グルーピングしたいカラム;
1

商品名毎の売上数

SELECT item_name, SUM(COUNT) FROM my_items, carts WHERE my_items.id=carts.item_id GROUP BY item_id;
1

SELECT … FROM … WHERE … GROUP BY … という順番。

SELECT 対象カラム, SUM(COUNT) FROM テーブル1, テーブル2 WHERE 条件 GROUP BY グルーピングしたいカラム;
1

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;
1
SELECT 対象カラム, SUM(COUNT) FROM 優先するテーブルA LEFT JOIN 優先しないテーブルB ON 条件 GROUP BY グルーピングしたいカラム;
1

DISTINCT

重複除外

SELECT DISTINCT(カラム名) FROM テーブル名;
1

BETWEEN

冷静と情熱の間(違) 下記の場合、金額(price)が50以上150未満のカラムを取得する

SELECT * FROM テーブル名 WHERE price BETWEEN 50 AND 149;
1

下記と同じ

SELECT * FROM テーブル名 WHERE price>=50 AND price<150;
1

IN

指定したテーブルのカラムから 値1または 値2 を持ったカラムを返す IN(値1, 2, 3, 4...) と条件をつなげて書くことができる

SELECT * FROM テーブル名 WHERE カラム名 IN(1,2);

# 下記と同じ
SELECT * FROM テーブル名 WHERE カラム名=1 OR カラム名=2;
1
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;
1
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
1
2
3

上記の場合、 my_items = i になり、 carts = c に置き換えることができる。 それにより、 my_items.item_namecarts.item_idi.item_namec.item_id と書くことができるようになる。

  • シェア:

Last Updated: 2019-9-9 21:37:59