SQL文の生成で便利な”where 1 = 1″の使い所を説明!

SQL

はじめに

SQL文の条件指定で”where 1 = 1″を指定した場合、この条件は必ず真になり、全てのカラムが条件を満たすようになります。
これはSQLインジェクションで用いられることで有名ですが、プログラムでSQL文を生成する時(動的SQLを用いる時)に”where 1 = 1″を利用すると便利なことがあります。

この記事では、以下のユーザーマスタテーブルを例に挙げて説明します。

“where 1 = 1″の使用例

例1:全件抽出

全件抽出したい場合、以下のSQL文1やSQL文2のように書くことができます。
プログラムでSQL文を生成・発行する場合、条件が何も指定されていなければwhere句を外す必要があります。
しかし、条件として”1 = 1″を指定すると、このwhere句の要否の判断をすることなく全件抽出が可能になります。

【SQL文1】

【SQL文2】

【結果】

例2:条件指定

“0001”を除くユーザーIDについて、パスワードの文字列に”password”を設定したユーザーを探す要件があるとします。
この場合も、以下のように2通りに書き方があります。

プログラムでSQL文を生成する場合、SQL文1よりもSQL文2の方が楽に生成できます。
条件を追加する際、SQL文1では、最初の条件であるか否かで”where”をつけるか”and”をつけるか判断する必要がありますが、SQL文2では”where 1 = 1″の箇所が固定であるため、この判断が不要(必ず”and”をつければ良い)となります。

【SQL文1】

【SQL文2】

【結果】

SQL文の生成ロジック

2つの例で述べたSQL文1とSQL文2について、それぞれの生成ロジックは以下の通りです。
このように、”where 1 = 1″を使うSQL文2の方が、生成ロジックをシンプルにできることがわかります。

【SQL文1生成ロジック(”where 1 = 1″を使わない場合)】

【SQL文2生成ロジック(”where 1 = 1″を使う場合)】

あとがき

今回は、前回の記事の続きとして、動的SQLで便利なテクニックを紹介しました。
「動的SQLってそもそも何?」と思った方は、前回の記事も是非ご覧ください。

株式会社サイゼントでは、即戦力のJavaプログラマーを育てるための書籍「絶対にJavaプログラマーになりたい人へ」をKindleで販売しています。

同じく、Spring Frameworkについてきめ細かく解説した別冊も販売中です。


また、上記の書籍をテキストとして用いたプログラミングスクール「サイゼントアカデミー」も開校しています。
このスクールは、受託開発事業・SES事業である弊社が、新入社員向けの研修で培ったノウハウを詰め込んだものです。


ご興味がある方は、上記画像から個別ページにアクセスしてみてください!

コメント

タイトルとURLをコピーしました