SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見ました。
ISNULLをIF文の代わりに使ってみる
SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見ました。
方法はWHERE句の条件にISNULL()関数を使用して、条件分岐を行います。
テーブルとデータの準備
まずはテーブルとその検索用データを以下のSQLで作成します。
<<テーブル>>
CREATE TABLE 社員マスタ ( 社員番号 INT ,氏名 VARCHAR(20) ,部署 VARCHAR(20) )
<<検索用データ>>
INSERT INTO 社員マスタ VALUES (1, '太郎さん', '営業部' ) INSERT INTO 社員マスタ VALUES (2, '次郎さん', '経理部' ) INSERT INTO 社員マスタ VALUES (3, '三郎さん', '人事部' ) INSERT INTO 社員マスタ VALUES (4, '四郎さん', '営業部' ) INSERT INTO 社員マスタ VALUES (5, '五郎さん', '経理部' ) INSERT INTO 社員マスタ VALUES (6, '六郎さん', '人事部' ) INSERT INTO 社員マスタ VALUES (7, '七郎さん', '営業部' ) INSERT INTO 社員マスタ VALUES (8, '八郎さん', '経理部' ) INSERT INTO 社員マスタ VALUES (9, '九郎さん', '人事部' )
条件を分岐させて検索
今回は「社員番号」を指定せずに全件取得する場合と「社員番号」を指定して1件のみに絞り込んだものを1行のSQLで実行します。
まずは全件検索。
DECLARE @検索社員番号 int = NULL SELECT * FROM 社員マスタ WHERE 社員番号 = ISNULL( @検索社員番号, 社員番号 )
動作結果。
社員番号 | 氏名 | 部署 |
---|---|---|
1 | 太郎さん | 営業部 |
2 | 次郎さん | 経理部 |
3 | 三郎さん | 人事部 |
4 | 四郎さん | 営業部 |
5 | 五郎さん | 経理部 |
6 | 六郎さん | 人事部 |
7 | 七郎さん | 営業部 |
8 | 八郎さん | 経理部 |
9 | 九郎さん | 人事部 |
無事全件検索できました。
次に「社員番号」が「5」の人(1件に絞り込み)を取得します。
DECLARE @検索社員番号 int = 5 SELECT * FROM 社員マスタ WHERE 社員番号 = ISNULL( @検索社員番号, 社員番号 )
実行結果。
社員番号 | 氏名 | 部署 |
---|---|---|
5 | 五郎さん | 経理部 |
指定した「五郎さん」だけが取得できました。
解説
WHERE 社員番号 = ISNULL( @検索社員番号, 社員番号 )
でISNULL()関数を使用することで「条件が指定されてない(@検索社員番号がNULL)」の場合はテーブルの値をそのまま使用し、「条件が指定された(@検索社員番号がNULL以外)の場合はその指定された値で検索します。
これでIF文を書くことなく、条件を分岐させることができるようになります。
SQLを書く量を少なくすることができます。