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

関連記事

指定した列名がどのテーブルで使用されているか検索するSQL

指定した列名を利用しているテーブルを検索 SQLServerで指定した列名がどのテーブルで使用され

記事を読む

SQLで改行コードを含む項目を取得する

SQLで改行コードを含む項目を検索する Microsoft SQL Server Managemn

記事を読む

列は既にデフォルトにバインドされています。

テーブルのカラムの属性変更でデフォルト値を変更する テーブルのカラムの属性変更でデフォルト値を変更

記事を読む

SQLServerのダミーテーブル

SQLServerでダミーテーブルを使う データベースサーバから現在時刻などを取得する場合など

記事を読む

SQLServer

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

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

記事を読む

ISNULLとCOALESCEは動作が異なる

ISNULLとCOALESCEは動作が異なるので注意が必要 とある人が作成したSQLを見ているとC

記事を読む

SQLサーバ

連番中で 「歯抜け」の番号を見つけ出すSQL

テーブル内の連番の歯抜け番号を探す よくある処理でテーブルに設定されている連番の中で 「歯抜け」

記事を読む

SQL Server2008で導入された[date/time/datetime2/datetimeoffset]型

SQL Server2008では新しい日付/時刻データ型 date/time/datetime2/

記事を読む

SQL Server のファイルサイズを圧縮する

データベースファイルのサイズを圧縮する データベースファイル(.mdf)またはトランザクションログ

記事を読む

再帰SQLで歯抜けの日付データを取得する

再帰SQLを使って歯抜けの日付データを取得 処理が自動実行(バッチ処理)で実行された日付を管理して

記事を読む

SQLServer
SQLServerでクライアントのIPアドレスを取得する

SQLServerでクライアントのIPアドレスを取得する SQLを発

SQLでCASE~WHENを使ってみる

SQLでCASE~WHENを使う SQLでCASE~WHENを使うと

SQLServer
SQLServerで累積値(累積比)を求める

SQLServerで累積値(累積比)を求める SQLServer

@@ROWCOUNTで処理した件数を取得する

@@ROWCOUNTは直前に処理した件数を取得するための関数 SQL

SQLServerのダミーテーブル

SQLServerでダミーテーブルを使う データベースサーバから

→もっと見る



PAGE TOP ↑