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 NULLin 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.