5.1 重要性の欠如
SQL 言語には、Java 言語と同様に、値がないこと (null ) を示す特別なキーワードがあります。あるいは、よく書かれているように - NULL
。
SQL での使用法は、NULL
Java での 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 行が消えています。仕組みは次のとおりです。少し珍しいですが、これには一定のロジックがあります。