Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
【CATL】速習SQL
Search
rare0b
October 04, 2023
110
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【CATL】速習SQL
rare0b
October 04, 2023
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
2
310
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Navigating Weather and Climate Data
rabernat
0
220
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.4k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
22k
Agile that works and the tools we love
rasmusluckow
331
21k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
How to Ace a Technical Interview
jacobian
281
24k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Test your architecture with Archunit
thirion
1
2.3k
Google's AI Overviews - The New Search
badams
0
1k
Transcript
1 第3回バックエンド勉強会 2023.10.04 rare0b 速習SQL
2 目次 1. はじめに 2. 基本構文 3. その他Tips
3 はじめに
4 • 放送大学(通信制大学) 情報コース 3年 • 大学在学中、1年半の社会人経験有り • 元データベース管理者 •
SQL Roadmap全部分かるのが自慢 https://roadmap.sh/sql • 最近はReact/Go [会員 バックエンド] れあ 自己紹介 はじめに
5 話すこと はじめに • INSERT、UPDATE、DELETEも基礎はSELECT(思想強) ◦ SELECTわかればなんとかなる • 句を列挙してるだけ ◦
丁寧な実行結果添えたかった ◦ 体力尽きた SELECT文の話
6 表、行、列 はじめに 行(レコード)(件) 列(カラム) 表(テーブル)
7 基本構文
8 1. SELECT a. 集約関数 2. FROM a. JOIN 3.
WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. 集合演算 一覧 基本構文
9 • SELECT 列名1(, 列名2, …) • SELECT * は全列取得
• 冒頭に表名or表別名をつけると どの表の列か明示できる ◦ u.usernameのu. 列を選ぶ SELECT 基本構文
10 • SUM(合計)、AVG(平均) …数値型のみ • MIN(最小値)、MAX(最大値) …日付型、文字列型なども可 • COUNT(行数) …型によらず、集約後の行数を返す
集約方法を指定 集約関数 SELECT
11 • FROM 表名1(, 表名2, …) ◦ 表名2以降は JOIN句で指定することが多い •
表別名をつけられる ◦ users uのu 表を選ぶ FROM 基本構文
12 • INNER JOIN…条件一致行 • LEFT OUTER JOIN…条件一致行+条件不一致の左側全行 (右側しかない列はNULLが入る) •
RIGHT OUTER JOIN…条件一致行+条件不一致の右側全行 (左側しかない列はNULLが入る) • FULL OUTER JOIN…条件一致行+条件不一致の左右全行 (片側しかない列はNULLが入る) • CROSS JOIN…すべての組み合わせ行、いわゆるデカルト積、 JOIN句の基礎 • 自己結合…同じ表を2つ以上使う結合、違う表別名をつけて同じ表を別の表のように扱う 列をつけ足す JOIN FROM 「左側」はFROMで先に指定した方 可読性のため基本は左側結合 (右側結合を使わない )
13 • 等号、不等号 ◦ 不等号は<>か!= ◦ BETWEEN a AND bでa以上b以下
• IN、NOT IN (値1(, 値2, …)) • IS NULL、IS NOT NULL • EXISTS、NOT EXISTS 行を選ぶ WHERE 基本構文
14 • LIKE '%abc%’ ◦ %は任意の文字列 ◦ ‘%abc’なら前方曖昧一致、 ’abc%'なら後方曖昧一致 •
ANY、ALL…存在、全称 • AND、OR…複数条件 行を選ぶ WHERE 基本構文
15 • GROUP BY 列名1(, 列名2, …) • 指定した列の値が同じ行を集約して それぞれ集約関数を適用する
• 右の場合、 user_idごとに、wallet表のamountの合計 を求めている 列の値が同じ行を集約 GROUP BY 基本構文
16 • 集約関数の条件指定を書ける • 他に書ける内容はWHEREと同じ • WHEREに書けることはWHEREに書く ◦ 先に行を削れば GROUP
BYの効率が良くなる 行を選ぶ(GROUP BYの後) HAVING 基本構文
17 • ORDER BY 列名1(, 列名2, …) • デフォルト昇順 降順にしたいときは
列名の後にDESC指定 • SELECTにない列名も 指定できる 行を並び替え ORDER BY 基本構文
18 • UNION、UNION ALL…行をつけ足す ◦ UNIONは重複削除&ソートされる ◦ UNION ALLはつけ足すだけ •
EXCEPT…行を引く • INTERSECT…共通行を取得 行を足し引き 集合演算 基本構文 画像出典: https://hrzine.jp/article/detail/249
19 1. SELECT a. 集約関数 2. FROM a. JOIN 3.
WHERE 4. GROUP BY 5. HAVING 6. ORDER BY 7. 集合演算 一覧(再掲) 基本構文
20 その他Tips
21 1. FROM 2. WHERE 3. GROUP BY 4. HAVING
5. SELECT 6. ORDER BY FROMが最初、SELECTは最後 実行順序 その他Tips
22 • 手元で確認するとき何かと便利 ◦ OFFSETも • GORM(GoのORM)で内部的に使用されている ◦ 1件のみ取ってくる想定の SQL
出力件数を指定 LIMIT その他Tips
23 • サブクエリとも言う • どの句にも書ける ◦ よくある使い方は、他の SELECT結果からWHEREで絞り込む、など • 相関サブクエリができたら一人前
(独断と偏見) 主軸のSELECT以外のSELECT文 副問合せ その他Tips
24 • 他の行を参照する処理が簡単にかける ◦ 1行前を取得、移動平均を取得、列値のランキング取得、など • モダンめな技術 • 気合があればサブクエリでも書ける ◦
計算速度はwindow関数の勝ち 表を俯瞰した演算ができる window関数その他Tips
25 サンプルデータベース(PostgreSQL) https://github.com/rare0b/postgres-practice