ADA
EXISTS secara harfiah adalah untuk memeriksa keberadaan kriteria yang ditentukan. Dalam SQL standar saat ini, ini akan memungkinkan Anda untuk menentukan lebih dari satu kriteria untuk perbandingan - IE jika Anda ingin tahu kapan col_a dan col_b keduanya cocok - yang membuatnya sedikit lebih kuat daripada klausa IN. MySQL IN mendukung tupel, tetapi sintaksnya tidak portabel, jadi EXISTS adalah pilihan yang lebih baik untuk keterbacaan dan portabilitas.
Hal lain yang perlu diperhatikan dengan EXISTS adalah cara kerjanya - EXISTS mengembalikan boolean, dan akan mengembalikan boolean pada pertandingan pertama. Jadi jika Anda berurusan dengan duplikat/kelipatan, EXISTS akan lebih cepat dieksekusi daripada IN atau JOINs tergantung pada data dan kebutuhan.
IN
IN adalah gula sintaksis untuk klausa OR. Meskipun sangat akomodatif, ada masalah dalam menangani banyak nilai untuk perbandingan tersebut (sebelah utara 1.000).
TIDAK
Operator NOT hanya membalikkan logika.
Subkueri vs GABUNG
Mantra "selalu gunakan gabungan" cacat, karena BERGABUNG berisiko menggelembungkan hasil yang ditetapkan jika ada lebih dari satu catatan anak terhadap orang tua. Ya, Anda dapat menggunakan DISTINCT atau GROUP BY untuk menangani hal ini, tetapi kemungkinan besar hal ini memberikan manfaat kinerja menggunakan moot JOIN. Ketahui data Anda, dan apa yang Anda inginkan untuk kumpulan hasil - ini adalah kunci untuk menulis SQL yang berkinerja baik.
Untuk mengulangi mengetahui kapan dan mengapa mengetahui apa yang harus digunakan - LEFT JOIN IS NULL adalah daftar pengecualian tercepat di MySQL jika kolom yang dibandingkan TIDAK dapat dibatalkan , jika TIDAK DI/TIDAK ADA adalah pilihan yang lebih baik.
Referensi:
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS pada kolom nullable
- MySQL:LEFT JOIN/IS NULL, NOT IN, NOT EXISTS pada kolom NOT nullable