特別な null 値

All lectures for JA purposes
レベル 1, レッスン 775
使用可能

5.1 重要性の欠如

SQL 言語には、Java 言語と同様に、値がないこと (null ) を示す特別なキーワードがあります。あるいは、よく書かれているように - NULL。

SQL での使用法は、NULLJava での null の使用法と非常に似ています。Java では、フィールドに null 値が含まれるオブジェクトが存在する場合があります。SQL では、行に NULL 値が含まれるテーブルが存在する場合があります。

意図的にノーブランドの製品を製品表にいくつか追加させてください。製品のブランドが不明な場合、値は になりますNULL。

このような製品を表示するには、製品テーブルをIDで逆順にソートし、10 件のレコードを取得しましょう。リクエストは次のようになります。

SELECT * FROM product
ORDER BY id DESC
LIMIT 10

次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
15 リベット ヌル 0.01 1000
14 スクリュー ヌル 0.10 1000
13 台 イケア 100.00 10
12 植木鉢 スマートフラワー 99.00 9
十一 アームチェア ボッシュ 44.00 8
10 皿 ボッシュ 199.00 10
9 ドレッサー イケア 99.00 10
8 ランプ LG 15.00 100
7 テレビ LG 350.00 4
6 シェルフ ボッシュ 25.00 114

はい、テーブルにリベットとネジを追加しました。価格と数量はありますが、ブランドはありません。

5.2 NULLとの比較

Java で null を使用すると時々怒られたことを覚えていますか? つまり、equals() を介して null 値を参照できる変数を比較することはできません。例:

Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) {  //an exception will be raised here
…
}

信じられないかもしれませんが、SQL 言語では、NULL 値を扱うときのニュアンスも必要になります。そしてそれは次のように聞こえます:何もNULLではありません。

ブランドが次のすべての製品をフィルタリングしようとすると、次のようになりますnull。

SELECT * FROM product
WHERE brand = NULL

空のテーブルが得られます。

ID 名前 ブランド 価格 カウント

ただし、クエリにbrand がに等しくない と記述するとNULL、同じ結果が得られます。

SELECT * FROM product
WHERE brand != NULL

再び空のテーブルが得られます。

ID 名前 ブランド 価格 カウント

NULL を使用した比較/アクションはすべて NULL を返します。:

表現 結果
ブランド = NULL ヌル
ブランド != NULL ヌル
NULL = NULL ヌル
NULL != NULL ヌル

はい、NULL と NULL を比較しても、答えは NULL になります。。

5.3 NULL と IS NOT NULL

では、あるフィールド (または列) の値が であることを確認するにはどうすればよいでしょうかNULL? このために、SQL には特別な式があります - IS NULL。こんな感じです。

variable IS NULL

テーブルの列が と等しくないかどうかを確認したい場合はNULL、次のように記述する必要がありますIS NOT NULL。

variable IS NOT NULL

ブランドが に等しい製品テーブルからすべての製品を選択するクエリを作成してみましょうNULL。このようなリクエストは次のようになります。

SELECT * FROM product
WHERE brand IS NULL

そして、次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
14 スクリュー ヌル 0.10 1000
15 リベット ヌル 0.01 1000

次に、価格が 20 ドル未満のすべての製品を表示してみましょう。

SELECT * FROM product
WHERE price  < 20

そして、次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
2 椅子 イケア 5.00 45
8 ランプ LG 15.00 100
14 スクリュー ヌル 0.10 1000
15 リベット ヌル 0.01 1000

ここで、価格は 20 ドル未満である必要があり、ブランドはそうではないことを指定しますNULL。

SELECT * FROM product
WHERE price  < 20 AND brand IS NOT NULL

次のクエリ結果が得られます。

ID 名前 ブランド 価格 カウント
2 椅子 イケア 5.00 45
8 ランプ LG 15.00 100

すごい、最後の 2 行が消えています。仕組みは次のとおりです。少し珍しいですが、これには一定のロジックがあります。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION