5.1 Kurangnya signifikansi
Bahasa SQL, seperti bahasa Java, memiliki kata kunci khusus untuk menunjukkan tidak adanya nilai - yaitu nol. Atau seperti yang sering ditulis - NULL
.
Penggunaan NULL
di SQL sangat mirip dengan penggunaan null di Java. Di Jawa, mungkin ada objek yang bidangnya berisi nilai nol. Di SQL, mungkin ada tabel yang barisnya berisi nilai NULL.
Izinkan saya menambahkan beberapa produk tidak bermerek ke tabel produk kami dengan sengaja. Jika merek produk tidak diketahui, maka nilainya adalah NULL
.
Untuk menampilkan produk seperti itu, mari urutkan tabel produk berdasarkan id dalam urutan terbalik dan ambil 10 catatan. Permintaan akan terlihat seperti ini:
SELECT * FROM product
ORDER BY id DESC
LIMIT 10
Kami mendapatkan hasil kueri berikut:
pengenal | nama | merek | harga | menghitung |
---|---|---|---|---|
15 | Memusatkan | BATAL | 0,01 | 1000 |
14 | Baut | BATAL | 0,10 | 1000 |
13 | Berdiri | IKEA | 100.00 | 10 |
12 | pot bunga | Bunga pintar | 99.00 | 9 |
sebelas | Kursi berlengan | Bosch | 44.00 | 8 |
10 | Piring | Bosch | 199.00 | 10 |
9 | Meja rias | IKEA | 99.00 | 10 |
8 | Lampu | LG | 15.00 | 100 |
7 | televisi | LG | 350.00 | 4 |
6 | Rak | Bosch | 25.00 | 114 |
Ya, saya menambahkan paku keling dan sekrup ke meja. Mereka memiliki harga dan kuantitas, tetapi tidak ada merek.
5.2 Perbandingan dengan NULL
Apakah Anda ingat bahwa terkadang Anda marah di Java saat menggunakan null? Bahwa Anda tidak dapat membandingkan variabel yang dapat merujuk ke nilai nol melalui equals(). Contoh:
Product product1 = new Product();
Product product2 = null;
if (product2.equals(product1) { //an exception will be raised here
…
}
Anda tidak akan mempercayainya, tetapi dalam bahasa SQL Anda juga menunggu nuansa saat bekerja dengan nilai NULL. Dan kedengarannya seperti ini:tidak ada yang NULL.
Jika Anda mencoba memfilter semua produk yang mereknya adalah null
:
SELECT * FROM product
WHERE brand = NULL
Anda akan mendapatkan meja kosong:
pengenal | nama | merek | harga | menghitung |
---|
Tetapi jika Anda menulis dalam kueri bahwa brand is not equal to NULL
, Anda akan mendapatkan hasil yang sama:
SELECT * FROM product
WHERE brand != NULL
Anda akan kembali mendapatkan meja kosong:
pengenal | nama | merek | harga | menghitung |
---|
Setiap perbandingan/tindakan dengan NULL akan mengembalikan NULL:
Ekspresi | Hasil |
---|---|
merek = NULL | BATAL |
merek != NULL | BATAL |
NULL = NULL | BATAL |
NULL != NULL | BATAL |
Ya,bahkan jika Anda membandingkan NULL dengan NULL, maka jawabannya adalah NULL.
5.3 ADALAH NULL dan BUKAN NULL
Jadi bagaimana kita memeriksa bahwa beberapa bidang (atau beberapa kolom) memiliki nilai NULL
? Dan untuk ini, SQL memiliki ekspresi khusus - IS NULL
. Sepertinya ini.
variable IS NULL
Jika Anda ingin memeriksa apakah kolom tabel Anda tidak sama dengan NULL
, maka Anda perlu menulis IS NOT NULL
:
variable IS NOT NULL
Mari tulis kueri yang akan memilih semua produk dari tabel produk yang mereknya sama dengan NULL
. Permintaan seperti itu akan terlihat seperti ini:
SELECT * FROM product
WHERE brand IS NULL
Dan kami mendapatkan hasil kueri berikut:
pengenal | nama | merek | harga | menghitung |
---|---|---|---|---|
14 | Baut | BATAL | 0,10 | 1000 |
15 | Memusatkan | BATAL | 0,01 | 1000 |
Sekarang mari kita tampilkan semua produk yang harganya kurang dari $20:
SELECT * FROM product
WHERE price < 20
Dan kami mendapatkan hasil kueri berikut:
pengenal | nama | merek | harga | menghitung |
---|---|---|---|---|
2 | Kursi | IKEA | 5.00 | 45 |
8 | Lampu | LG | 15.00 | 100 |
14 | Baut | BATAL | 0,10 | 1000 |
15 | Memusatkan | BATAL | 0,01 | 1000 |
Sekarang kami menetapkan bahwa harganya harus kurang dari $20 dan merek tidak NULL
.
SELECT * FROM product
WHERE price < 20 AND brand IS NOT NULL
Kami mendapatkan hasil kueri berikut:
pengenal | nama | merek | harga | menghitung |
---|---|---|---|---|
2 | Kursi | IKEA | 5.00 | 45 |
8 | Lampu | LG | 15.00 | 100 |
Hebat, dua baris terakhir hilang. Begini cara kerjanya. Sedikit tidak biasa, tetapi masih ada logika tertentu dalam hal ini.