2021年5月31日
WHERE 1=1って?
ソースコードを修正している際に見つけたSQLで「WHERE 1=1」と記述されているものがありました。
どういう意味があるのかと思い調べてみました。
まず「WHERE 1=1」自体に意味はありません。
「WHERE 1」というのはTRUEという意味になります。
「WHERE 1=1」も「1=1」はTRUEです。「WHERE 1」と同じ意味になり、TRUEという事になります。
WHEREがTRUEを返していると言う事は、レコードの抽出条件を全て通過していると言うことになります。
つまり、WHERE句が有っても無くても同じ結果でレコードが抽出されます。
SELECT * FROM テーブル
SELECT * FROM テーブル WHERE 1=1
↑同じ結果になる。
では何のために記述しているのかというと、コードの視認性向上や処理が簡単になるからですね。
プログラムで抽出条件が必要か判定し必要なら「WHERE」+「抽出条件」を追加という流れになります。
そして複数条件の場合2つめからの条件では「論理演算子」+「抽出条件」となります
sql = select * from テーブル
if(条件必要 == yes){
sql = sql + “where 抽出条件“
}
if(条件2つめ必要 == yes){
sql = sql + “AND 抽出条件“
}
「WHERE 1=1」を記述する事で、抽出条件を追加する際に「AND 抽出条件」の部分だけを必要な数追加するだけでよくなります。
sql = select * from テーブル where 1=1
if(条件追加必要 == yes){
sql = sql + “AND 抽出条件“
}
if(条件2つめ必要 == yes){
sql = sql + “AND 抽出条件“
}
上記の方が管理しやすいです。
・全件取得
SELECT * FROM テーブル WHERE 1=1
・抽出条件1個
SELECT * FROM テーブル WHERE 1=1 AND 抽出条件
・抽出条件2個
SELECT * FROM テーブル WHERE 1=1 AND 抽出条件 AND 抽出条件
本来のSQLでは使わないと思いますが、プログラムを書く際には便利だと思います。