11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SQL】WHERE 1 = 1

Last updated at Posted at 2022-05-29

WHERE 1 = 1 とは、SQLで複数の条件からレコードを抽出する際に便利な書き方。

WHERE 1 = 1 は常に真になるため、1 = 1自体には何も意味はない。

しかし、複数のWHEREによる条件が追加される可能性がある場合、条件式にWHEREを書く必要がなくなり、ANDだけを追加すればよくなるため、プログラムが書きやすくなる。

下記のようなidnameがあるuserテーブルがある場合を想定して、idnameの条件式の有り無しよって作成される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なのかを判定する処理が不要になり、クエリが書きやすくなる。

参考

11
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?