Edited at

【初心者向け】SQL早見表


1.はじめに

最近機械学習の実装をしていて、Pythonとfor文の相性に悩まされる日々をおくっています。

そんな中、Pythonで前処理をするのではなく、

データベースでデータを加工する方法が良いと聞いたため

SQLの勉強を再度はじめました。

備忘録の意味も込めてその内容をまとめます。


2.SQL構文早見表


2-1.基本構文編

No
構文
意味
備考

1
CREATE DATABASE <データベース名>;
<データベース名>という名前のデータベースを作成する

2
CREATE TABLE <テーブル名>;
データベース内に<テーブル名>という名前のテーブルを作成する

3
DROP <データベース名>;
<データベース名>という名前のデータベースを削除する

4
DROP TABLE <テーブル名>;
データベース内の<テーブル名>という名前のテーブルを削除する

5
ALTER TABLE <テーブル名> ADD COLUMN <列の定義>;
<テーブル名>のテーブルに列(カラム)を追加する

6
SELECT <列名1>, <列名2> , … FROM <テーブル名>;
<テーブル名>の<列名1>,<列名2>,... を出力する
・全列表示する場合は、* を使用する
・列に別名を付ける場合は、「AS」を使用する
・重複を除く場合は、SELECT句に 「DISTINCT」を使用する

7
SELECT <列名1>, <列名2> , … FROM <テーブル名> WHERE <条件式>;
<条件式>に一致する<テーブル名>の<列名1>,<列名2>,... を出力する
6に同じ


2-2.演算子編

No
演算子
意味
備考

1
+
足し算

2
-
引き算

3
*
掛け算

4
/
割り算

5
=
〜と等しい

6
<>
〜と等しくない
!=ではない

7
>=
〜以上

8
>
〜より大きい

9
<=
〜以下

10
<
〜より小さい

11
NOT
〜と等しくない
WHERE句の条件式と掛け合わせて使用する

12
AND
〜かつ**
11に同じ

13
OR
〜または**
11に同じ

※NULLに比較演算子は使用できない。


2-3.集約編

No
構文
意味
備考

1
SELECT COUNT(<パラメータ>) FROM <テーブル名>;
<テーブル名>テーブル内の<パラメータ>のレコード数を数える
全件数える場合、*を<パラメータ>に代入する

2
SELECT SUM(<パラメータ>) FROM <テーブル名>;
<テーブル名>テーブル内の<パラメータ(数値列)>を合計する
8に同じ

3
SELECT AVG(<パラメータ>) FROM <テーブル名>;
<テーブル名>テーブル内の<パラメータ(数値列)>を平均する
8に同じ

4
SELECT MAX(<パラメータ>) FROM <テーブル名>;
<テーブル名>テーブル内の<パラメータ(数値列)>の最大値を出力する

5
SELECT MIN(<パラメータ>) FROM <テーブル名>;
<テーブル名>テーブル内の<パラメータ(数値列)>の最小値を出力する

6
SELECT <列名1>, <列名2> , … FROM <テーブル名> GROUP BY<列名1>,< 列名2> ...;
集約して表示する
GROUP BY を使用するとSELECT句に使用できるものが限られる

7
SELECT <列名1>, <列名2> , … FROM <テーブル名> GROUP BY<列名1>,< 列名2> … HAVING <グループ値に対する条件式>,...;
集約値の中から条件式<グループ値に対する条件式>に合致するものを出力する

8
SELECT <列名1>, <列名2> , … FROM <テーブル名> ORDER BY<列名1>,< 列名2> ...;
<列名>を基準に並べ替える
降順にならべかえる場合は、「DESC」をORDER BY句に追加する


2-4.データ更新編

No
構文
意味
備考

1
INSERT INTO <テーブル名>(<列1>, <列2>, ...) VALUES (<値1>, <値2>,... );
<テーブル名>テーブルにデータを登録する

2
DELETE FROM <テーブル名>;
<テーブル名>テーブルの中身を削除する
WHERE句を追加することで条件式を追加して削除できる

3
UPDATE <テーブル名> SET <列名> = <値>;
<列名>を<値>に更新する
WHERE句を追加することで条件式を追加して更新できる


2-5. 関数編

No
関数
意味
備考

1
ABS(<数値>)
<数値>を絶対値で出力する

2
MOD(<被除数>, <除数>)
<被除数>を<除数>で割った余りを出力(余剰)

3
ROUND(<対象数>, <丸め桁数>)
<対象数>を<丸め桁数>で四捨五入する

4
<文字列1> || <文字列2>
<文字列1> と <文字列2>を連結

5
LENGTH(<文字列>)
<文字列>の長さを出力

6
LOWER(<文字列>)
<文字列>を小文字化して出力

7
REPLACE(<対象の文字列>, <置換前の文字列>, <置換後の文字列>)
文字列の置換

8
SUBSTRING(<対象の文字列> FROM <切り出し開始位置> FOR <切り出す字数>)
文字列の切り出し

9
UPPER(<文字列>)
<文字列>を大文字化して出力

10
CURRENT_DATE
現在の日付

11
CURRENT_TIME
現在の時間

12
CURRENT_TIMESTAMP
現在の日時

13
EXTRACT(<日付要素> FROM <日付>)
日付要素の切り出し

14
CAST(<変換前の値> AS <変換するデータ型>)
型変換

15
COALESCE(<データ1>, <データ2>, ...)
NULL値を変換

16
CASE WHEN <評価式1> THEN <式1> WHEN <評価式2> THEN <式2> … ELSE <式> END
条件分岐

17
UNION
レコードの足し算

18
EXCEPT
レコードの引き算

19
INNER JOIN
内部結合

20
OUTER JOIN
外部結合
片方のテーブルにしかない値も一緒に出力する

21
CROSS JOIN
クロス結合
ほとんど使用しない

※RDBMSの種類によって書き方が異なる箇所がありますので、詳細は各RDBMSのドキュメントを参考にしてください。


2-6.述語編

抽出条件を記載する際に必須となってくるものです。

No
演算子
意味
備考

1
LIKE
文字列部分一致検索
任意の値を入れる箇所に’%’を記載する

2
BETWEEN <値1> AND <値2>
範囲検索

3
IS NULL
NULLであるか
NOTを付けることでNULLでない場合を表示できる

4
IN
ORの省略形

5
EXISTS
レコードの存在有無を調べる


2-7.ウィンドウ関数

No
関数
意味
備考

1
RANK
レコードのランキングを出力
同順位のレコードが存在した場合、後続の順位が飛ぶ

2
DENSE_RANK
レコードのランキングを出力
同順位のレコードが存在した場合、後続の順位が飛ばない

3
ROW_NUMBER
一意な連番を付与する

4
PARTITION BY
範囲指定
RANK関数内で順位づけの範囲を指定する等で使用


3.まとめ

SQL文を表形式で簡単にまとめました。

データの加工方法によって「この関数ならすぐ終わる!」ってものもあれば「複雑な加工が必要」という場合もあるかと思います!

適宜組み合わせながら使ってみてください。

具体例は様々な記事がネットにあるので、詳細が気になる方は調べてみてください。

何か間違い、不備等あればご指摘ください。