SQLServerでのnullの扱い方について・update文やdelete文でのNULL要素のレコードの操作
- システム
エンジニア - SQLServerでNULLのレコードを取得するにはどうすればいいのですか。
- プロジェクト
マネージャー - 「is null演算子」を使います。その他、NULL以外のレコードを操作するには「is not null演算子」を使います。
SQLServerでのnullの扱い方について
今回は、SQLServerでのNULLの扱い方について説明します。
NULLのレコードを操作(select/update/delete)する方法やNULL以外のレコードを操作する方法を紹介します。また、要素がNULLの場合は指定文字に置換することもできます。
SQLServerでのNULLの扱い方に興味のある方はぜひご覧ください。
is null演算子
SQLServerでは、NULLか否かをチェックする「is null演算子」があります。
主にwhere句で使用し、NULLのレコードを取得できます。
ここでは、以下のような”table_1″テーブルがあるとします。
1
2
3
4
5
6
7
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- ---------------- ----------------
NULL taro tanaka 090-1234-5678 1970-12-15
2 NULL yamada 03-2345-6789 1980-01-02
3 ichiro NULL 080-1111-2222 1990-02-05
4 sato NULL 2000-08-12
5 jiro 070-6666-7777 NULL
|
is null演算子を使った例を見てみましょう。
1
2
|
select * from table_1 where last_name is null;
go
|
実行結果は以下のようになります。
1
2
3
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- ------------- ----------------
2 NULL yamada 03-2345-6789 1980-01-02
|
last_nameがNULLのレコードが取得できていることが分かります。
このように、SQLServerではis null演算子を使用して、NULLのレコードを取得できます。
is not null演算子
SQLServerでは、is null演算子とは逆に、NULLでないレコードを取得できる「is not null演算子」があります。
実際のSQL文を見てみましょう。
1
2
|
select * from table_1 where first_name is not null;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- ------------- ----------------
NULL taro tanaka 090-1234-5678 1970-12-15
2 NULL yamada 03-2345-6789 1980-01-02
4 sato NULL 2000-08-12
5 jiro 070-6666-7777 NULL
|
first_nameがNULLでないレコードが取得できていることが分かります。
このように、SQLServerではis not null演算子を使用して、NULLではないレコードを取得できます。
nullまたは空白を取得
先ほどはNULLのレコードを取得する方法を紹介しました。
ここでは、NULLまたは空白のレコードを取得する方法を紹介します。
実際のSQL文を見てみましょう。
1
2
|
select * from table_1 where last_name is null or last_name = '';
go
|
実行結果は以下のようになります。
1
2
3
4
|
id last_name first_name phone birth_date
-------------------- ---------- ---------- ------------- ----------------
2 NULL yamada 03-2345-6789 1980-01-02
4 sato NULL 2000-08-12
|
last_nameがNULLまたは空白のレコードが取得できていることが分かります。
is null演算子とor句でつないで、NULLまたは空白のレコードが取得します。
isnull関数
SQLServerでは、NULLの要素を指定文字列で置換する「isnull関数」があります。
次のように記述します。
1
|
isnull( 要素, 置換文字列 )
|
実際のSQL文を見てみましょう。
1
2
|
select isnull(last_name, '') as last_name from table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
last_name
----------
taro
ichiro
jiro
|
nullの要素が空文字”に置換されていることが分かります。
このように、SQLServerではisnull関数を使用して、NULLの要素を指定文字列で置換します。
caseでnullを取得する
先ほどはisnull関数を使用して、NULLの要素を指定文字列で置換する方法を紹介しました。
isnull関数ではなく、case文でも同じことができますので、その方法を紹介します。
実際のSQL文を見てみましょう。
1
2
|
select case when last_name is null then '' else last_name end as last_name from table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
last_name
----------
taro
ichiro
jiro
|
このように、SQLServerではcase文でも、NULLの要素を指定文字列で置換できます。
update文やdelete文でnullを扱う
select文だけでなく、update文やdelete文のwhere句でも、NULL要素のレコードの操作ができます。
それではupdate文の例を見てみましょう。
1
2
3
4
|
update table_1 set last_name = 'unknown' where last_name is null;
go
select last_name from table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
last_name
----------
taro
unknown
ichiro
jiro
|
last_nameがNULLのレコードを更新できていることが分かります。
次に、delete文の例を見てみましょう。
1
2
3
4
5
6
|
select id, first_name from table_1;
go
delete from table_1 where first_name is null;
go
select id, first_name from table_1;
go
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
id first_name
-------------------- ----------
NULL tanaka
2 yamada
3 NULL
4 sato
5
id first_name
-------------------- ----------
NULL tanaka
2 yamada
4 sato
5
|
first_nameがNULLのレコードが削除されていることが分かります。
このように、select文だけでなく、update文やdelete文のwhere句でも、NULL要素のレコードの操作ができます。
- システム
エンジニア - NULLはisnull関数やcase文でも操作できるのですね。
- プロジェクト
マネージャー - はい。update文やdelete文でもnullを扱うことができます。
まとめ
いかがでしたでしょうか。SQLServerでのNULLの扱い方について説明しました。
NULLのレコードを操作(select/update/delete)する方法やNULL以外のレコードを操作することができます。また、要素がNULLの場合は指定文字に置換することもできます。
ぜひご自身でSQL文を書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)