WEBMAN

HTML,CSS,JSでハマった事のメモとWEB制作の実験場

公開日:

SQL文 基本のキ

SQL文 基本のキ

SPONSOR

お疲れ様です、ナガです。

PHPを学ぶにあたってSQL文も知る必要が出てきたので備忘録です。

LIKE検索

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

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

複数条件検索

WHERE 条件1 AND 条件2 と書く

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

WHERE 条件1 OR 条件2 と書く

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

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)を用意する。

全商品の売上数

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

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

商品ID毎の売上数

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

SELECT item_id, SUM(count) FROM carts GROUP BY item_id;
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`;

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

省略記法

テーブルを跨ぐとき、全部のカラムにテーブル名を書くのはしんどいので 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

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

以上です。

SPONSOR

この記事をシェアする

コメント

関連記事