検索機能のSQL作成について。


JavaとSQLを使った検索機能を作成中です。  
フォーム画面の検索項目(氏名、氏名カナ、趣味のテキストボックス)に入力された値をSQL文のwhere
句に指定したプレースホルダーに埋めていく形でテーブルに対して取得したデータを画面に検索結果として表示させる形で考えています。  
仕様としてAND条件の形で検索し、検索項目は部分一致検索とします。加えて検索項目の個々に入力がなければ(空の場合)、その項目はレコードの絞りこみ対象として指定しない場合、どういうSQLを作成すれば良いでしょうか。SQL作成に悩んでいます。




各検索項目に対して、入力が空で真になる条件と、部分一致検索で真になる条件を `OR` 演算子でつなぎます。  
入力が空であれば検索条件が無視されて、入力が空でない場合のみ部分一致検索が反映されます。

例を挙げると、下記のスキーマに対して

[code]

    CREATE TABLE Tbl
    ( col1 VARCHAR(10) NOT NULL
    , col2 VARCHAR(10) NOT NULL
    );
    
[/code]

`col1, col2` に対するクエリは、パラメータ `:1` 〜 `:4` を用いて下記のように書けます。  
(パラメータ `:1, :2` が `col1` の検索入力。パラメータ `:3, :4` が `col2` の検索入力)

[code]

    SELECT col1, col2
    FROM Tbl
    WHERE (NULLIF(:1, '') IS NULL OR col1 LIKE ('%' || :2 || '%'))
      AND (NULLIF(:3, '') IS NULL OR col2 LIKE ('%' || :4 || '%'))
    ORDER BY col1, col2
    ;
    
[/code]

各 RDBMS ごとにパラメータ等の記述が異なるので、そのままで動かなければ調整してください。  
例: [MySQL の実行結果](http://www.sqlfiddle.com/#!9/196a8/4 "SQL Fiddle")

