Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
そして僕は令和でクエリを書いた
02
November 16, 2019
Programming
0
170
そして僕は令和でクエリを書いた
2019/11/16 TeckUp! LT大会#2 in 代々木 で話した時のスライドです
02
November 16, 2019
Tweet
Share
More Decks by 02
See All by 02
コミットメッセージ規約 「Conventional Commits」を導入してみよう! / Let's use Conventional Commits
cocoeyes02
5
5.8k
Composer 2.0 新機能概論 / New feature introduction of Composer 2.0
cocoeyes02
1
1.6k
「登壇できない」それ本当ですか? / You cannot become conference speaker ... Is it true?
cocoeyes02
0
1.3k
事業フェーズから見る若手エンジニアの生存戦略 / Survival strategy of youth engineer from the point of view of business phase
cocoeyes02
0
1.1k
リーダブルコミットのすゝめ / Recommendation of Readable Commit
cocoeyes02
5
4k
テストピラミッドを意識したテストコード実装戦略
cocoeyes02
0
630
オンラインホワイトボードサービスmiroが最高すぎるはなし
cocoeyes02
0
110
WACATEとテストと開発エンジニア
cocoeyes02
1
970
PHPerのための テストコード入門.
cocoeyes02
1
2.5k
Other Decks in Programming
See All in Programming
VIMRC 2022
achimnol
0
120
回帰分析ではlm()ではなくestimatr::lm_robust()を使おう / TokyoR100
dropout009
0
4.5k
WindowsコンテナDojo:第6回 Red Hat OpenShift入門
oniak3ibm
PRO
0
170
There's an API for that!
mariatta
PRO
0
100
ECサイトの脆弱性診断をいい感じにやりたい/OWASPKansaiNight_LT1_220727
owaspkansai
0
280
Isar勉強会
hoddy3190
0
340
アジャイルで不確実性に向き合うための開発タスクの切り方
tanden
4
1.1k
これからのスクラムマスターのキャリアプランの話をしよう - スクラムマスターの前に広がる世界
psj59129
0
190
「困りごと」から始める個人開発
ikumatadokoro
4
240
JetpackCompose 導入半年で感じた 改善点
spbaya0141
0
140
パスワードに関する最近の動向
kenchan0130
1
320
Pythonによる開発をアップデートするライブラリの紹介
daikikatsuragawa
1
330
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
The MySQL Ecosystem @ GitHub 2015
samlambert
239
11k
Side Projects
sachag
450
37k
The Mythical Team-Month
searls
210
39k
Designing with Data
zakiwarfel
91
4k
Thoughts on Productivity
jonyablonski
44
2.4k
The Invisible Side of Design
smashingmag
290
48k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
29
4.4k
Bash Introduction
62gerente
598
210k
What’s in a name? Adding method to the madness
productmarketing
11
1.6k
Testing 201, or: Great Expectations
jmmastey
21
5.5k
Transcript
そして僕は令和で クエリを書いた 02 TeckUp ! LT 大会#2
自己紹介 名前:02 (大津 和槻) Twitter: @cocoeyes02 所属:株式会社ウィルゲート バックエンドエンジニア 趣味:ゲーム、カホン 特徴:カンファレンスジャンキー
php 系カンファレンスのスタッフやってたりしま す
SQL を使って クエリを 書いたことはありますか?
SQL を使って 複雑なクエリを 書いたことはありますか?
02 は運用保守で複雑なクエリ を書くときがあります ( データ調査、KPI 自動算出...)
平成時代の02 は複雑なクエリ かけませんでした
令和時代の02 が複雑なクエリ を書くときに 意識したことをいくつか ピックアップしました
LT のゴール 複雑なクエリを書くときに 必要なことがある程度わかる
複雑なクエリを書くときに 必要なこと 1. ベン図を意識せよ 2. いきなり1 つの複雑なクエリを作らない 3. 句を書く順番を意識する
ベン図を意識せよ
ベン図?
ex. アクティブな男性ユーザのCV 数
いきなり1 つの複雑なクエリ を作らない
ex. 今年新規登録した アクティブな男性ユーザのCV 数
出てくる悩み CV 数をテーブル結合しても、1 件もヒットしてい ない!
出てくる悩み CV 数をテーブル結合しても、1 件もヒットしてい ない! 作成したけどなんかデータがおかしい!けどどこ で間違えているかクエリが複雑でわからない!
出てくる悩み CV 数をテーブル結合しても、1 件もヒットしてい ない! 作成したけどなんかデータがおかしい!けどどこ で間違えているかクエリが複雑でわからない! アクティブの定義が変わって変更しなきゃいけな いけど、クエリが複雑で動作確認ができない!
_人人人人人人人人人人人人人人_ >何の戦果も得られませんでした<  ̄Y^Y^Y^Y^Y^Y^Y^^Y^Y^Y^Y^  ̄
まずは1 つ1 つクエリを書きま しょう 今年新規登録をしたユーザを取得するクエリ 男性ユーザを取得するクエリ アクティブ情報を取得するクエリ CV 対象を取得するクエリ
まずは1 つ1 つクエリを書きま しょう 今年新規登録をしたユーザを取得するクエリ 男性ユーザを取得するクエリ アクティブ情報を取得するクエリ CV 対象を取得するクエリ それぞれのクエリが正しいかは、この段階で検証しま
しょう
複数のクエリを合わせて、 1 つクエリを作る FROM 句や、JOIN と ON 句を使って結合していく 必要であれば、FROM 句、JOIN
と ON 句、 WHERE 句でサブクエリも使う
句を書く順番を意識する
よーし、まずは SELECT 句から書いて…
よーし、まずは SELECT 句から書いて…
02 が書く句の順番 1. FROM 2. JOIN とON 3. WHERE 4.
GROUP BY 5. HAVING 6. SELECT 7. DISTINCT 8. ORDER BY 9. LIMIT
SQL の評価順序 1. FROM 2. JOIN とON 3. WHERE 4.
GROUP BY 5. HAVING 6. SELECT 7. DISTINCT 8. ORDER BY 9. LIMIT
なぜSQL の評価順序順? 先にテーブル関係(FROM ~ JOIN とON 句)を書 きたい 次に条件(WHERE ~
HAVING 句)を書きたい 整理(SELECT ~ LIMIT 句)は最後に書きたい
なぜSQL の評価順序順? 先にテーブル関係(FROM ~ JOIN とON 句)を書 きたい 次に条件(WHERE ~
HAVING 句)を書きたい 整理(SELECT ~ LIMIT 句)は最後に書きたい 「ベン図を意識する」 「複数のクエリを合わせて、1 つクエリを作る」 を意識するならば、先にテーブル関係や条件を書きた いからこの順番で書いています
最後に ここまで色々言いましたが、複雑なクエリは書か ないに越したことはないです アプリケーションのクエリであれば、特にそう やるなよ!絶対やるなよ! できるならばテーブル設計を見直すなどして、簡 単なクエリデータを取得的るようにしましょう