SQLに関するメモ書き

published: 2021/6/16 update: 2021/6/21

Table of Contents

TL;DR

SQLに関するメモ。入門レベルです。

基本構文

SELECT

見たい列名を指定できる。すべての基本。

SELECT id, name FROM A

DISTINCT

DISTINCTをつければ重複を排除できる。SELECT以外でも使える。

SELECT DISTINCT id, name FROM A

WHERE

条件指定できる。

SELECT id, name FROM A
    WHERE id = 1

ORDER BE

条件でソート。降順ならDESCが必要

SELECT id FROM A ORDER BY A DESC

JOIN

内部結合 (INNER JOIN) と外部結合 (LEFT OUTER JOIN) がある。pandasと同じ感じ。

SELECT * FROM A
    INNER JOIN B
    ON A.id = B.id

IFNULL, COACESCE

  • IFNULL: NULLをとったときのデフォルト値を指定できる。
  • COALESCE: 複数列を調べて、NULLだったらデフォルト値を返す。
SELECT id, IFNULL(
    (SELECT name FROM A), "UnKnown"
) as name, COALESCE(id, name, "?")

LIMIT

持ってくるレコードの数の制限。

SELECT id FROM A LIMIT 1

OFFSET

何番目からレコードを取得するか。ソートと組み合わせて使うことが多そう。

SELECT id FROM A ORDER BY id OFFSET 1

変数定義

DECLAREが必要?

DECLARE N INT;
SET N = 0;

判定

NULLかどうか

N IS NULL --or
N IS NOT NULL

大小比較などは普通の記号は使える。同一判定は==ではなく=を使う。

Window関数

GROUP BYだとまとめられてしまうけど、まとめずに新しい列を作成する。PARTITION BYを使ってどの列を対象とするかを決定する。通常の集計関数と、Window関数専用の関数がある。

基本

-- GROUP BY
SELECT gid, SUM(val) FROM t GROUP BY gid

-- WINDOW
SELECT gid, SUM(val) OVER (PARTITION BY gid) FROM t

ORDER BY

window関数内でのORDER BYはwindow関数が処理する順序を指定する。SUMを使うと、その行までの和が得られる。

SELECT gid, SUM(val) OVER (PARTITION BY gid ORDER BY val) FROM t

ROW

どこからどこまで処理するかを指定できる。

開始位置、終了位置で使える変数は以下

namedescription
CURRENT ROW現在行
UNBOUNDED PRECEDINGPARTITIONの最初
UNBOUNDED FOLLOWINGPARTITIONの最後
N(INT) PRECEDING現在行のN行前
N(INT) FOLLOWING現在行のN行後

記事に間違い等ありましたら、お気軽に以下までご連絡ください

E-mail: illumination.k.27|gmail.com ("|" replaced to "@")

Twitter: @illuminationK

当HPを応援してくれる方は下のリンクからお布施をいただけると非常に励みになります。

ofuse

Other Articles

Privacy Policy

Copyright © illumination-k 2020-2021.