0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLコマンド基本

Posted at

はじめに

SQLを学びながらboostnoteにまとめていた記事をリファクタリングした。
SQL叩く時はこれを参考にしている

ポイント
元の表がどういうもので、新しくどのような表を作りたいのかイメージする

基本

SELECT  カラム名
FROM テーブル名
WHERE 条件

重複なし

SELECT DISTINCT カラム名

条件

条件が複数

WHERE 条件1 AND 条件2

どちらかの条件が当てはまったら

WHERE 条件 1 OR 条件2

-- role = "パイロット" OR role = "作戦部長"    同じカラムの場合INでまとめる
WHERE role IN ('パイロット', '作戦部長')

-- まとめて否定もできる
WHERE role NOT IN ('パイロット', '作戦部長')

指定した範囲内に条件に当てはまったら

WHERE kawaii BETWEEN 6 AND 8

あいまい検索

WHERE name LIKE "プリン%"  -- プリンから始まる
WHERE name LIKE "%プリン"  -- プリンで終わる
WHERE name LIKE "%プリン%" -- プリンが含まれる

空のレコード

WHERE role IS NULL;

--空じゃないレコード
WHERE role IS NOT NULL;

表示件数を制限

LIMIT 2; --2件だけ表示

LIMIT 10 OFFSET 10 -- 21件目から10件取得


並び替え

ORDER BY 基準のカラム名 並べ方
-- 昇順 ASC
-- 降順 DESC
SELECT *
FROM eva
ORDER BY kawaii ASC

グループ化

ポイントは
軸になるカラムは全てORDER BYで指定する

処理が行われる順番を意識する

GROUP BY 基準のカラム
-- 指定したカラムに存在する値ごとにまとめる
-- 指定できるのはSELECTで指定したカラムか集計関数

テーブル結合

テーブル間で共通するデータを軸に結合させる
処理が行われる順番を意識する

-- テーブルを結合してからSELECTしている
-- 結合した新しいテーブルから何を取得するかをSELECTに記載
SELECT martians.name, histories.planet
FROM martians AS m
INNER JOIN histories AS h
ON m.id = h.martians_id;


-- 結合先のデータが欠損していても削除せずNULLで出力する (結合元のデータが全て残る)
LEFT OUTER JOIN
SELECT martians.name, histories.planet
FROM martians
JOIN histories
ON martians.id = histories.martians_id;

CASE式

分析用の分娩単位で集計したい時に集計関数(SUM)とGROUP BY句と一緒に使うことで大活躍
条件に応じて集計したい時はCASE式

SELECT CASE WHEN 条件 THEN  --この条件の時はこの値
       WHEN 条件 THEN  --この条件の時はこの値
       ELSE  END --どれにも該当しなかったらこの値 終わり
       -- SELECTするカラムが他にもある場合はENDの後に ,カラム名で追加 
FROM テーブル名

SELECT 
CASE WHEN pref_name = IN ('京都', '大阪') THEN "関西"
WHEN pref_name = IN ('福岡', '佐賀') THEN "九州"
ELSE NULL 
END AS district, -- pref_nameのカラム名をdistrictに変更
SUM(population) -- populationを集計する
FROM population
GROUP BY -- SELECTと全く同じCASE式を書く
CASE WHEN pref_name = IN ('京都', '大阪') THEN "関西"
WHEN pref_name = IN ('福岡', '佐賀') THEN "九州"
ELSE NULL 
END

サブクエリ

クエリ叩いた結果に対してクエリ叩く
実際に実行されているSQL文を書いてみるとイメージできる

-- サブクエリから実行される
SELECT *
FROM items
WHERE price >= (
SELECT AVG(price)
FROM items
)
SELECT * 
FROM items AS i1
WHERE price >= 
(
SELECT AVG(price)
FROM items AS i2
WHERE i1.category = i2.categrory 
-- 上の1文で合致した方の平均価格で比べることができる
-- 相関サブクエリ
GROUP BY category
);

参考

Progate
Youtube
SQLの環境構築で参考にしたサイト

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?