SQL初学者向けのWITH句とサブクエリの使い分け
この例では、usersテーブルからageが20以上のユーザーを取得し、その結果をtmp_tableという一時的なテーブルに格納しています。その後、tmp_tableからnameに「山田」を含むユーザーを取得しています。WITH句を使うことで、テーブルの結合などをする必要がなく、SQL文が簡潔になっています。またWITH句によって生成される一時的な結果セットを共通テーブル式(CTE、Common Table Expressions)と呼びます。
WITH句のメリットとデメリットWITH句を使うメリットとしては、チームへクエリを共有する際など、クエリの可読性が高まりやすくなります。この後説明するサブクエリだと、複雑なケースのクエリの場合読みづらくなってしまいますが、WITH句で必要な単位で一時的なテーブルを作成することでで読み取りやすくなります。複数人メンバーでのクエリを共有する場合や、自分の作業としてクエリをわかりやすく整理しておきたい場合などはWITH句をお勧めします。 ちなみに上の例をサブクエリに置き換えると下記のようになります。
SELECT name FROM ( SELECT id, name FROM users WHERE age >= 20 ) AS tmp_table WHERE name LIKE '%山田%';サブクエリについて
SELECT name FROM users WHERE id IN ( SELECT user_id FROM orders WHERE price >= 5000 );WITH句とサブクエリの使い分け・パフォーマンスの違い
WITH句とサブクエリのパフォーマンスについては、データベースの種類や実際のクエリの内容によって異なりますが一般的には、WITH句を使った場合の方がパフォーマンスが良いとされています。 WITH句を使うことで、一時的なテーブルを作成することができそのテーブルを使ってクエリを実行するため、データアクセスの回数が少なくなるからです。ただし、WITH句を使う場合でも、必要なデータだけを取得するようにクエリを最適化することが重要です。また、サブクエリを使う場合でも、必要なデータだけを取得するようにクエリを最適化することが重要です。
WITH句で作ったデータは一度その部分が作成されるとそのクエリ内セッションではメモリに保存されます。そのため、WITH句で使ったテーブルをその後何度か利用するケースの場合はWITH句を使うほうがパフォーマンスが増します。 PMのデータ分析ではそこまで気にすることもないと思いますが、知識として覚えておくことをオススメします。
まとめ
異なるテーブルを結合してデータを出す時に、必要になってくる… SQLのLENGTH関数は、文字列の長さを取得するための非常に便利な… SQLでWhere句を使って条件を絞り分析をしたい 今日はデータ分析… 先日公開した記事で、SQLを使った上位10件や上位N%のランキング… 「2:8の法則」をご存知でしょうか。顧客全体の2割である優良顧… よく読まれている記事エンジニア出身プロダクトマネージャー / ビジネス・プロダクト両方好き エンジニア〜社内起業を経て、大手IT企業のProduct Ops.と事業戦略に従事 / 個人でtoCサービス運営やアドバイザリーもやってます