前々回で相関サブクエリのかんたんな紹介、
前回で EXISTS を使用した相関サブクエリの紹介、をしてきました。
両方とも、例では相関サブクエリをひとつだけ使用しましたが、
ひとつだけしか利用できないわけではありません。
今回は 2つの相関したサブクエリを比較させることを通して、
複数の相関サブクエリを利用することも可能だということをお話したいと思います。
前回、相関サブクエリは、
メインのクエリの各行に対して相関したサブクエリの結果を利用する、
ということの簡単な解説をしました。
前回は、単純な WHERE 句の比較条件での相関した選択でしたが、
実際の相関サブクエリは EXISTS述語と共に使われていることが多くあります。
WHERE x = y とか WHERE x IN (a, b, c) などといったかたちはパッと見て理解できると思うのですが、
WHERE EXISTS (SELECT ...) というのはあまり直感的にわかりやすいものではないのではないでしょうか??
今回は、この EXISTS述語を使った相関サブクエリの簡単な説明をしてみたいと思います。
以前、SQL の書き方について、ヴェン図を描くように、データの集合の重なりを考えていくことを基本として紹介しました。
ほとんどの SQL はその考え方でいいのですが、「相関サブクエリ」という形式のものは逆にそのイメージにとらわれて解釈がかえって難しくなることがあります。
「WEB+DB PRESS Vol.57」 の第二特集として、「RDB & SQL 入門」という総計 29ページの特集記事が載っています。
「データベースとは何か」から始まって、SQL による「データ操作の基礎」、「少し高度な SQL」から「トランザクションと更新」に至るまで、とても簡潔にわかりやすくデータベースの基本的な知識がまとめられています。
例として載っている SQL は全部 DB2 for IBM i で実行してみましたが、もちろん(そもそも実行できないことになっている例を除いて)全部実行可能でした。
最新の DB2 for i である V7R1 はもとより、その一つ前のバージョンである V6R1(2008年出荷) でもすべてきちんと正しい結果が返ってくることを確認ずみです。
あらためてリレーショナルデータベースと SQL の知識を整理してみるのはいかがでしょうか??
DB2 for i を活用するための新たな視点が得られると思いますよ!!
今まで、「RPG は C の標準関数もカンタンに使えるハイブリッド言語!?」、「C より RPG の方が関数の使い方がわかりやすい!?」、「ILE RPG と C は似ている!?」といった RPG についての一連の記事で、C との類似性、RPG のシンプルさ、「関数」の有用性についてお話ししてきました。
ポイントは三つ、
になります。
逆に言えば、C をちゃんとわかっている人であれば RPG なんてとっても簡単なはずなので、
RPG プログラマーが少ない、といってもそれほど心配することはないのでは?! と言う気もしますね。
プログラムの構造も、構文もとてもよく似ていることには理由があります。
これは、RPG が C を真似した、というわけではなく必然的に似てしまっている、ということなんですね。
このへんで、なぜ「関数」を使うか、についてまとめておきましょう。
前回と前々回は、関数の使い方をカンタンに見てきました。
RPG では、C でのちょっと初心者には難しいポインタの書き方等々に煩わされずに「関数」を書ける、というようなお話をしました。
関数を自由に使いこなすことができるようになるためには、本当は関数の定義の仕方と、どう使うと効果的かの二点がわかればいいわけです。
処理してもらいたい結果が増えただけで、ポインタの知識やその書き方の知識、さらに引数が"値渡し"か"参照渡し"かなどということまで知らないといけない、というのはやはり初学者にとっては正直厳しい。
そういう枝葉末節にとらわれず、まずは「関数とはどういうものか」を大づかみに理解することができる、ということができるとプログラミングを学ぶことはもっとラクになります。
細かいことや難しいことは、おいおい必要になったときにおぼえていけばいいんです。
実際、RPG にもポインタはありますし、"値渡し"だってできるようになっています。でもそれは、それが必要なコーディングに直面してからおぼえても間に合います。
「関数」をどういうふうに使うか、をまずは学んで慣れていくことが、逆にどんなプログラミング言語にも通じるスキルを得ることになります。
RPG はそんな出発点として、とてもいい言語だと言えるでしょう。
プログラミングの基本だけでできているような言語ですので、
もし他言語のスキルがきちんとあれば習得が難しいものではありませんし、
また、これから学ぶとしたら最もシンプルに基本を学べる言語でもあります。
では、今回も続けて関数の使い方を見ていきたいと思います。
今までは、同じプログラムの中に関数を定義して使うやり方をご紹介してきましたが、実はそれだけが関数の使い方ではありません。
別のプログラムに存在していてもいいんです。
より共有がしやすくなりますね。
さらに、RPG で書かれていなくてもいいんです。
RPG の中から C の標準ライブラリ関数を使用する、なんてこともできてしまうんですね!!
「C でこんな関数があるんだけど、RPG にはないの?!」
「どうぞ、そのままお使いください!!」
前回は、C とプログラム全体の構成も、個々の構文も RPG はよく似ているというお話でした。
でも、それだけではなく、C だとけっこうわかりにくいこと、書き方を理解するのに苦労することを RPG では素直にできてしまう、ということを今回はお話ししてみたいと思います。
前回は、今現在の ILE RPG はプログラミングの基礎を学ぶにはとてもいい言語だというお話をしました。
自然と C の知識の入門にもなる、というお話もしました。
Java だって C に似せて作られたように、ある意味現代に生きているプログラミングの基本はすべて C によって確立されたと言っても言い過ぎにならないと思います。
つまり、C を理解できるようになるといろんなプログラミング言語を学ぶうえでとても助けになるわけです。
RPG を書けるようになる、というのは IBM i を扱ううえではとてもチカラになります。
さらに C もわかるようになるための基礎を身につけられる、という特典もついてくる、ということなんですね。
ということで今回は、実際どのくらい、どんなふうに似ているか、をお話したいと思います。
今さら RPG なんかを学んでもイミないんじゃない? とか聞かれることがあったりするのですが、実は立派にあるんです。
RPG をちゃんと書けるようになる、というのはプログラミングの基本を身につけるための最短距離なんじゃないか、とも思っています。
なぜなら、今現在の RPG は "面倒なクセのない C" と言っていいようなプログラミング言語になっているからです。
そもそも「なぜ C?」とか「いまさら C?」と思うかもしれませんね?!
本屋さんに行って見てみてください。Java だとか C++ だとか Ruby だとか新しい言語があまたある中、未だに C の本は大量に出版され続けていることがわかります。
なぜ C を学ぶか? なぜこんなに C の本が必要か? については、そういった本の前書きを見てみていただきたいのですが、、
C や RPG のような "手続き型言語" には、
プログラミングの基本となる "構造化" と "モジュール化" を、
シンプルに(「クラス」だとか「オブジェクト」だとかいった"概念"に煩わされずに)学ぶことができる、
という大きな利点があるんです。