Help us understand the problem. What is going on with this article?

【初心者向け】SQL早見表

More than 1 year has passed since last update.

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文を表形式で簡単にまとめました。
データの加工方法によって「この関数ならすぐ終わる!」ってものもあれば「複雑な加工が必要」という場合もあるかと思います!
適宜組み合わせながら使ってみてください。

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

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

takuya_tsurumi
インフラエンジニア/AWS/Azure フルスタックエンジニアを目指しています。 機械学習/Node.js/react.js/OAuth 勉強中です。
is-tech
大手優良企業特化型システム内製支援事業。ご連絡は https://www.is-tech.co.jp/ の問い合わせフォームをご利用ください。
https://www.is-tech.co.jp/recruit/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away