ISNULL()関数を使ってSQLでIF文を使わずに条件を分岐する

公開日: : 最終更新日:2013/12/11 SQL Server , , , ,

ISNULLをIF文の代わりに使ってみる

SQLでIFを書けばWHERE句の内容を変えて検索できますが、条件ごとに同じようなSQLを
複数回書くのは面倒なので、1行で分岐できないかと言う事でSQLを作って見ました。

方法はWHERE句の条件にISNULL()関数を使用して、条件分岐を行います。

テーブルとデータの準備

まずはテーブルとその検索用データを以下のSQLで作成します。
<<テーブル>>

<<検索用データ>>

条件を分岐させて検索

今回は「社員番号」を指定せずに全件取得する場合と「社員番号」を指定して1件のみに
絞り込んだものを1行のSQLで実行します。

まずは全件検索。

動作結果。

社員番号 氏名 部署
1 太郎さん 営業部
2 次郎さん 経理部
3 三郎さん 人事部
4 四郎さん 営業部
5 五郎さん 経理部
6 六郎さん 人事部
7 七郎さん 営業部
8 八郎さん 経理部
9 九郎さん 人事部

無事全件検索できました。

次に「社員番号」が「5」の人(1件に絞り込み)を取得します。

実行結果。

社員番号 氏名 部署
5 五郎さん 経理部

指定した「五郎さん」だけが取得できました。

解説

でISNULL()関数を使用することで「条件が指定されてない(@検索社員番号がNULL)」の場合は
テーブルの値をそのまま使用し、「条件が指定された(@検索社員番号がNULL以外)の場合は
その指定された値で検索します。

これでIF文を書くことなく、条件を分岐させることができるようになります。
SQLを書く量を少なくすることができます。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 13 follow us in feedly

関連記事

SQLServerでホスト名を取得する

SQLServerが動作しているホスト(サーバ)名取得 SQLServerでSQLServerが動

記事を読む

0で埋めで固定長のデータにする

0で埋めで固定長のデータにする データべース内のデータを0埋めして取得します。 RIGHT(

記事を読む

SQLServerで自動で連番を設定する

カラムに自動で連番を設定する 自動で連番を設定し、レコードを管理する場合に 重宝するカラムの属性

記事を読む

呼び出したストアドプロシジャーの戻り値を使用する

呼び出したストアドプロシジャーの戻り値を使用する 処理の構成上、ストアドプロシジャーから他のストア

記事を読む

SQLを使っていろいろなやり方で年月を抜き出す

いろいろなやり方で年月を抜き出す 数値で年月を管理しているテーブルに対して年月日から 年月を抜き

記事を読む

SQLで日付範囲の重複をチェックする

SQLで日付範囲の重複をチェックする SQLで日付範囲の重複をチェックする必要が出たので調査しまし

記事を読む

SQLサーバ

SQLServerでROW_NUMBER()を使って連番を採番する

ROW_NUMBER()で連番を取得する SQLServerでROW_NUMBER()関数を使うと

記事を読む

SQLで文字列を反転させる

SQLで文字列を反転させる SQLで文字列を"012345"を後ろから並び変えて"543210"の

記事を読む

SQLで順位を取得するRANK()とDENSE_RANK()

SQLで順位を取得する SQLServerで項目の順位付け関数を利用して 順位をします。

記事を読む

SQLで前の行と同じ値は表示しないようにする

前の行と同じ値は表示しない SQLで前の行と同じ値は表示しないようにするして 伝票印刷のような処

記事を読む

SQLServer
SQLServerでストアドプロシージャ名を取得する

SQLServerでストアドプロシージャ名を取得する ストアドプ

SQLで日付範囲の重複をチェックする

SQLで日付範囲の重複をチェックする SQLで日付範囲の重複をチェッ

DEFAULT制約付きのカラムの属性を変更する

DEFAULT制約付きのカラムの属性を変更する SQLServerで

ORDER BYでNULLのカラムを最後に表示

ORDER BYでNULLのカラムを最後に持ってくる SQLで何も考

SQLServerで自動で連番を設定する

カラムに自動で連番を設定する 自動で連番を設定し、レコードを管理する

→もっと見る



PAGE TOP ↑