SQL | Where 0=0の目的
- 2022.10.21
- データベース
クエリのWhere文でたまに見かける「Where 0=0」について備忘録として記載します。
データ取得の条件を作成する
例えば下図のような「商品」テーブルを考えます。
0=0の意味
普段のクエリ作成では利用しないと思いますが、プログラム作成時には意外と便利だったりします。
where 0=0
Select * from 商品 where 0=0 の意味は「条件(0=0)がTrueの時にSelect Allしてね」という指示になります。
0=0は明らかにTrueなので、Slect Allとなります。
0=0でも100=100でもなんでも良いです。
どういうときに便利か?→ プログラムでクエリを生成する場合
プログラムでクエリを生成する場合を想定し、以下のような条件分岐が発生するとします。
・検索フォームに何も入力されていない状態で検索ボタンを押下
→ 全件出力
・検索フォームに入力されている状態で検索ボタンを押下
→ 条件検索
プログラムでクエリを生成する場合を考えます。
0=0を利用しない場合
1)文字列 = “Select * from 商品”
2)判別ロジック:検索フォームに値が入っているか否か?
↓入っている場合
2-1)文字列 += Where
3)判別ロジック:条件セットは1個目か否か?
↓1個目
3-1)文字列 += 条件セット[1](例:カテゴリ=”果物”)
↓2個目以降
3-2)文字列 += and
3-3)文字列 += 条件セット[2](例:単価>=100)
条件セットの1個目だけは、andを付けずに、2個目以降はandを付与する、といった制御が必要なので、1個目、2個目以降を判別するロジックが必要です。
0=0を利用する場合
※あらかじめ、条件セットを作成しておく。
1)文字列 = “Select * from 商品 where 0=0”
2)判別ロジック:検索フォームに値が入っているか否か?
↓入っている場合
2-1)文字列 += 条件セット[1](例: and カテゴリ=”果物”)
2-2)文字列 += 条件セット[2](例:and 単価>=100)
条件セットの1個目、2個目に関わらず、常にandを付与する、といった制御が必要ですが、1個目、2個目を判別するロジックを省略することができます。
上記「0=0を使用しない場合」よりもシンプルにコーディングできます。
おまけ:where 1=0
Select * from 商品 where 1=0 の意味は「条件(1=0)がTrueの時にSelect Allしてね」という指示になります。
1=0は明らかにFalseなので、この状態では何も出力されません。
この書き方を利用する目的は、
・条件を入れない場合は何も表示しない
・条件を入れた場合だけ対象の項目を表示する
といった制御を行うことができます。
Orでつなげる
Select * from 商品 where 1=0 or カテゴリ=”果物”
初期表示は何も表示されませんが、検索項目を入れることで初めて値を取得できるようになります。
ただし、複数条件を入れるとなると、ちょっと複雑になるのであまり実用的ではないかもしれません。
今回は以上です。
-
前の記事
製造業でデータ分析 | PostgreSQL | LAG、LEADを活用してレコードを1行ずらす 2022.08.17
-
次の記事
Docker | Docker上でPostgreSQLの冗長化構成を作ろう(ロジカルレプリケーション) 2023.08.16