先日、職場の方から「石川さんは、どうやってSQL勉強したんですか?」と質問をいただきました。言われてあとから気づいたのですが、ちゃんとしたSQLの教育を受けたことって、ありませんでした。では、どうやって学んだのでしょうか。
結論から言うと、Oracleのマニュアルです。Oracleのマニュアルは、膨大な量があって、どれを読んだらいいのか、本当に迷います。その中で、SQLを勉強しようとする方のためには、「SQLリファレンスマニュアル」これだけですね。今でもOracleさんのホームページで提供されていますので、本気で学びたい方は検索してみてください。最初は、この中の「SELECT」についての記述を読んでは試し、読んでは試し、してみてください。そのうちに何となくわかってくると思います。「SELECT」に慣れて余裕が出てきたころに、マニュアルの他の記載を見るのがよいでしょう。そこには、リテラルや値の種類、関数の種類などが書かれてあって、読めばより理解が深まって、SQLをもっと便利に使えるようになると思います。
もし、もっと深く理解していきたいと思った人は、SQLが作られる元となった知識として「関係モデル」の「関係代数」を学ぶのがよいと思います。関係とはおおよそ表のようなものを表す概念のことで、関係代数は、それらの演算について述べられたものです。詳しくは、C.J.Dateさんによる「データベースシステム概論」を参照してください。関係代数の和、交わり、差、直積などについて詳しく記載されていて、関係というか、表というか、セットというか、そういう概念の演算について深く理解できるようになります。
ぼくがSQLを初めて使ったのは、おそらくOracle6の時代で、とても衝撃的だったのを覚えています。当時はデータベースというものの存在も知らず、データはすべてファイルに書かれているのが当たり前で、システムごとプログラムごとにファイル定義を作り、そのルールに従ってファイルオープンし、読み書きして利用するのが当たり前だと思っていたからです。当時はSQLでデータを取得する仕組みが全く理解できず、とにかくこうやればデータが取れる、という利用方法でした。データベースが現在のように利用されるようになるとは夢にも思っていませんでした。
Oracle7になって、本格的にOracleを使うようになったのですが、当時はまだインターネットもそんなに普及しておらず、すべて紙のマニュアルだよりでしたね。わからないことはすべて、マニュアルを読んで試してみる、ということしかできなかった、というわけです。
当時のOracleを使っている人たちの間では、今よりももっとたくさん色々なパフォーマンス上の問題があって、ぼくにはそういう問題を解決する機会も多かったように思います(今でもそういう問題って起きているのかな?)。そうそう、SQLをすんなりと書けるようになったら、次に、パフォーマンスの問題が待っていました。そんな書き方したら、Oracleちゃんは、うまく動いてくれないよ~、というヤツですね。チューニングに関するSQLについては、また、別の機会に書きたいと思います。


