スッキリわかるSQL入門

「もし高校野球の女子マネージャーがRDBMSをマネージメントしたら」

ねぇ、みんな聞いて!

相磯 杏(あいそ あん)は、監督の隣で思い詰めていた。

監督「練習後に皆に集まって貰ったのは他でもない1。相磯から話しがあるそうだ。聞いてやってくれ。」

相磯「・・・あの・・・。ねぇ、みんな聞いて。私たち、そろそろ変わらなきゃいけないと思うの!」

高校野球のマネージャーといえば、すぐに「快活な女性」を思い浮かべるかもしれないが、相磯は違う。

ひとり黙々とボールを磨いたり、熱中症対策の水を机の上に並べたり、ライバル校の試合録画をダビングしたり。向日葵というより鈴蘭のように、みんなのプレーを見守ってきた。

そんな相磯が思い詰めた表情で口を開く理由を、選手たちはなんとなくわかっていた。

監督「おまえら、みんなプレーは良いんだが、バラバラすぎる。たとえば、舞と久留、オレがおまえらに併せてサインを変えてるのは知ってるな」

そう。監督は9名の選手ひとりひとりにあわせて、違う「サイン」を出さなければならなかった。

「FULL OUTER JOIN」を伝えるための絶妙な手の仕草を、ファーストの久留やセカンドの佐波のような内野陣は理解する。しかし、舞や英二はどうしてもわからないというのだ2

久留「わかってる。わかってるべ。」

監督「いいやわかってないっ! この間の試合の走塁3、オレが必死に「戻れ」ってサイン4を送ったのに、おまえ理解せずに走っちゃったぢゃないかッ!」

そう。久留・英二・舞の3名は、大事な走塁になるとつい緊張して「戻る」ということができない。

まぁ、舞は数年前まで普通の走塁でも戻れなかったことを考えれば、むしろ成長を褒めてやるべきかも知れないが。

相磯「ねぇ、州暮くんも掃除ばかりしてないで、聞いてよ!」

州暮「...ったく、めんどくせぇ。わかったよ、聞きゃーいいんだろーが。」

ホウキとチリトリを乱暴に投げ捨てると、ユニフォームまでラッパズボンにしている州暮はドカっとパイプ椅子に座る。

しかし相磯がそこまで真剣になるのには理由があった。

最近ライバル校「エヌ・オー・スクール」の野球部が実力をメキメキつけてきているのだ。

エヌ・オー野球の特徴はなんといっても「スピード」だ。

平凡なシングルヒットが多いのだが、それでも一気に2つも3つも塁を進めてしまうことがある。

しかも最近、エヌ・オーの各選手は古参選手「芽夢」のやりかたでプレーを統一をし始めてきたというではないか。

「このままでは愛想を尽かされて、監督がエヌ・オーにいっちゃう...」

そんな悪夢で目が冷めた朝も、相磯にはあった。

相磯「私たちがバラバラだと監督が困るから、標準を考えてきたの。みんなで、これを使おう?」

相磯は机の上に資料を広げた。期末試験が迫る中、寝る時間を割いて作ったものだ。

しかし、選手の反応はイマイチだった。

舞「えー。でもー。わたしー。完全外部結合とか−。したことないしぃ−(てへぺろ)」

久留「オラ、昔からの大切なファンがい゛るから。DUAL君とも分か゛れたくねぇ。」

雷人「あ、おれパス。そういうカタッくるしいの、ちょーダリぃじゃん?」

相磯「(みんなが、ゼンゼン話を聞いてくれない...グスン (>_<))」

州暮「ちょっ、おまっ.....泣くなよ。わ、わかったよ、オレ、従ってやらねーこともねぇから。」

相磯「州暮くん! (うるるんっ)」

州暮「べっ.../// 別にオマエのためじゃねぇよ...。ただ単に、掃除以外にも、なんか特技が欲しかった。それだけだ。」

相磯は心に決めた。

今は州暮だけでも頑張る。そして、監督を甲子園に連れて行くって。

(終)

あぁ、なげぇ。

書いてて後半飽きてきました。それはそうとGW前半三日目、いかがお過ごしでしょうか。今日もお仕事、takaxiです。

先日発売の拙著「スッキリわかる SQL 入門」の執筆中に、頭の中をぐるんぐるん回ってた妄想を、文章にしてみました。

なぜこんな妄想が頭を回ったかというと

怨恨(えんこん)の線で、まず間違いありません。

ほんとに参りました。

前回のブログでも書いた通り、拙著では8つのDBMSに対応した解説を行いました。その8つとは

  • Oracle
  • DB2
  • SQL Server
  • MySQL
  • PostgreSQL
  • SQLite
  • H2
  • Derby
5

 

ですが、筆を進めるほどに沸き立つ怒り

九州弁・関西弁・関東弁のトリリンガルたる私をして、

ところでてめぇら、標準語って知ってるか。

と言わせしむほど、各製品で方言がバラバラなのがデータベースの世界。

一応、ISO/ANSIの標準SQLが定められていますが、まー各キャラの個性が濃いこと濃いこと。

Javaで「実行処理系が違うとスレッドの動きが違う! Write Once Run Anywhereじゃねぇ!」なんてクレームに対して、「それがどうした、すっこんでろ!」と怒鳴りたくなるぐらい、SQL界のフリーダムさはとどまるところを知りません。

でも「標準SQLだけで解説」を避けた理由

SQL入門書の執筆をする立場からすると、「この本は標準SQLに従って書いてあります」で済ますのが一番効率的です。説明もややこしくなりません。

でも、それはやめました。

ANSI/ISO標準と各RDBMSとの実装の間には、初学者がつまづくような違いがあまりにたくさんありすぎます6

一万近くのテストケースまわしてみてわかったことですが、おそらく標準SQLの解説だけで問題なく動くのはPostgreSQLぐらいじゃないかなと思います。

一方、全ての学び手のうち、PostgreSQLを使う人の比率はさほど高くないかなと考えました7

オープン系開発メインのところではMySQLが多いでしょうし、わりと堅めのところでは「うちはOracleだから。学習からOracleのXEを使う」っていうところもあるでしょう。昨日のブログエントリ「SQL入門書として「H2対応」したかった理由」でも書いたように、複数のDBMSの知識を知っておきたい現場もあるでしょう。

あくまで勉強用だからと割り切ることも随分考えたのですが、やはりデータベースについては各製品ごとにカラーや文化が大きく違うため、「このDBMS製品を使いながら学びたい」という願いは極力尊重されるべきかなと思いました。

善し悪しは別としても、仕様に対して、実装の力や重要性がかなり強いというデータベース界の現状から目を反らすわけにもいかないと思いまして。

「標準SQLの知識だけ」では学べない

私は標準SQLの存在価値は非常に大きいと思います。実際、解説の多くの部分は中立的な書き方で行うことができたのは、標準のおかげです。

でもSQL標準って、抽象クラスなんですよね。いかんせん、動く実体がない

でも、学び手として大事なことは、実際に触って動かして学ぶこと

つまり、

「動かせないもの(=SQL標準)の知識だけでは、学び手は本当の意味での学習を遂行できない」

と思ったんです。

そこで拙著解説では、「中立的なもの」にとどめず、特定のDBMSについて違いがあるところは解説をしっかり含めるようにしました。もちろん、すべては無理ですが入門者の学習に影響がありそうなところは、極力盛り込んだつもりです。

また、巻末には、8つのDBMSごとの「方言」や違いをまとめたリファレンスを収録しています。たとえば、

Oracle DB2 MSSQL MySQL PGSQL SQLite H2 Derby
FULLJOINできるか? Yes Yes Yes No Yes No No Yes
DDLはロールバックできるか? No Yes Yes No Yes Yes No Yes

8

みたいに、実務上考慮が必要な各種の「違い」を徹底的に調査して掲載しました。入門時のみならず、現場で開発するときにも役立つ内容かと思います。

もちろん、『エラーで困った時こそ、役に立ちたい。』でご紹介した「エラー解決 虎の巻」も、巻末附録につけてます。よろしければ、こちらも併せてお役立てください。

まとめ

次の日、練習試合で事件は起こった。

一発逆転の場面でバッターボックスに立とうとする悪瀬に対して、監督と相磯が「同時に声援を送る」ということをしてしまったのだ9

救命士「2日前のバックアップを準備しとくよう、すぐに病院に連絡いれてくださいッ!」

監督「悪瀬! しっかりしろ! もうすぐ病院だからなっ!」

意識を失う悪瀬を前に、もっともっと選手のことをよく知らなければと心に刻んだ監督であった。

 

参考


このブログ記事は、著者の個人ブログ(flairDays)から移転掲載されたものです。
  1. 新三大 日本人としては死ぬまでに口にしてみたい台詞」の一つ
  2. 監督がNINKUバリに高速で印を切るので俗人には見えないという噂もある
  3. CREATE TABLE
  4. ROLLBACK
  5. んっ? Access?Sybase?Bento?Approach?桐?
  6. 例えば、文字列の長さを返す関数とかからしてバラバラじゃないですか。ANSI/ISOのやつ、気持ちはわかるけど、ナゲーヨって思うし...
  7. ユーザー会のみなさん、ごめんなさい。でもDBMSの中ではポスグレかなり好きです。
  8. あと、LIMIT使えるかとか、連番の振り方どうするかとか、サポートする分離レベルがどうだとか
  9. ことの重大性がわからないかたは、「Access 同時アクセス ぶっこわれる」で検索

-スッキリわかるSQL入門
-