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
そして僕は令和でクエリを書いた
Search
02
November 16, 2019
Programming
0
260
そして僕は令和でクエリを書いた
2019/11/16 TeckUp! LT大会#2 in 代々木 で話した時のスライドです
02
November 16, 2019
Tweet
Share
More Decks by 02
See All by 02
Random\Randomizer クラスで日常のあれこれを解決しよう! / Random\Randomizer class solves familiar trouble
cocoeyes02
0
250
BASEにおける インシデント対応フローと工夫
cocoeyes02
0
640
AWS Lambdaから始める Devチームの小さなDevOps改善 〜QCDどれも諦めない運用を目指して〜 / Start to improving small DevOps with AWS Lambda by Dev Team
cocoeyes02
0
1.1k
PHPUnit 10 概論 / Introduction of PHPUnit 10
cocoeyes02
2
5.4k
テスト駆動開発本をPHPで写経してみた / Copy Test Driven Development Code by PHP
cocoeyes02
0
300
テストコードリーディングのみでPHPUnitの仕様を理解してみる / Try to understand PHPUnit specification with test code reading only
cocoeyes02
1
2.3k
カンファレンススピーカー入門〜登壇するぞ!って決めてからトークするまで〜 / How to talk in Tech Conference
cocoeyes02
2
1k
コミットメッセージ規約 「Conventional Commits」を導入してみよう! / Let's use Conventional Commits
cocoeyes02
5
8.4k
Composer 2.0 新機能概論 / New feature introduction of Composer 2.0
cocoeyes02
1
2.2k
Other Decks in Programming
See All in Programming
PostmanでAPIの動作確認が楽になった話
h455h1
0
170
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
7
1.1k
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
Ruby Function Composition
bkuhlmann
1
330
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
120
MetricKitで予期せぬ終了を検知する話 / Detect unexpected termination with MetricKit
nekowen
1
190
AmperとFleetを使ったAndroidアプリ
yoppie
0
230
Apache Hive 4 on Treasure Data
ryukobayashi
0
360
Polars入門
daikikatsuragawa
1
110
GitHub Copilotのススメ
marcy731
1
200
雑に思考を整理する技術と効能
konifar
60
29k
Blue/Greenデプロイの導入による 運用フローの改善
kudoas
1
390
Featured
See All Featured
Facilitating Awesome Meetings
lara
43
5.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Mobile First: as difficult as doing things right
swwweet
217
8.6k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
YesSQL, Process and Tooling at Scale
rocio
165
13k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
41
4.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
18
6.4k
Agile that works and the tools we love
rasmusluckow
325
20k
Designing for Performance
lara
602
67k
[RailsConf 2023] Rails as a piece of cake
palkan
24
4k
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 つクエリを作る」 を意識するならば、先にテーブル関係や条件を書きた いからこの順番で書いています
最後に ここまで色々言いましたが、複雑なクエリは書か ないに越したことはないです アプリケーションのクエリであれば、特にそう やるなよ!絶対やるなよ! できるならばテーブル設計を見直すなどして、簡 単なクエリデータを取得的るようにしましょう