Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

プログラム中でSQLを合成する場合、配列を活用されてはいかがでしょうか。SQLは、文字列なので簡単に作れるものの、それが正しく動作するかチェックするのは簡単ではありません。ミスしにくい作り方が望まれます。そして、その方法としておすすなのが、配列を使った方法です。今回は、配列を使ったSQLの作り方を詳しく解説します。

SQLをプログラムに埋め込むには

Webシステムを構築する際、データベース管理ソフトが欠かせません。そして、プログラム側からデータベース管理ソフトを利用する際、既に用意してあるのSQLをそのまま使ったり、プログラムの中でSQLを合成するなど、データベースの利用の仕方によって、埋め込み方が変わります。

次から、SQLをプログラムに埋め込む方法について解説します。

全てのデータを取得する

Webシステムでデータベース管理ソフトを使う最も簡単な方法は、格納されている全てのデータを取り出し、必要なデータの抽出や加工をすべてプログラム側で行う方法です。

このようなケースでは、テーブル内の全てのデータを取り出すSQLを1つ準備すれば十分です。プログラム中でSQLを合成する手間がかからず、プログラマーはデータの加工に専念できます。

しかし、扱うデータの量が多ければ、それだけ処理が遅くなるのが欠点です。そのため、このような取得方法が使えるのは特殊なケースのみと考えてください。

文字列のパーツを用意して合成する

SQLは、比較的簡単な文字列なので、プログラムで合成するのは、それほど難しくありません。検索条件となる文字列を変数に格納して、SQLのパーツを格納した文字列と変数を格納した文字列とを結合しれば、SQLが作れます。また、SQL合成用に、専用のファンクションを用意するケースもあります。

しかし、SQLの文字をスペースで区切っただけの書き方は、ミスしやすいフォーマットです。簡単な修正のつもりが、空白を入れ忘れてしまえば、システムは動作しません。そして、このような場合、原因が解らず、調査に時間がかかったりします。

配列を使ってSQLを合成する

先ほど説明したように、SQLの合成は意外にミスしやすく、SQLが複雑になればミスした箇所を探すのに手間がかかります。そこで、おすすめしたいのが、配列にSQLを構成するパーツを追加していき、最後に空白で区切った文字列に変換して、それをSQLとして利用する方法です。

なお、Webシステムで使われることの多いプログラム言語では、配列を追加する機能や、配列から文字列に変換する機能があります。ぜひ、配列を活用してSQLを合成し、ミスを減らしましょう。

SQLを配列で合成するメリット

プログラムの中でSQLを合成する場合、その処理自体を後から修正できるように工夫することで、SQLに関する余計なトラブルを防げます。では、どういった不具合があり、それに配列で合成する方法にメリットがあるのでしょうか。次から、簡単に解説します。

SQL作成時にミスしやすい点

SQLをよく編集する方でも、コピーとペーストを使って手を抜いたりすると、ミスして動作しないSQLを作ってしまうことがあります。そのようなミスで、よくやりがちなのが、スペースの入れ忘れと、シングルクオートまたはダブルクオートを付け忘れるケースです。

空白は、長いSQLを合成する場合、変数の前後に空白が抜けることがあります。また、SQLでは、検索条件で文字を指定する場合には、シングルクオートまたはダブルクオートを使いますが、これを付け忘れるケースもあります。

いぜれにしても、合成したSQLを、データベース管理ソフトのクライアントツールで実行すれば、エラーメッセージですぐ解る内容です。しかし、システムに組み込まれてしまうと、エラーの原因がすぐには解りません。

プログラムで作るSQLの問題点

人が書いたSQLは、サブクエリーなどを別の行にするなど、読み易いように改行されています。しかし、プログラムで作る場合、そのような手間は必要ありません。プログラムの変数を使い、正しく動くように作られた1行のSQLを合成するだけで十分です。

しかし、SQLの一部を修正することになった場合、簡単だからと言って手を抜いてしまうと、先ほど挙げたような、空白が抜けたり、シングルクオートまたはダブルクオートが抜けるといったミスが発生します。しかも、その場合、動作しない原因を調べるのはかなり面倒です。

配列を使ってSQLを合成する例

サブクエリーが複数あるような長いSQLを合成する場合、プログラムで合成する場合でも、人が読みやすいように工夫した例を次に紹介します。

サブクエリーを使ったSQLの例

SELECT 
 age, 
 count 
FROM 
(SELECT 
  age,
  COUNT(age) as count 
 FROM staffs GROUP BY age
) as ageLists;
プログラムで文字列を追加して合成する例

$sql = "SELECT ";
$sql = $sql + "age";
$sql = $sql + ", ";
$sql = $sql + "count ";
$sql = $sql + "FROM ";
$sql = $sql + "(SELECT ";
$sql = $sql + "age";
$sql = $sql + ", ";
$sql = $sql + "COUNT(age) as count ";
$sql = $sql + "FROM staffs GROUP BY age ";
$sql = $sql + ") as ageLists;";

この書き方では、SQLを構成する文字の最後に空白が入っていますが、それが抜けてしまうとエラーになります。また、ダブルクオートで文字を指定して条件を追加しようとすると、見づらいのでミスしてもなかなか気が付きません。

配列を使った場合、例えばrubyなら次のように書けます。

base = []
base.push("SELECT");
base.push("age");
base.push(",");
base.push("count");
base.push("FROM");
base.push("(SELECT");
base.push("age");
base.push(",");
base.push("COUNT(age) as count");
base.push("FROM staffs GROUP BY age");
base.push(") as ageLists;");
sql = base.join(' ')

プログラム言語別の作り方

先ほど、Rubyの例を紹介しましたが、この方法は他のプログラム言語でも使えます。次から、Webサイト作成でよく使われるプログラム言語のうち、JavaとPython、PHPの使い方を紹介します。

Javaにおける使い方の例

Javaでは、要素の数が固定の配列(Array)ではなく、後から追加できるリスト(List)を使います。

Javaのリストを使ったSQL合成の例

List list = new ArrayList();
list.add("select");
list.add("*");
list.add("from");
list.add("test");
list.add(";");
String sql = String.join(" ", list);

Pythonにおける使い方の例

Pythonは、Rubyと同じような書き方が可能です。

Pythonの配列を使ったSQL合成の例
base = []
base.append("select")
base.append("*")
base.append("from")
base.append("test")
base.append(";")
sql = " ".join(base)

PHPにおける使い方の例

PHPは、array_push()関数を使います。RubyやPythonに比べると、見づらいかもしれません。

Pythonの配列を使ったSQL合成の例
$base = array();
array_push($base, "select");
array_push($base, "*");
array_push($base, "from");
array_push($base, "test");
$sql = implode(" ", $base);

まとめ

これまで紹介したように、プログラムでSQLを合成する際、配列を活用することで、文字列に追加していく方法より見やすく、ミスしにくい合成が可能です。もし、プログラム中にSQLを書く方法を見直ししたいと考えているのでしたら、ぜひ、参考にしてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。