SQL 基本操作メモ(データ取得編)


基本操作

■列を選択 SELECT

SELECT name, price

■テーブルを選択 FROM

テーブル sales_data から、
列 name, price を出力

SELECT name, price
FROM sales_data;

■全ての列を選択 SELECT * 

SELECT *
FROM sales_data;

■条件を選択 WHERE

テーブル sales_data から、
列 name が apple の、全ての列を出力

SELECT *
FROM sales_data
WHERE name = "apple";
  • テキスト → クオーテーションで囲む
  • 数値 → クオーテーションで囲まない
  • 日付 → クオーテーションで囲む
WHERE name = "apple"

WHERE price = 500

WHERE date = "2018-06-13"

比較演算子も使用可能

WHERE price >= 500

WHERE date < "2018-06-13"

■特定の文字を含むデータの取得 LIKE

nameカラムで「banana」を含むデータ

WHERE name LIKE "%banana%"

nameカラムで「banana」で始まるデータ

WHERE name LIKE "banana%"

nameカラムで「banana」で終わるデータ

WHERE name LIKE "%banana"

■否定の条件 WHERE NOT

priceカラムが 1000 でないデータ

WHERE NOT price = 1000

nameカラムで「banana」を含まないデータ

WHERE NOT name LIKE "%banana%"

■NULLの扱い IS NULL / IS NOT NULL

price が NULL のデータを抽出

WHERE price IS NULL

price が NULL でないデータを抽出

WHERE price IS NOT NULL

■WHERE文に複数の条件 AND / OR

両方の条件を満たすデータを抽出

WHERE category = "A" AND name = "orange"

どちらかの条件を満たすデータを抽出

WHERE category = "A" OR name = "orange"

■並べ替え ORDER BY

  • ASC : 昇順
  • DESC : 降順

テーブル sales_data の中で price 列を降順で抽出

SELECT *
FROM sales_data
ORDER BY price DESC;

■出力行数の制限 LIMIT

10件まで表示

SELECT *
FROM sales_data
WHERE price = 800
LIMIT 10;

■重複を省いたデータを取得 DISTINCT

SELECT DISTINCT (name)
FROM sales_data;

■四則計算

  • 足し算:+
  • 引き算:-
  • 掛け算:*
  • 割り算:/

price を税込金額に変更(1.08をかける)

SELECT price * 1.08
FROM sales_data;

■関数

  • 合計:SUM()
  • 平均:AVG()
  • データ数:COUNT() 【NULLはカウントしない】
  • 全行数:COUNT(*)
  • 最大値:MAX()
  • 最小値:MIN()

name が apple のデータの price の合計

SELECT SUM(price)
FROM sales_data
WHERE name = "apple";

■グループ化と集計 GROUP BY

name ごとの price の合計値を出力

SELECT name, SUM(price)
FROM sales_data
GROUP BY name;

【WHERE との併用も可能(WHEREから先に適用される)】

■グループ化したデータの絞り込み HAVING

SELECT name, SUM(price)
FROM sales_data
GROUP BY name
HAVING SUM(price) >= 500;

■サブクエリを使って複雑なデータを取得する

apple の価格より高い価格を持つ name を表示

SELECT name
FROM sales_data
WHERE price > (
    SELECT price
    FROM sales_data
    WHERE name = "apple"
);

■カラムに別の名前をつける AS

SELECT price AS "appleの価格"
FROM sales_data
WHERE name = "apple";
SELECT name AS "priceが500より高い商品名"
FROM sales_data
WHERE price > 500;

■テーブルの結合 JOIN ON

別テーブル countries と country_id、idを基点に結合

SELECT *
FROM sales_data
JOIN countries
ON sales_data.country_id = countries.id;

複数テーブルでのカラムの指定(テーブル名.カラム名)

SELECT sales_data.name, countries.name
FROM sales_data
JOIN countries
ON sales_data.country_id = countries.id;

NULLのレコードも表示させる場合(LEFT JOIN)

SELECT sales_data.name, countries.name
FROM sales_data
LEFT JOIN countries
ON sales_data.country_id = countries.id;

テーブルをさらに結合

SELECT *
FROM sales_data
JOIN countries
ON sales_data.country_id = countries.id
LEFT JOIN suppliers
ON sales_data.supplier_id = suppliers.id;

処理の順番

テーブル指定(FROM)
 ↓
結合(JOIN ON)
 ↓
条件(WHERE)
 ↓
グループ化(GROUP BY)
 ↓
関数処理(SUM, AVG...)
 ↓
グループデータの絞り込み(HAVING)
 ↓
検索(SELECT)
 ↓
順序(ORDER BY)
 ↓
出力数調整(LIMIT)