5.1 Mangelnde Bedeutung
Die SQL-Sprache verfügt wie die Java-Sprache über ein spezielles Schlüsselwort, das das Fehlen eines Werts anzeigt – es ist null. Oder wie es oft geschrieben wird - NULL
.
Die Verwendung NULL
in SQL ist der Verwendung von null in Java sehr ähnlich. In Java kann es Objekte geben, deren Felder Nullwerte enthalten. In SQL kann es Tabellen geben, deren Zeilen NULL-Werte enthalten.
Lassen Sie mich absichtlich ein paar markenlose Produkte zu unserer Produkttabelle hinzufügen. Wenn die Marke des Produkts unbekannt ist, beträgt der Wert NULL
.
Um solche Produkte anzuzeigen, sortieren wir unsere Produkttabelle in umgekehrter Reihenfolge nach ID und nehmen 10 Datensätze. Die Anfrage sieht folgendermaßen aus:
SELECT * FROM product
ORDER BY id DESC
LIMIT 10
Wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
15 | Niet | NULL | 0,01 | 1000 |
14 | Schrauben | NULL | 0,10 | 1000 |
13 | Stand | IKEA | 100,00 | 10 |
12 | Blumentopf | Smartflower | 99,00 | 9 |
elf | Sessel | Bosch | 44,00 | 8 |
10 | Platte | Bosch | 199,00 | 10 |
9 | Kommode | IKEA | 99,00 | 10 |
8 | Lampe | LG | 15.00 | 100 |
7 | Fernseher | LG | 350,00 | 4 |
6 | Regal | Bosch | 25.00 | 114 |
Ja, ich habe den Tisch mit Nieten und Schrauben versehen. Sie haben Preis und Menge, aber keine Marke.
5.2 Vergleich mit NULL
Erinnern Sie sich, dass Sie in Java manchmal wütend geworden sind, wenn Sie null verwendet haben? Dass man Variablen, die auf Nullwerte verweisen können, nicht über equal() vergleichen kann. Beispiel:
Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) { //an exception will be raised here
…
}
Sie werden es nicht glauben, aber in der SQL-Sprache erwarten Sie auch die Nuancen beim Arbeiten mit NULL-Werten. Und es klingt ungefähr so:nichts ist NULL.
Wenn Sie versuchen, alle Produkte herauszufiltern, deren Marke ist null
:
SELECT * FROM product
WHERE brand = NULL
Sie erhalten eine leere Tabelle:
Ausweis | Name | Marke | Preis | zählen |
---|
Wenn Sie jedoch in die Abfrage schreiben, dass die Marke nicht gleich ist NULL
, erhalten Sie das gleiche Ergebnis:
SELECT * FROM product
WHERE brand != NULL
Sie erhalten wieder eine leere Tabelle:
Ausweis | Name | Marke | Preis | zählen |
---|
Jeder Vergleich/jede Aktion mit NULL gibt NULL zurück:
Ausdruck | Ergebnis |
---|---|
Marke = NULL | NULL |
Marke != NULL | NULL |
NULL = NULL | NULL |
NULL != NULL | NULL |
Ja,Selbst wenn Sie NULL mit NULL vergleichen, lautet die Antwort NULL.
5.3 IST NULL und IST NICHT NULL
Wie überprüfen wir also, ob ein Feld (oder eine Spalte) den Wert hat NULL
? Und dafür gibt es in SQL einen speziellen Ausdruck – IS NULL
. Es sieht aus wie das.
variable IS NULL
Wenn Sie überprüfen möchten, ob eine Spalte Ihrer Tabelle ungleich ist NULL
, müssen Sie Folgendes schreiben IS NOT NULL
:
variable IS NOT NULL
Schreiben wir eine Abfrage, die alle Produkte aus der Produkttabelle auswählt, deren Marke gleich ist NULL
. Eine solche Anfrage würde so aussehen:
SELECT * FROM product
WHERE brand IS NULL
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
14 | Schrauben | NULL | 0,10 | 1000 |
15 | Niet | NULL | 0,01 | 1000 |
Lassen Sie uns nun alle Produkte anzeigen, deren Preis weniger als 20 $ beträgt:
SELECT * FROM product
WHERE price < 20
Und wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
2 | Der Stuhl | IKEA | 5.00 | 45 |
8 | Lampe | LG | 15.00 | 100 |
14 | Schrauben | NULL | 0,10 | 1000 |
15 | Niet | NULL | 0,01 | 1000 |
Jetzt geben wir an, dass der Preis unter 20 $ liegen muss und die Marke nicht unter 20 $ liegen darf NULL
.
SELECT * FROM product
WHERE price < 20 AND brand IS NOT NULL
Wir erhalten das folgende Abfrageergebnis:
Ausweis | Name | Marke | Preis | zählen |
---|---|---|---|---|
2 | Der Stuhl | IKEA | 5.00 | 45 |
8 | Lampe | LG | 15.00 | 100 |
Großartig, die letzten beiden Zeilen sind weg. So funktioniert das. Ein wenig ungewöhnlich, aber dennoch steckt darin eine gewisse Logik.
GO TO FULL VERSION