LoginSignup
2
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-02-08

基本操作

■列を選択 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)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2