SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

SQL ServerでNull値に対処する

Null値を適切に処理するための一貫した方法とは

  • X ポスト
  • このエントリーをはてなブックマークに追加

集計でNullをどのように評価するか

 Nullは値を持たないので、集計関数のSUM()AVG()MIN()、およびMAX()ではNullは無視されます。本来は、0などのデフォルト値を設定し、計算でNullの問題が起きないようにするのが最善の方法です。しかし、集計で0が評価されることが目的にかなわない場合もあります。SQL Serverには、この点に関して多少役に立つ機能があります。次のオプションをオンにするだけで、Null値を除外するときに、SQL Serverから警告のメッセージを出すことができます。

SET ANSI_WARNINGS ON

 ただし、SET ANSI_WARNINGS ONの設定は、SQL Serverでのゼロ除算、算術オーバーフロー、および文字/バイナリデータの切り捨ての処理方法にも影響を与えるので、その影響が及ぶ範囲を知っておく必要があります。重要な違いは、Nullをどのような値に加えてもNullが返され、集計関数ではNullを除外してその規格を回避するということです。

 すべての値を評価したい場合は、デフォルト値を適用し、テーブルレベルで値を計上する必要があります。これができない場合は、COALESCE()を使って、式でNull以外の値を返します。例えば、図7に示す最初のAVG()関数では、Null値が評価されていません。しかし、2番目の関数ではNull値が評価されています。厳密に言うと、2番目の関数ではNull値ではなく0が評価されています。どちらのステートメントの方がよいということはありません。関数でNullを無視するかどうかは、その目的によって決まります。

図7 最初のAVG()関数ではNull値が評価されない: 集計でNull値を評価するかどうかを制御する
図7 最初のAVG()関数ではNull値が評価されない: 集計でNull値を評価するかどうかを制御する

 COUNT()関数は次の2種類の形式を持ち、他の4つの集計関数とは少し異なります。

  • COUNT(column)-columnのNull値を除いて、テーブル内の行数を返す。
  • COUNT(*)-テーブル内の行数を返す。

 図8に示すように、次の形式では同じ結果が返されます。

SELECT COUNT(*) - Count(column) AS NullCount

SELECT COUNT(*) AS NullCount
FROM tbl
WHERE column IS NULL
図8 COUNT(column)評価の前にすべてのNullが除外される: 使用する形式に応じて、COUNT()ではNullが無視または評価される
図8 COUNT(column)評価の前にすべてのNullが除外される: 使用する形式に応じて、COUNT()ではNullが無視または評価される

 しかし、次のようにcolumnを指定した場合、ステートメントは0を返します。

SELECT COUNT(column) AS NullCount
FROM tbl
WHERE column IS NULL

 これは、COUNT(column)では評価の前にすべてのNullが除外されるからです。このため、Null値を数えても0になります。

Null値を許可するのであれば、対処する必要がある

 データベースにNull許容型の列が1つでもあるなら、Null値がデータにどのように影響するかを考慮する必要があります。SQL ServerでNull値がどのように評価されるかを理解し、それに対処する方法を知ることによって、Nullによるデータへの影響を防ぐことができます。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Susan Sales Harkins(Susan Sales Harkins)

 独立コンサルタントとして活動するかたわら、データベーステクノロジに関する記事や書籍を執筆。最近の著書は『Mastering Microsoft SQL Server 2005 Express』(Mike Gunderloyと共著、Sybex刊)。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4381 2009/09/21 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング