プログラミング入門

SQL初心者がサブクエリで迷子に!自分でも読めないコードに絶望した日

こんにちは、SQL初心者の奮闘記をお届けします。今回はまさに「自分の書いたコードが自分で読めない」という恐怖体験をした日の話です…。

今日の失敗:複雑怪奇サブクエリに挑戦

SQL初心者だったの私は、ついにサブクエリに手を出しました。「少し複雑な条件をSQLで書きたいな」と思ったのが運の尽き。気づけば入り子に入り子を重ね、もはや自分でも何を書いているのか分からない状態に。「どんな悪魔が飛び出してくる呪文なんだ、これは」と黒魔法の呪文を唱えている気分でした。

(例)

SELECT *
FROM orders
WHERE customer_id IN (
    SELECT customer_id
    FROM customers
    WHERE region_id IN (
        SELECT region_id
        FROM regions
        WHERE country = 'Japan'
    )
);

書いた直後は「なるほど、これで目的達成!」と思ったのですが、翌日見返すと意味不明。「なぜこんなにネストさせたんだっけ…?」「IN句の中のIN句の意味は…?」と頭がパニック。

学び:サブクエリはシンプルに書く

この経験から学んだことは、「初心者ほどサブクエリはシンプルに書くべき」ということです。ネストを深くしすぎると、後から自分も読めなくなるし、他の人に説明するのも大変。読みやすさを優先することの大切さを痛感しました。

例えば、上のクエリも一度別の変数や一時テーブルに分けると、理解しやすくなります:

-- まず日本の地域を取得
WITH japan_regions AS (
    SELECT region_id
    FROM regions
    WHERE country = 'Japan'
)
-- 日本の地域の顧客を取得
, japan_customers AS (
    SELECT customer_id
    FROM customers
    WHERE region_id IN (SELECT region_id FROM japan_regions)
)
-- 注文を取得
SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM japan_customers);

こうすると、一つひとつのステップが明確になり、翌日見ても「なるほど、こういう流れか」と理解できます。

次の日の改善:コメントと段階的テストで安心

翌日、同じクエリを書くときは、必ずコメントをつけて段階的にテストするようにしました。「まず顧客IDを取得 → 次に注文を取得」とステップごとに確認すると、呪文感がぐっと減ります。初心者でも安心して書けるし、読み返すときも怖くありません。

当時の失敗は焦りと絶望でしたが、学びと改善のヒントになりました。サブクエリ初心者の皆さん、ネストを深くしすぎず、コメントと段階的テストを忘れずに!

最後に、私が学んだ格言:

「初心者のサブクエリはシンプルイズベスト」

SQLと格闘の日々…「自分で読めるコードを書く」を念頭に!


ABOUT ME
ショート
文系出身・一般&医療事務歴ありの会社員。 「パソコン苦手…」「残業が当たり前…」そんな日々を変えたくて、40代から独学でPythonやExcelの自動化に挑戦中。 プログラミングもブログも初心者レベルからの出発ですが、“早く帰りたい”一心で効率化を追求しています。 つまずいたリアルな失敗談や、「これならできた!」という事例を通して、パソコンに自信がない人の味方になれるブログを目指しています。