私がシステム会社に就職をして1年目、仕事でSQLを使わなければいけませんでした。しかし、SQLはC言語、JAVAとは異なる構文で書かれるため、取っ付きにくく自力でSQLの処理を書く事ができませんでした。SQLをどうしたら理解できる様になるか、SQLの構成を整理し理解するため、基本的な処理手順を図に描きました。これにより「よく分からない」と思っていた構成イメージを持つ事ができました。イメージを持った事で、自力でソースを書く事ができる様になりました。本日は、この時に行った事を記載します。私と同様にSQLの構成がよく分からないと考えられている方の参考となりますと幸です。
SQLの処理順番を知る事で、処理の流れを把握する事ができ、SQLの理解を進められるとも考えます。SQLの処理の流れを知りたい方は、「【SQLが分からない方向け】SQLの処理順番を知り処理のイメージを持つ」をご参照ください。
課題はSQLの処理順番の認識がおかしかった事
私がSQLの何に躓いたのかというと、SQLのSelect、From、Whereがどういう順番で処理を考えたら良いか分かっていなかった事です。特に、JAVAやC言語を学んでいた私は、上から順に処理が流れるものと認識しており、SELECT、FROM、WHEREの順で処理を実行するものだと決めつけていました。これにより、1つのテーブルからデータを抜く分には問題は無いが、複数のテーブルからデータを抜く際には、実装ができない状態となりました。
当初はこれによって、実際に書いたSQLを動かす際に「SELECTに指定してるデータがFROMに無い」というエラーが発生し、実装時にどんなテーブルの結合を書いたら良いのか、よく分からず混乱状態に陥っていました。
この頃は思い違いから処理の記述順番がおかしく、「先にSELECTの中で必要なデータを全て記述し、次にFROMでテーブルを結合させる」という手順でSQLを書いていました。
絵を描いて対応策
「仕事でSQLを書かなければいけないため、この状態だと不味い。」と危機感を感じた私は、一度、どういう処理がSQLが実行されているのか、整理をしてみようと思いました。そこで、自分なりの理解をSELECT、FROM、WHEREのそれぞれ何をしているのか、イメージで抑えようと考え、図に起こし整理をしました。当初起こしていた図は以下の様なものです。
当時の私が描いた絵はノートでしたので、図に起こしました。
例題として、次の様な問題でした。「サンプルのようなテーブルがある時、テーブルαの項目AとテーブルβのEを表示してください。抽出条件は、項目AのTest1のデータのみ。」
「サンプルテーブル問題」
「整理1:SELECTで抽出データを選択」
「整理2:FROMで対象のデータがテーブルを隔てた時に同じ項目でつなげて、あたかも1つのテーブルの様に扱える状態にする。(違うテーブルからデータを取得できる状態にする)」
「整理3:Whereで対象データを抽出する」
この整理をかけた事で、SELECTで必要なテーブルをFROMで接続し、データを取得できる様にする。このFROMで作ったテーブルをベースにして、WHEREで指定した項目を抜き取り、SELECTで選択した必要な項目を表示させるという考え方をすれば良いという事が理解できました。
結果:絵を描いて理解できた
処理を紙に書いて整理をしたところで、SQLの処理順番を理解する事ができ、自分がSQLを書く時に以下のセオリーを確立できました。
この経験をしてから、絵を書くことが情報の整理に繋がるという事を理解しできました。ここから、複雑なSQLが登場し、悩んだ時には一つ一つ絵を描き、データの結合や、条件を整理してからSQLを書く様になりました。また、絵を書く事で人に悩んでいる部分が伝え易くなり、アドバイスをいただく事が容易になりました。
まとめ
「SQLで実装順番が分からない」、「私の様に何か混乱している」という方は以下の方法を試し、一つ一つ確かめながらSQLを実装すると良いです。
・SQLを書く順番はFrom、Where、Selectの順。テーブルを準備、どういう条件でデータを抽出し、どの項目を表示するか。
・SQLで混乱した時には、一度整理をするために図表にまとめ、頭の中を整理する。
本記事がSQLの勉強の参考になると幸いです。
以上です。