SQL
Database
DataScience

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)