Mysql null aman tidak sama

Dalam SQL _______ 45 _______ tidak sama (_______ 46 _______) dengan apa pun — bahkan dengan null lainnya. Menurut logika tiga nilai SQL, hasil dari null = null tidak benar tetapi tidak diketahui. SQL memiliki predikat is [not] null untuk menguji apakah nilai tertentu adalah null

Dengan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
1 SQL juga menyediakan operator perbandingan yang memperlakukan dua nilai null sebagai sama

<expression> IS NOT DISTINCT FROM <expression>
_

Perhatikan bahwa Anda harus menggunakan bentuk negasi dengan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
3 untuk sampai pada logika yang mirip dengan operator yang sama dengan (=)

Tabel kebenaran berikut menyoroti perbedaan antara tanda sama dengan (=) dan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
7
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
8
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
9
EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )
0
EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )
1
EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )
1truetrue
EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )
1
EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )
4falsefalse
EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )
1nullunknownfalsenullnullunknowntrue

Hasil dengan persamaan (=_) tidak diketahui jika salah satu operatornya adalah null. Perbandingan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6 benar jika kedua nilai null atau salah jika hanya satu yang null

Alternatif yang Sesuai

Catatan

Meskipun ada alternatif standar untuk

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6, menggunakan a seringkali merupakan pilihan yang lebih baik

Karena logika tiga nilai SQL, pengganti yang sepenuhnya setara untuk

EXISTS (SELECT c1
        INTERSECT
        SELECT c2
       )
5 yang berfungsi di semua basis data SQL ternyata sangat rumit—bahkan ketika kami membatasi persyaratan untuk kasus di mana evaluasi ekspresi
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
7 dan
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
8 bersifat deterministik dan tidak memiliki efek samping

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0

Hasil ekspresi dalam klausa

EXISTS (SELECT c1
        INTERSECT
        SELECT c2
       )
8 benar jika kedua argumen sama atau keduanya null. Jika hanya satu argumen null hasilnya tidak diketahui, tidak salah. Ini seringkali tidak menjadi masalah karena seperti menerima atau menolak baris untuk klausa
DECODE(A, B, 0, 1) = 0
1

Untuk mendapatkan fungsionalitas yang sepenuhnya setara dari

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6—i. e. benar atau salah tetapi tidak pernah diketahui—ekspresi
DECODE(A, B, 0, 1) = 0
3 mereduksi hasil tiga nilai menjadi hasil dua nilai. Dalam beberapa basis data
DECODE(A, B, 0, 1) = 0
_4 dapat digunakan sebagai pengganti ekspresi
DECODE(A, B, 0, 1) = 0
3. Teknik ini dijelaskan dalam

Atas Nama Saya Sendiri

Saya mencari nafkah dari pelatihan SQL, penyetelan dan konsultasi SQL, dan buku saya "Penjelasan Kinerja SQL". Pelajari lebih lanjut di https. // menang dan. pada/

Pilihan lain adalah menggunakan. Cuplikan berikut menggunakan

DECODE(A, B, 0, 1) = 0
_6 untuk menentukan subkumpulan umum. Dua set yang dibandingkan masing-masing hanya satu nilai (satu baris dengan satu kolom). Jika nilainya dua kali lipat, subset umum akan menjadi nilai itu. Kalau tidak, subset umum kosong. Logika ini dapat dengan mudah diuji dalam klausa ________20______1 dengan predikat
DECODE(A, B, 0, 1) = 0
8

EXISTS (VALUES (A)
        INTERSECT
        VALUES (B)
       )

Ini memiliki keuntungan karena tidak mengulangi ekspresi apa pun. Sayangnya, ini tidak berfungsi di semua database karena penggunaan klausa

DECODE(A, B, 0, 1) = 0
9. Pilih dari tabel dummy satu baris dapat digunakan untuk mendapatkan solusi yang sesuai dan didukung secara luas

Kesesuaian

Predikat

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
1 diperkenalkan dalam dua langkah. SQL. 1999 menambahkan T151, “predikat BERBEDA”. Negasi opsional dengan
CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
3 ditambahkan oleh SQL. 2003 sebagai fitur T152, “DISTINCT predikat dengan negasi”

BigQueryDb2 (LUW)aaMariaDBMySQLOracle DBPostgreSQLSQL ServerSQLiteberbeda daritidak berbeda dariUsingcasedandis nullMenggunakanintersect,values,exists
  1. Tersedia dalam 11. 1 Paket Mod 1/Perbaiki Paket 1

Alternatif Kepemilikan

Sebagian besar database yang tidak menawarkan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
_6 menawarkan alternatif eksklusif yang lebih nyaman daripada yang dijelaskan di atas. Fitur berpemilik berikut sepenuhnya kompatibel—i. e. mereka memiliki hasil dua nilai dan tidak pernah kembali tidak diketahui

BigQueryDb2 (LUW)MariaDBMySQLOracle DBPostgreSQLSQL ServerSQLiteintersect,selectw/ofromdecode(A, B, 0, 1) = 0A is BA <=> B

null3, null4 tanpa null5, DECODE(A, B, 0, 1) = 06

Solusi standar menggunakan

DECODE(A, B, 0, 1) = 0
8,
DECODE(A, B, 0, 1) = 0
9, dan
DECODE(A, B, 0, 1) = 0
6 dapat dengan mudah dimodifikasi untuk bekerja pada lebih banyak database dengan menggunakan null4 tanpa null5 alih-alih klausa
DECODE(A, B, 0, 1) = 0
9

EXISTS (SELECT c1
        INTERSECT
        SELECT c2
       )

dekode — Db2, Oracle, H2

Db2, database Oracle, dan H2 memiliki fungsi kepemilikan =3 yang kebetulan menggunakan semantik

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6 secara internal. Contoh berikut memiliki efek yang sama dengan
EXISTS (SELECT c1
        INTERSECT
        SELECT c2
       )
5

DECODE(A, B, 0, 1) = 0

=6 — SQLite, H2

Operator =_6 dari SQLite () dan H2 () dapat membandingkan dua ekspresi (bukan hanya is [not] null), dan memiliki semantik yang sama dengan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6

null0 — MySQL, MariaDB

yang bekerja seperti

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6

null3 — SQL Server

Pengaturan ANSI_NULLS yang tidak digunakan lagi dari SQL Server membuat beberapa perbandingan yang sama (=) bertindak seolah-olah itu adalah perbandingan

CASE WHEN (a = b) or (a IS NULL AND b IS NULL)
     THEN 0
     ELSE 1
 END = 0
6

Peringatan

null6 sudah tidak digunakan lagi. penggunaannya dapat menyebabkan kesalahan dalam versi SQL Server yang akan datang

Perhatikan juga bahwa ini tidak memengaruhi semua tanda sama dengan, tetapi hanya tanda yang satu sisi perbandingannya adalah variabel atau literal null. Itu tidak memengaruhi perbandingan ________45______8 umum

Tidak sama dengan NULL di MySQL?

MySQL Tidak Sama dengan Null . if the query returns a NOT NULL value, the condition will equate to TRUE.

Dapatkah saya menggunakan. = Di MySQL?

Di MySQL, Anda dapat menggunakan <> atau. = operator untuk menguji ketidaksetaraan dalam kueri . Misalnya, kita dapat menguji ketimpangan menggunakan operator <>, sebagai berikut. PILIH * DARI kontak WHERE last_name <> 'Johnson';

Bagaimana Anda menggunakan tidak sama dengan NULL?

NULL tidak memiliki nilai, sehingga tidak dapat dibandingkan menggunakan operator nilai skalar . Dengan kata lain, tidak ada nilai yang sama dengan (atau tidak sama dengan) NULL karena NULL tidak memiliki nilai.

Apa. = Berarti di MySQL?

tidak sama dengan (<>,. =) operator. MySQL Not equal digunakan untuk mengembalikan satu set baris (dari tabel) setelah memastikan bahwa dua ekspresi ditempatkan di kedua sisi operator NOT EQUAL TO (<>) tidak sama. Sintaksis. <>,. = Versi MySQL. 5. 6.