Slide 1

Slide 1 text

1 第3回バックエンド勉強会 2023.10.04 rare0b 速習SQL

Slide 2

Slide 2 text

2 目次 1. はじめに 2. 基本構文 3. その他Tips

Slide 3

Slide 3 text

3 はじめに

Slide 4

Slide 4 text

4 ● 放送大学(通信制大学) 情報コース 3年 ● 大学在学中、1年半の社会人経験有り ● 元データベース管理者 ● SQL Roadmap全部分かるのが自慢 https://roadmap.sh/sql ● 最近はReact/Go [会員 バックエンド] れあ 自己紹介 はじめに

Slide 5

Slide 5 text

5 話すこと はじめに ● INSERT、UPDATE、DELETEも基礎はSELECT(思想強) ○ SELECTわかればなんとかなる ● 句を列挙してるだけ ○ 丁寧な実行結果添えたかった ○ 体力尽きた SELECT文の話

Slide 6

Slide 6 text

6 表、行、列 はじめに 行(レコード)(件) 列(カラム) 表(テーブル)

Slide 7

Slide 7 text

7 基本構文

Slide 8

Slide 8 text

8 1. SELECT a. 集約関数 2. FROM a. JOIN 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. 集合演算 一覧 基本構文

Slide 9

Slide 9 text

9 ● SELECT 列名1(, 列名2, …) ● SELECT * は全列取得 ● 冒頭に表名or表別名をつけると どの表の列か明示できる ○ u.usernameのu. 列を選ぶ SELECT 基本構文

Slide 10

Slide 10 text

10 ● SUM(合計)、AVG(平均) …数値型のみ ● MIN(最小値)、MAX(最大値) …日付型、文字列型なども可 ● COUNT(行数) …型によらず、集約後の行数を返す 集約方法を指定 集約関数 SELECT

Slide 11

Slide 11 text

11 ● FROM 表名1(, 表名2, …) ○ 表名2以降は JOIN句で指定することが多い ● 表別名をつけられる ○ users uのu 表を選ぶ FROM 基本構文

Slide 12

Slide 12 text

12 ● INNER JOIN…条件一致行 ● LEFT OUTER JOIN…条件一致行+条件不一致の左側全行 (右側しかない列はNULLが入る) ● RIGHT OUTER JOIN…条件一致行+条件不一致の右側全行 (左側しかない列はNULLが入る) ● FULL OUTER JOIN…条件一致行+条件不一致の左右全行 (片側しかない列はNULLが入る) ● CROSS JOIN…すべての組み合わせ行、いわゆるデカルト積、 JOIN句の基礎 ● 自己結合…同じ表を2つ以上使う結合、違う表別名をつけて同じ表を別の表のように扱う 列をつけ足す JOIN FROM 「左側」はFROMで先に指定した方 可読性のため基本は左側結合 (右側結合を使わない )

Slide 13

Slide 13 text

13 ● 等号、不等号 ○ 不等号は<>か!= ○ BETWEEN a AND bでa以上b以下 ● IN、NOT IN (値1(, 値2, …)) ● IS NULL、IS NOT NULL ● EXISTS、NOT EXISTS 行を選ぶ WHERE 基本構文

Slide 14

Slide 14 text

14 ● LIKE '%abc%’ ○ %は任意の文字列 ○ ‘%abc’なら前方曖昧一致、 ’abc%'なら後方曖昧一致 ● ANY、ALL…存在、全称 ● AND、OR…複数条件 行を選ぶ WHERE 基本構文

Slide 15

Slide 15 text

15 ● GROUP BY 列名1(, 列名2, …) ● 指定した列の値が同じ行を集約して それぞれ集約関数を適用する ● 右の場合、 user_idごとに、wallet表のamountの合計 を求めている 列の値が同じ行を集約 GROUP BY 基本構文

Slide 16

Slide 16 text

16 ● 集約関数の条件指定を書ける ● 他に書ける内容はWHEREと同じ ● WHEREに書けることはWHEREに書く ○ 先に行を削れば GROUP BYの効率が良くなる 行を選ぶ(GROUP BYの後) HAVING 基本構文

Slide 17

Slide 17 text

17 ● ORDER BY 列名1(, 列名2, …) ● デフォルト昇順 降順にしたいときは 列名の後にDESC指定 ● SELECTにない列名も 指定できる 行を並び替え ORDER BY 基本構文

Slide 18

Slide 18 text

18 ● UNION、UNION ALL…行をつけ足す ○ UNIONは重複削除&ソートされる ○ UNION ALLはつけ足すだけ ● EXCEPT…行を引く ● INTERSECT…共通行を取得 行を足し引き 集合演算 基本構文 画像出典: https://hrzine.jp/article/detail/249

Slide 19

Slide 19 text

19 1. SELECT a. 集約関数 2. FROM a. JOIN 3. WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. 集合演算 一覧(再掲) 基本構文

Slide 20

Slide 20 text

20 その他Tips

Slide 21

Slide 21 text

21 1. FROM 2. WHERE 3. GROUP BY 4. HAVING 5. SELECT 6. ORDER BY FROMが最初、SELECTは最後 実行順序 その他Tips

Slide 22

Slide 22 text

22 ● 手元で確認するとき何かと便利 ○ OFFSETも ● GORM(GoのORM)で内部的に使用されている ○ 1件のみ取ってくる想定の SQL 出力件数を指定 LIMIT その他Tips

Slide 23

Slide 23 text

23 ● サブクエリとも言う ● どの句にも書ける ○ よくある使い方は、他の SELECT結果からWHEREで絞り込む、など ● 相関サブクエリができたら一人前 (独断と偏見) 主軸のSELECT以外のSELECT文 副問合せ その他Tips

Slide 24

Slide 24 text

24 ● 他の行を参照する処理が簡単にかける ○ 1行前を取得、移動平均を取得、列値のランキング取得、など ● モダンめな技術 ● 気合があればサブクエリでも書ける ○ 計算速度はwindow関数の勝ち 表を俯瞰した演算ができる window関数その他Tips

Slide 25

Slide 25 text

25 サンプルデータベース(PostgreSQL) https://github.com/rare0b/postgres-practice