はじめに

さあ、第10回の講座の内容にまいりましょう。データという名の宝を、思い通りに引き出す術——それがSQLの醍醐味でございます。基礎をひととおり学んだ皆さまにとって、今回はまさに「点が線になる」感覚を味わえる回となるでしょう。焦らず、しかし確かな歩みで、データベースの世界をともに深めてまいりましょう。

サマリ

今回は、SQLの基本構文をおさらいしながら、実務でよく使われるJOINやサブクエリ、集計関数といった中級テクニックを丁寧に解説します。「書けるけれど、なぜそう動くのか」という疑問を解消し、より洗練されたクエリが書けるよう、理論と実践の両面からアプローチしてまいります。

詳細

SQLとリレーショナルデータベースの関係を整理する

SQLとは、リレーショナルデータベース(RDB)を操作するための言語です。RDBは、データをテーブルという表形式で管理します。テーブル同士は「関係(リレーション)」で結ばれており、そこにSQLで問い合わせることでデータを取得・加工します。

SQLの命令は大きく分けて3種類あります。データを取得するDML(SELECT、INSERT、UPDATE、DELETEなど)、テーブル構造を定義するDDL(CREATE、ALTERなど)、そしてアクセス権を管理するDCLです。中級者として意識したいのは、それぞれの役割を明確に区別する習慣を持つことです。

SELECT文の精度を上げる——WHERE句とORDER BYの使いこなし

基本のSELECT文をより実践的に使うには、条件指定と並び替えの精度が重要です。WHERE句では、ANDやORを組み合わせた複合条件、LIKEによるあいまい検索、INによる複数値指定など、多彩な表現が使えます。

たとえば、会員テーブルから「東京在住かつ購入回数が5回以上」のユーザーを抽出する場合、次のような構文になります。

SELECT * FROM members WHERE prefecture = '東京' AND purchase_count >= 5 ORDER BY purchase_count DESC;

ORDER BY句にDESC(降順)を付けることで、購入回数が多い順に並べられます。こうした細かな指定が、実務のクエリ品質を左右します。

JOINで複数テーブルを結合する

実務のデータベースは、多くの場合、複数のテーブルに分散して情報が格納されています。そのテーブル同士をつなぐのがJOINです。

最もよく使われるのがINNER JOINです。これは、両テーブルに共通するキーが一致する行だけを取得します。一方、LEFT JOINは、左側のテーブルの全行を基準に、右側テーブルの一致する行を結合します。右側に一致がなければNULLが入ります。

たとえば、注文テーブルと会員テーブルを会員IDで結合し、誰がいつ何を注文したかを一覧表示する、といった処理が一つのクエリで実現できます。JOINの理解は、複雑なデータ抽出の基盤となる重要なスキルです。

集計関数とGROUP BYで分析クエリを書く

データ分析の場面では、集計関数が欠かせません。COUNT(件数)、SUM(合計)、AVG(平均)、MAX/MIN(最大・最小)は特によく使われます。

GROUP BYと組み合わせると、グループごとの集計が可能になります。たとえば「都道府県別の平均購入金額」を出したい場合、次のような構文になります。

SELECT prefecture, AVG(purchase_amount) FROM orders GROUP BY prefecture;

さらにHAVING句を使うと、集計結果に対して条件を絞り込めます。WHERE句は集計前、HAVING句は集計後に条件を適用する——この違いを押さえることが、正確なクエリを書く上で非常に重要です。

サブクエリで柔軟な問い合わせを実現する

サブクエリとは、クエリの中に別のクエリを埋め込む手法です。たとえば「平均購入金額を超えている注文だけを取得する」という処理は、サブクエリなしでは一度では書けません。

サブクエリをWHERE句の中に記述することで、動的な条件指定が可能になります。また、FROM句にサブクエリを置く「インラインビュー」という手法も実務でよく登場します。

ただし、サブクエリが深くなるほど可読性が下がり、パフォーマンスにも影響します。JOINで書き換えられるケースはJOINを優先する、という判断力も中級者として身に付けたいセンスです。

おわりに

今回は、SQLの実践的な中核——JOIN、集計、サブクエリ——を丁寧に見てまいりました。「なんとなく動く」から「なぜ動くかわかる」へ、皆さまの理解がひとつ上の階へ昇ったことと存じます。クエリを書くたびに、その構造の意味を問う習慣を大切になさいませ。次回は「Gitの実践的な使い方」をテーマに、チーム開発の現場で本当に役立つ知識をお届けいたします。どうぞお楽しみに。

ABOUT ME
oyashumi
5億年前から来た全知全能の絶対神。 アノマロカリ子とハルキゲニ男を従え、 現代のあらゆる知識を手に入れようとしている。 生成AIは神に仇なす敵だと思っているが その情報に踊らされていたりもする。 カリ子とゲニ男からの信頼は篤い。