WHERE 1 = 1
とは、SQLで複数の条件からレコードを抽出する際に便利な書き方。
WHERE 1 = 1
は常に真になるため、1 = 1
自体には何も意味はない。
しかし、複数のWHERE
による条件が追加される可能性がある場合、条件式にWHERE
を書く必要がなくなり、AND
だけを追加すればよくなるため、プログラムが書きやすくなる。
例
下記のようなid
とname
があるuser
テーブルがある場合を想定して、id
とname
の条件式の有り無しよって作成されるSQLがどう変わるか確認。
id | name |
---|---|
1 | hoge |
2 | fuga |
3 | piyo |
WHERE 1 = 1 を使わない場合
public string GetSQL(int id, string name){
var sql = "SELECT * FROM user"
if(id != ""){ //idの条件が有る
sql += $" WHERE id = {id}"
}
if(id == "" && name != ""){ //idの条件が無く、nameの条件が有る
sql += $" WHERE name = {name}"
}else if(id != "" && name != ""){ //idの条件が有り、nameの条件が有る
sql += $" AND name = {name}"
}
return sql;
}
WHERE 1 = 1 を使う場合
public string GetSQL(int id, string name){
var sql = "SELECT * FROM user WHERE 1 = 1"
if(id != ""){//idの条件が有る
sql += $" AND id = {id}"
}
if(name != ""){//nameの条件がある
sql += $" AND name = {name}"
}
return sql;
}
WHERE 1 = 1
を使った方がすべてANDで繋げられるため、クエリが書きやすくなる。
まとめ
SQLで複数の条件式が追加される可能性がある場合、WHERE 1 = 1
をつけることで条件式の2番目以降がWHERE
なのかAND
なのかを判定する処理が不要になり、クエリが書きやすくなる。