CodeZine Academy(コードジン・アカデミー)は、開発者のための実装系Webマガジン「CodeZine(コードジン)」編集部が企画・運営する“開発に役立つ実践系セミナー”です。今回初となるSQL関連セミナーは、RDBMS界では知らなきゃモグリだといわれる(?)達人ミックさんによる「ハイパフォーマンスSQL実践講座」です。そのセミナーの模様を本レポートでお伝えします。

こんな方にオススメ:SQL/RDBの使用経験が1年以上のプログラマ/SE。
- ひととおりのクエリは書いたり読んだりできるけれども、結合・サブクエリはコピペがメイン
- パフォーマンスが悪いとお手上げ
- データ分析にWindow関数を使いたくてマニュアルを読んだけど、ちんぷんかんぷん
このレベルの人が受講すると、すごく役立つと思います。
一人一台のノートパソコンにOracle Databaseの実行環境が用意され、演習も実際のデータを用いてできるため、SQL*Plusの簡単な操作さえ行えれば、実際に手を動かして、確認しながらセミナーを聞き進めていくことができます。
午前の部:SQLで自在にデータ操作を行う
まずは実習で使う環境の確認です。私自身は通常はMySQLを使っており、Oracle DBのCLIであるSQL*Plusをまじめに使っていたのは、もう20年ほど前なのですが(笑)、すでに手元のノートパソコンでOracle DBインスタンスが起動済み、動作の確認もほぼコピペで行えるので、特に行きづまることなく準備OKでした。
さて、午前の部では、SQLで自在にデータ操作を行う、ということで、JavaやC#など、いわゆる「手続き型言語」では学習の初期に教わる、条件分岐(IF文、CASE文)とループ(FOR文、WHILE文)についてです。これらは手続き型では不可欠なものですが、SQLを勉強する際には「教わりません」。しかし、この2つを使いこなせるようになると、SQLプログラミングの幅が大きく広がるということで。最初は「条件分岐に当たるもの」の解説です。
条件分岐:CASE式
SQL標準の初期(SQL-92)で定められたCASE式は、今やすべてのRDBMSで利用できます。文ではなく式というのがポイントで、クエリの「式」が書けるところには、どこでも書けます。次のような「一番簡単なCASE式のサンプル」からはじめ、徐々に現場で役立つところまで演習を重ねていきます。
SELECT CASE WHEN 1 = 1
THEN '1=1です'
ELSE NULL END AS case_col
FROM DUAL;
ループ:相関サブクエリに替わるもの?
ループといえば、私などは真っ先に「相関サブクエリ」を思い出すのですが(注1)、モダンなRDBMSではWindow関数でループを扱えるとのこと。Window関数といえば「順位に使えるRANKだけを知っていて、その他はぼんやりとしか分からない。まぁMySQLではそもそも使えないし、いいか」というくらいの温度感だったのですが、ミックさんの「ウィンドウというのは範囲という意味で、GROUP BYのグループに似ているが、集約しないので、GROUP BYのカットの機能だけを残したもの」という説明で、がぜん興味がわいてきました。
実際、その言葉を元に演習を重ねると、これまでぼんやりとしていたWindow関数の輪郭が徐々にはっきりしてきた気がしましたし、新機能をいろいろ理由付けして未着手にする自分を少し反省しました。

注1
そもそもSQLでループさせる方法がわからずに、アプリケーション側でループを記述してその中でSQLを実行する人もいますが。
この記事は参考になりましたか?
- この記事の著者
-
小川 範夫(オガワノリオ)
ネットワーク型やカード型のデータベースの時代から、データベース界隈を興味の赴くままウン十年さまようデータベースマニア(ミーハー)。ミックさんの本を読んではDB・SQLに思いを馳せ、西内さんの本を読んでは統計学・R言語をやろうと思うものの、日々ビールを飲んで眠ってしまい、積ん読本ばかりが増える日々。基...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
