mysqlテクニックのnull値マッピング(IFとIFNULL)を他の意味のある値に
14623 ワード
データベース関係モデルの作成者であるE.F.Codd博士は関係データベース理論にNULL概念を導入した.Dr.E.C.F.Coddの記述によれば、NULLは未知の値または欠落した情報を表す.ここでmysqlはまた、
上記の式では、
上記のコードを実行すると、次の結果が得られます.
上記の結果セットから、
上のクエリ・コードを実行すると、次の結果が得られます.
正直に言うと、mysqlは
sqlを書き直します.
上記のsqlでは、
ここでは、
NULL
が情報の欠如または不適用を示す概念をサポートする.したがって、データベース・テーブルには、NULL
の値を含むデータが格納される可能性があります.しかし、レポート形式でユーザにデータを提示する場合、NULL
の値を表示することは意味がありません.したがって、レポートをより読み取りやすく理解できるようにするには、未知、欠落、使用不可(N/A)などの他の意味のある値としてNULL
値を表示する必要があります.これを行うには、IF関数を使用します.文法構造を見てみましょう.IF(exp,exp_result1,exp_result2);
上記の式では、
exp
の計算結果がTRUE
(exp <> 0
およびexp <> NULL
)の場合、IF
関数はexp_result1
の値を返し、そうでなければexp_result2
の値を返します.実際には、IF
関数の戻り値は、exp_result1
式およびexp_result2
式に応じて文字列または数値であってもよい.用事が終わったらsqlを書いて、このIFの効果を感じましょう.customers
表に含まれるcustomername
state
およびcountry
のデータの一部を以下に示します.SELECT
customername, state, country
FROM
customers
ORDER BY country;
上記のコードを実行すると、次の結果が得られます.
+------------------------------------+---------------+--------------+
| customername | state | country |
+------------------------------------+---------------+--------------+
| Australian Collectors, Co. | Victoria | Australia |
| Annas Decorations, Ltd | NSW | Australia |
| Souveniers And Things Co. | NSW | Australia |
| Australian Gift Network, Co | Queensland | Australia |
|************** many many *********************************|
| Handji Gifts& Co | NULL | Singapore |
| Asian Shopping Network, Co | NULL | Singapore |
| SAR Distributors, Co | Pretoria | South Africa |
| Euro+ Shopping Channel | NULL | Spain |
| Diecast Collectables | MA | USA |
+------------------------------------+---------------+--------------+
122 rows in set
上記の結果セットから、
state
列の値が一部の顧客に適用されないことがわかります.IF
関数を使用して、NULL
値をN/A
として表示します.sqlを見てみましょう.SELECT
customername, IF(state IS NULL, 'N/A', state) state, country
FROM
customers
ORDER BY country;
上のクエリ・コードを実行すると、次の結果が得られます.
+------------------------------------+---------------+--------------+
| customername | state | country |
+------------------------------------+---------------+--------------+
| Australian Collectors, Co. | Victoria | Australia |
| Annas Decorations, Ltd | NSW | Australia |
| Souveniers And Things Co. | NSW | Australia |
| Australian Gift Network, Co | Queensland | Australia |
| Australian Collectables, Ltd | Victoria | Australia |
| Salzburg Collectables | N/A | Austria |
| Mini Auto Werke | N/A | Austria |
| Petit Auto | N/A | Belgium |
| Royale Belge | N/A | Belgium |
|************** *********************************|
| Motor Mint Distributors Inc. | PA | USA |
| Signal Collectibles Ltd. | CA | USA |
| Diecast Collectables | MA | USA |
+------------------------------------+---------------+--------------+
122 rows in set
正直に言うと、mysqlは
IF
関数のほかにIFNULL関数を提供し、NULL
値を直接処理することができます.IFNULL
関数の構文は次のとおりです.IFNULL(exp,exp_result);
sqlを書き直します.
SELECT customername,
IFNULL(state,"N/A") state,
country
FROM customers
ORDER BY country;
上記のsqlでは、
exp
の計算結果がNULL
の値である場合、IFNULL
関数はexp_result
式の値を返し、そうでない場合はexp
式の値を返します.ここでは、
IF
およびIFNULL
関数を使用して、NULL
値を他のより意味のある値にマッピングし、データを読み取り可能に表示するための小さなテクニックを共有します.いい感じだったら、応援よろしくね..