Penjelasan NULL di MySQL: Makna, Kueri, Fungsi, Pengindeksan, Pengurutan, dan Praktik Terbaik

目次

1. Pendahuluan

MySQL adalah sistem manajemen basis data yang digunakan dalam banyak aplikasi dan sistem. Di dalam MySQL, konsep NULL adalah salah satu topik yang dapat sulit dipahami oleh pemula. Memahami secara akurat apa itu NULL dan cara menanganinya sangat penting ketika bekerja dengan MySQL.

Dalam artikel ini, kami memberikan penjelasan komprehensif—dari definisi dasar NULL di MySQL hingga cara memanipulasinya, cara mencarinya, fungsi‑fungsi berguna yang terkait dengan NULL, dan poin‑poin penting yang perlu diperhatikan. Kami juga menyertakan bagian FAQ yang menjawab pertanyaan umum tentang NULL.

Artikel ini ditujukan untuk pembaca seperti:

  • Pemula yang menggunakan MySQL untuk pertama kalinya
  • Pembelajar menengah yang memahami SQL dasar dan ingin belajar lebih mendalam
  • Insinyur yang terlibat dalam perancangan dan operasi basis data

Pada akhir artikel ini, Anda akan dapat:

  • Memahami dengan tepat apa itu NULL
  • Memanipulasi dan mencari data yang mengandung NULL
  • Mempelajari praktik terbaik untuk menghindari masalah terkait NULL

Sekarang, mari kita telusuri dasar‑dasar NULL langkah demi langkah.

2. Dasar‑dasar NULL

Saat bekerja dengan basis data, konsep NULL sangat penting. Namun, NULL juga merupakan salah satu elemen yang paling sering disalahpahami. Pada bagian ini, kami menjelaskan definisi dasar dan sifat‑sifat NULL secara detail.

Definisi NULL

NULL mewakili keadaan khusus yang berarti “tidak ada nilai” atau “nilai tidak diketahui.” Ini berbeda dari string kosong (“”) atau nol (0). Berikut contoh yang menunjukkan perbedaannya:

  • NULL : Tidak ada nilai (keadaan tak terdefinisi)
  • String kosong (“”) : Nilai ada, tetapi isinya kosong
  • Nol (0) : Nilai ada, dan nilai tersebut adalah 0

Sifat‑sifat NULL

  1. Bagaimana NULL berperilaku dalam perbandingan Di SQL, NULL ditangani dengan aturan khusus. Misalnya, perhatikan hasil perbandingan berikut:
    SELECT NULL = NULL; -- Result: NULL
    SELECT NULL <> NULL; -- Result: NULL
    SELECT NULL IS NULL; -- Result: TRUE
    
  • Membandingkan NULL dengan operator perbandingan biasa (=, <, >, dll.) menghasilkan NULL.
  • Untuk mengevaluasi NULL dengan benar, Anda harus menggunakan IS NULL atau IS NOT NULL.
  1. NULL dalam operasi aritmetika Setiap operasi aritmetika yang melibatkan NULL selalu mengembalikan NULL. Contoh:
    SELECT 10 + NULL; -- Result: NULL
    SELECT NULL * 5; -- Result: NULL
    
  1. Operasi logika dengan NULL Ketika sebuah kondisi menyertakan NULL, hasilnya juga dapat menjadi NULL. Lihat contoh di bawah ini:
    SELECT NULL AND TRUE; -- Result: NULL
    SELECT NULL OR FALSE; -- Result: NULL
    

Mengapa NULL menyebabkan masalah

Jika Anda tidak menangani NULL dengan tepat, Anda dapat mengalami masalah seperti:

  • Hasil pencarian yang tidak terduga Misalnya, kueri berikut mengecualikan baris di mana age bernilai NULL.
    SELECT * FROM users WHERE age > 20;
    

Sebagai solusi, Anda perlu menyertakan NULL dalam kondisi:

SELECT * FROM users WHERE age > 20 OR age IS NULL;
  • Kesalahan perhitungan dan kesalahpahaman data kosong Fungsi agregat (SUM, AVG, dll.) mengabaikan NULL saat menghitung. Akibatnya, kumpulan data dengan banyak nilai NULL dapat menghasilkan hasil yang tidak diinginkan.

Ringkasan aturan dasar NULL

  • NULL mewakili keadaan “tidak ada nilai.”
  • Karena operator perbandingan biasa tidak menangani NULL dengan tepat, gunakan IS NULL atau IS NOT NULL.
  • Jika NULL termasuk dalam operasi aritmetika atau logika, hasilnya juga menjadi NULL.

3. Cara Memanipulasi NULL

Saat bekerja dengan NULL di MySQL, Anda perlu memahami cara yang benar untuk menanganinya. Pada bagian ini, kami menjelaskan metode spesifik untuk menyisipkan, memperbarui, dan menghapus NULL secara detail.

Cara menetapkan NULL saat menyisipkan data

Saat menyisipkan catatan baru ke dalam basis data, Anda dapat mengatur kolom menjadi NULL. Berikut contoh konkretnya.

  • Secara eksplisit menyebutkan NULL
    INSERT INTO users (name, age) VALUES ('Taro', NULL);
    

Dalam kueri ini, kolom age tidak diberikan nilai, dan NULL dimasukkan.

  • NULL sebagai nilai default Jika NULL dikonfigurasi sebagai nilai default, mengabaikan nilai akan secara otomatis memasukkan NULL.
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50),
        age INT DEFAULT NULL
    );
    
    INSERT INTO users (name) VALUES ('Hanako');
    

Dalam contoh ini, karena tidak ada nilai eksplisit yang diberikan untuk kolom age, NULL default dimasukkan.

Cara mengatur NULL saat memperbarui data

Anda juga dapat memperbarui data yang ada untuk mengatur nilai kolom menjadi NULL. Berikut contoh-contohnya.

  • Perbarui nilai menjadi NULL
    UPDATE users SET age = NULL WHERE name = 'Taro';
    

Kueri ini mengatur kolom age menjadi NULL untuk record yang namanya “Taro”.

  • Pembaruan bersyarat Anda dapat menambahkan kondisi untuk mengatur NULL dalam situasi tertentu.
    UPDATE users SET age = NULL WHERE age < 18;
    

Di sini, kolom age diatur menjadi NULL untuk semua record di mana usia kurang dari 18.

Cara menggunakan NULL sebagai kondisi saat menghapus data

Saat menghapus data yang mencakup NULL, Anda harus menyertakan NULL dalam kondisi. Gunakan IS NULL, bukan operator perbandingan.

  • Hapus baris di mana kolom bernilai NULL
    DELETE FROM users WHERE age IS NULL;
    

Kueri ini menghapus record di mana kolom age bernilai NULL.

  • Hapus baris NULL dengan beberapa kondisi
    DELETE FROM users WHERE age IS NULL AND name = 'Taro';
    

Dalam contoh ini, hanya record di mana age bernilai NULL dan name adalah “Taro” yang dihapus.

Catatan penting saat memanipulasi NULL

  1. Gunakan IS NULL dengan benar Saat menggunakan NULL dalam sebuah kondisi, selalu gunakan IS NULL atau IS NOT NULL, bukan operator =.
    SELECT * FROM users WHERE age = NULL; -- Incorrect
    SELECT * FROM users WHERE age IS NULL; -- Correct
    
  1. Rancang aplikasi Anda dengan penanganan NULL dalam pikiran Saat memanipulasi data dari sebuah aplikasi, berhati-hati dalam cara menangani NULL membantu mencegah perilaku yang tidak diinginkan.

  2. Gunakan transaksi Untuk operasi data yang melibatkan NULL, pertimbangkan menggunakan transaksi untuk menghindari perubahan data yang tidak diinginkan.

4. Mencari Data yang Mengandung NULL

Saat mencari data di MySQL, penanganan NULL dengan benar sangat penting. Karena NULL berperilaku berbeda dari nilai normal, diperlukan perhatian khusus. Pada bagian ini, kami menjelaskan cara mencari secara efisien ketika NULL terlibat.

Cara dasar untuk mencari NULL

Untuk mencari NULL, gunakan IS NULL dan IS NOT NULL alih-alih operator perbandingan biasa (=, <, >).

  • Cari NULL
    SELECT * FROM users WHERE age IS NULL;
    

Kueri ini mengambil semua record di mana kolom age bernilai NULL.

  • Cari nilai non-NULL
    SELECT * FROM users WHERE age IS NOT NULL;
    

Kueri ini mengambil semua record di mana kolom age tidak bernilai NULL.

Mencari dengan kondisi kompleks yang mencakup NULL

Karena NULL tidak dapat ditangani dengan benar menggunakan operator perbandingan, berhati-hatilah saat menggunakannya dalam kondisi kompleks.

  • Menyertakan NULL dalam sebuah kondisi
    SELECT * FROM users WHERE age > 20 OR age IS NULL;
    

Kueri ini mengambil record di mana age lebih besar dari 20 atau bernilai NULL.

  • Operator NOT dan NULL
    SELECT * FROM users WHERE NOT (age > 20 OR age IS NULL);
    

Kueri ini mengambil record di mana age 20 atau kurang dan tidak bernilai NULL.

Menggunakan NULL dengan operator LIKE

Operator LIKE tidak dapat digunakan terhadap NULL. Karena NULL berarti tidak ada nilai, kueri berikut tidak mengembalikan baris NULL:

SELECT * FROM users WHERE name LIKE '%a%';
-- NULL values are not matched by this condition

Sebaliknya, Anda perlu menambahkan pemeriksaan NULL:

SELECT * FROM users WHERE name LIKE '%a%' OR name IS NULL;

Fungsi agregat dan pencarian dengan NULL

NULL diabaikan oleh banyak fungsi agregat (SUM, AVG, dll.). Untuk mendapatkan hasil yang tepat, Anda perlu memperhitungkan NULL.

  • Fungsi COUNT
    SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
    
  • COUNT(*) : Menghitung semua baris, termasuk yang memiliki NULL
  • COUNT(column) : Menghitung baris kecuali NULL
  • Fungsi agregat lainnya
    SELECT AVG(age) AS average_age FROM users WHERE age IS NOT NULL;
    

Ini menghitung rata-rata dengan mengecualikan nilai NULL.

Catatan saat mencari NULL

  1. Perbedaan antara IS NULL dan = Karena NULL tidak dapat ditangani oleh perbandingan normal, selalu gunakan IS NULL atau IS NOT NULL.
    SELECT * FROM users WHERE age = NULL; -- Incorrect
    SELECT * FROM users WHERE age IS NULL; -- Correct
    
  1. Menangani beberapa kondisi Jika NULL mungkin ada, Anda harus secara eksplisit menyertakannya dalam kondisi untuk menghindari hasil yang tidak diinginkan.
    SELECT * FROM users WHERE age > 20; -- NULL is excluded
    SELECT * FROM users WHERE age > 20 OR age IS NULL; -- Includes NULL
    
  1. Dampak kinerja Saat menyertakan NULL dalam kondisi, penggunaan indeks mungkin terbatas dalam beberapa kasus. Kami menyarankan memverifikasi efektivitas indeks.
    EXPLAIN SELECT * FROM users WHERE age IS NULL;
    

Ringkasan

Mencari NULL dengan benar sangat penting untuk mendapatkan hasil yang diinginkan. Saat mencari data yang mencakup NULL, gunakan IS NULL dan IS NOT NULL secara tepat, serta pertimbangkan dampak kinerja dan indeks.

5. NULL, Indeks, dan Kinerja

Untuk mengoptimalkan kinerja basis data, penggunaan indeks yang tepat sangat penting. Namun, operasi pada kolom yang mengandung NULL dapat memengaruhi efisiensi indeks. Pada bagian ini, kami menjelaskan hubungan antara NULL dan indeks, dampak kinerjanya, serta strategi optimasi.

Membuat indeks pada kolom yang mengandung NULL

Di MySQL, Anda dapat membuat indeks pada kolom yang mengandung NULL. Misalnya:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT,
    INDEX (age)
);

Dalam kasus ini, indeks pada kolom age tetap valid meskipun kolom tersebut berisi nilai NULL.

Menggunakan indeks dengan IS NULL dan IS NOT NULL

Saat mencari dengan kondisi yang mencakup NULL, indeks mungkin digunakan atau tidak tergantung pada kueri.

  • Ketika indeks digunakan
    SELECT * FROM users WHERE age IS NULL;
    

Pada kueri ini, indeks dapat digunakan, memungkinkan pencarian yang efisien.

  • Ketika indeks tidak digunakan Jika Anda menggunakan kondisi kompleks seperti berikut, indeks mungkin tidak diterapkan.
    SELECT * FROM users WHERE age + 1 IS NULL;
    

Apakah indeks digunakan tergantung pada struktur kondisi kueri.

NULL dan indeks komposit

Bahkan saat menggunakan indeks komposit, kolom yang mengandung NULL mendapatkan penanganan khusus.

  • Contoh indeks komposit
    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,
        department_id INT,
        salary INT,
        INDEX (department_id, salary)
    );
    

Jika department_id bernilai NULL, bagian dari indeks komposit (department_id, salary) mungkin tidak sepenuhnya dimanfaatkan.

Dampak kinerja NULL

  1. Efektivitas indeks
  • Pencarian yang mencakup kondisi NULL sering masih mendapat manfaat dari indeks. Namun, jika kondisi menjadi kompleks, penggunaan indeks mungkin terbatas.
  1. Volume data besar
  • Jika banyak nilai NULL ada di kolom yang diindeks, ukuran indeks dapat meningkat dan berpotensi mengurangi kinerja kueri.
  1. Strategi desain untuk menghindari NULL berlebihan
  • Untuk kolom yang sering berisi NULL, mendefinisikan nilai default untuk mengurangi penggunaan NULL dapat meningkatkan kinerja dalam beberapa kasus.

Tips optimasi kinerja

  • Verifikasi penggunaan indeks Gunakan EXPLAIN untuk memeriksa apakah indeks diterapkan:
    EXPLAIN SELECT * FROM users WHERE age IS NULL;
    
  • Desain untuk meminimalkan NULL Terapkan batasan NOT NULL dan nilai default untuk menghindari NULL dalam skema Anda:
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        age INT NOT NULL DEFAULT 0
    );
    
  • Tinjau kembali indeks Bergantung pada volume data dan pola kueri, pertimbangkan menambah atau menghapus indeks untuk mengoptimalkan kinerja.

Ringkasan

NULL dapat hidup berdampingan dengan indeks, tetapi dalam kondisi tertentu dapat memengaruhi kinerja. Dengan merancang strategi pengindeksan yang tepat dan menetapkan kebijakan yang jelas untuk penggunaan NULL, Anda dapat mencapai operasi basis data yang efisien.

6. NULL dan Pengurutan

Ketika mengurutkan data di MySQL, memahami cara penanganan NULL penting. Karena NULL berperilaku berbeda dari nilai normal, mengetahui urutan default dan cara menyesuaikannya membantu Anda mencapai hasil yang diinginkan. Pada bagian ini, kami menjelaskan aturan dasar dan teknik lanjutan untuk pengurutan dengan NULL.

Urutan default pengurutan NULL

Di MySQL, NULL ditangani sebagai berikut:

  • Ascending (ASC) : Nilai NULL muncul pertama.
  • Descending (DESC) : Nilai NULL muncul terakhir.

Contoh:

SELECT * FROM users ORDER BY age ASC;
-- NULL appears first

SELECT * FROM users ORDER BY age DESC;
-- NULL appears last

Mengontrol posisi NULL secara eksplisit

Anda dapat mengganti perilaku urutan default untuk memaksa nilai NULL muncul pertama atau terakhir.

  • Letakkan nilai NULL pertama
    SELECT * FROM users ORDER BY age IS NULL DESC, age ASC;
    

Dalam kueri ini, baris di mana age adalah NULL muncul pertama, diikuti oleh baris non-NULL yang diurutkan secara naik.

  • Letakkan nilai NULL terakhir
    SELECT * FROM users ORDER BY age IS NULL ASC, age ASC;
    

Di sini, nilai non-NULL muncul pertama, dan nilai NULL ditempatkan di akhir.

Pengurutan dengan beberapa kolom yang mengandung NULL

Saat mengurutkan dengan beberapa kolom, Anda dapat menentukan penanganan NULL per kolom.

  • Contoh dengan beberapa kondisi
    SELECT * FROM users ORDER BY department_id ASC, age IS NULL DESC, age ASC;
    

Kueri ini mengurutkan data dalam urutan berikut:

  1. department_id secara naik
  2. Baris di mana age adalah NULL
  3. Nilai age non-NULL secara naik

Kinerja pengurutan dan NULL

Saat mengurutkan pada kolom yang mengandung NULL, apakah indeks digunakan tergantung pada struktur kueri. Jika indeks tidak digunakan, pengurutan dapat memakan waktu lebih lama.

  • Periksa penggunaan indeks
    EXPLAIN SELECT * FROM users ORDER BY age ASC;
    

Gunakan EXPLAIN untuk memverifikasi apakah indeks diterapkan.

Catatan penting saat mengurutkan

  1. Pertimbangkan tipe data kolom
  • Jika kolom yang berisi NULL memiliki tipe data yang tidak tepat, hasil yang tidak terduga dapat terjadi. Perhatikan khusus perbedaan antara tipe numerik dan string.
  1. Jelaskan kondisi pengurutan
  • Untuk membuat hasil kueri menjadi eksplisit, gunakan IS NULL atau IS NOT NULL saat menangani NULL secara sengaja.
    SELECT * FROM users WHERE age IS NULL ORDER BY age DESC;
    

Ringkasan

Secara default, NULL muncul pertama dalam urutan naik dan terakhir dalam urutan turun. Namun, Anda dapat menyesuaikan kueri untuk mengontrol posisi nilai NULL. Dengan menentukan kondisi yang tepat, Anda dapat mencapai urutan pengurutan yang diinginkan.

7. Fungsi Berguna untuk Menangani NULL

MySQL menyediakan beberapa fungsi praktis untuk menangani NULL secara efisien. Dengan menggunakan fungsi-fungsi ini, Anda dapat menulis kueri yang lebih bersih dan memproses data lebih efektif ketika nilai NULL terlibat. Pada bagian ini, kami menjelaskan fungsi yang paling umum digunakan dan cara menggunakannya.

Fungsi COALESCE

COALESCE mengembalikan nilai non-NULL pertama dari argumen yang diberikan. Ini berguna ketika Anda ingin mengganti NULL dengan nilai default.

  • Sintaks dasar
    COALESCE(value1, value2, ..., valueN)
    
  • Contoh
    SELECT COALESCE(age, 0) AS adjusted_age FROM users;
    

Dalam kueri ini, jika age adalah NULL, ia mengembalikan 0; jika tidak, ia mengembalikan nilai age.

  • Contoh dengan banyak argumen
    SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value') AS result;
    

Hasilnya akan menjadi “Default Value”.

Fungsi IFNULL

IFNULL mengembalikan nilai yang ditentukan jika ekspresi adalah NULL. Ini mirip dengan COALESCE tetapi terbatas pada dua argumen.

  • Sintaks dasar
    IFNULL(expression, alternate_value)
    
  • Contoh
    SELECT IFNULL(age, 0) AS adjusted_age FROM users;
    

Jika age adalah NULL, ini mengembalikan 0.

  • Perbedaan dari COALESCE
  • IFNULL hanya menerima dua argumen, sedangkan COALESCE dapat menerima beberapa argumen.

Operator Kesetaraan Aman NULL (<=>)

Operator <=> memungkinkan perbandingan aman untuk nilai NULL. Menggunakan operator ini memungkinkan Anda membandingkan nilai NULL secara langsung.

  • Contoh
    SELECT * FROM users WHERE age <=> NULL;
    

Kueri ini secara akurat mengambil catatan di mana age adalah NULL.

  • Perbedaan dari operator kesetaraan normal (=)
  • Dengan operator =, NULL = NULL mengembalikan NULL, tetapi dengan <=>, itu mengembalikan TRUE.

Fungsi ISNULL

ISNULL memeriksa apakah suatu nilai adalah NULL. Meskipun IS NULL dan IS NOT NULL biasanya sudah cukup, ISNULL berguna ketika Anda membutuhkan pemeriksaan berbasis fungsi.

  • Sintaks dasar
    ISNULL(expression)
    
  • Contoh
    SELECT ISNULL(age) AS is_null FROM users;
    

Jika age adalah NULL, itu mengembalikan 1; jika tidak, itu mengembalikan 0.

Fungsi NULLIF

NULLIF mengembalikan NULL jika dua argumen sama; jika tidak, itu mengembalikan argumen pertama.

  • Sintaks dasar
    NULLIF(expression1, expression2)
    
  • Contoh
    SELECT NULLIF(salary, 0) AS adjusted_salary FROM employees;
    

Jika salary adalah 0, itu mengembalikan NULL; jika tidak, itu mengembalikan nilai salary.

Cara memilih fungsi NULL yang tepat

  • Untuk mengatur nilai default : Gunakan COALESCE atau IFNULL
  • Untuk membandingkan NULL secara aman : Gunakan operator <=>
  • Untuk memeriksa NULL secara eksplisit : Gunakan ISNULL atau IS NULL
  • Untuk mengembalikan NULL dalam kondisi tertentu : Gunakan NULLIF

Ringkasan

MySQL menyediakan kumpulan fungsi yang kaya untuk menangani NULL. Dengan memilih fungsi yang tepat, Anda dapat menulis kueri yang lebih sederhana dan efisien. Gunakan fungsi-fungsi ini untuk mengoptimalkan cara aplikasi Anda menangani nilai NULL.

8. Praktik Terbaik untuk Menangani NULL

NULL memainkan peran penting dalam operasi database, tetapi karena karakteristik uniknya, itu juga dapat menyebabkan kebingungan dan masalah. Dengan menangani NULL dengan benar, Anda dapat mempertahankan integritas data dan memastikan operasi yang efisien. Dalam bagian ini, kami menjelaskan praktik terbaik untuk bekerja dengan NULL.

Menangani NULL dalam desain database

  1. Memutuskan apakah mengizinkan NULL
  • NULL mewakili “tidak ada nilai yang ada,” tetapi tidak setiap kolom harus mengizinkan NULL.
  • Contoh: wp:list /wp:list

    • Kolom wajib (misalnya, nama pengguna, alamat email) harus memiliki kendala NOT NULL.
    • Kolom yang mungkin secara sah tidak memiliki nilai (misalnya, skor menengah, pengaturan opsional) dapat mengizinkan NULL.
      CREATE TABLE users (
          id INT AUTO_INCREMENT PRIMARY KEY,
          name VARCHAR(50) NOT NULL,
          email VARCHAR(100) NOT NULL,
          age INT NULL
      );
      
  1. Mengatur nilai default
  • Untuk meminimalkan penggunaan NULL, tentukan nilai default yang sesuai jika memungkinkan.
    CREATE TABLE orders (
        id INT AUTO_INCREMENT PRIMARY KEY,
        status VARCHAR(20) NOT NULL DEFAULT 'pending'
    );
    

Mengelola NULL di lapisan aplikasi

  1. Validasi data input
  • Ketika pengguna mengirimkan data melalui formulir, verifikasi bahwa kolom wajib diisi.
  • Tambahkan validasi sisi server untuk mencegah nilai NULL yang tidak disengaja dimasukkan ke database.
  1. Standarisasi penanganan NULL
  • Pastikan penanganan NULL konsisten di seluruh kode aplikasi.
  • Contoh: Sediakan fungsi pembantu untuk mengonversi NULL menjadi nilai default.
    def handle_null(value, default):
        return value if value is not None else default
    

Pertimbangan penting saat menulis kueri

  1. Perbandingan NULL yang aman
  • Selalu gunakan IS NULL atau IS NOT NULL saat membandingkan NULL.
    SELECT * FROM users WHERE age IS NULL;
    
  1. Menangani NULL dalam kondisi kompleks
  • Saat menulis kueri dengan banyak kondisi, secara eksplisit perhitungkan NULL.
    SELECT * FROM users WHERE age > 20 OR age IS NULL;
    
  1. Mempertimbangkan NULL dalam hasil agregat
  • Fungsi agregat (SUM, AVG, dll.) mengabaikan nilai NULL. Jika Anda perlu memeriksa berapa banyak nilai NULL yang ada, tambahkan kondisi eksplisit.
    SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_records FROM users;
    

Meningkatkan kinerja dan keterbacaan

  1. Indeks dan NULL
  • Jika menggunakan indeks pada kolom yang mengandung banyak nilai NULL, verifikasi efisiensi indeks.
  • Bangun ulang atau sesuaikan indeks bila diperlukan.
  1. Meminimalkan NULL
  • Mengurangi penggunaan NULL yang tidak perlu selama fase desain meningkatkan keterbacaan dan kinerja basis data.
  • Gunakan nilai default atau flag alih-alih sangat bergantung pada NULL.
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        age INT NOT NULL DEFAULT 0
    );
    

Masalah dunia nyata umum dan solusinya

  1. Masalah: Hasil pencarian tak terduga karena NULL
  • Solusi: Gunakan IS NULL atau IS NOT NULL dengan tepat dalam kueri.
    SELECT * FROM users WHERE name = 'Taro' OR name IS NULL;
    
  1. Masalah: Perilaku tak terduga dalam fungsi agregat
  • Solusi: Tambahkan kondisi untuk mengecualikan atau menangani NULL secara eksplisit.
    SELECT COUNT(age) FROM users WHERE age IS NOT NULL;
    
  1. Masalah: NULL dan integritas data
  • Solusi: Terapkan batasan NOT NULL pada tingkat basis data dan validasi input pada tingkat aplikasi.

Ringkasan

NULL adalah konsep yang kuat, tetapi jika tidak ditangani dengan benar, dapat menimbulkan masalah. Dengan menetapkan kebijakan yang jelas selama desain basis data dan menjaga penanganan yang konsisten dalam aplikasi Anda, Anda dapat meminimalkan masalah terkait NULL.

9. Pertanyaan yang Sering Diajukan (FAQ)

Saat mempelajari NULL di MySQL, baik pemula maupun pengguna menengah sering memiliki pertanyaan serupa. Pada bagian ini, kami merangkum pertanyaan yang sering diajukan dan jawabannya mengenai NULL.

Q1: Apa perbedaan antara NULL, string kosong (“”), dan nol (0)?

  • A1:
  • NULL: Menunjukkan bahwa tidak ada nilai (tidak terdefinisi).
  • String kosong (“”): Nilai ada, tetapi isinya kosong.
  • Nol (0): Nilai ada, dan nilai numeriknya adalah 0.
  • Contoh: INSERT INTO users (name, age) VALUES ('Taro', NULL); -- age is NULL INSERT INTO users (name, age) VALUES ('Hanako', ''); -- age is an empty string INSERT INTO users (name, age) VALUES ('Jiro', 0); -- age is zero

Q2: Mengapa NULL = NULL tidak mengembalikan TRUE?

  • A2:
  • Menurut spesifikasi SQL, NULL mewakili “nilai yang tidak diketahui.” Membandingkan nilai yang tidak diketahui menghasilkan hasil yang tidak terdefinisi (NULL), bukan TRUE atau FALSE.
  • Saat membandingkan NULL, Anda harus menggunakan IS NULL atau IS NOT NULL .
  • Contoh: SELECT NULL = NULL; -- Result: NULL SELECT NULL IS NULL; -- Result: TRUE

Q3: Apa yang harus saya perhatikan saat mencari data yang mencakup NULL?

  • A3:
  • Jika Anda menggunakan operator perbandingan (=, <, >, dll.) dengan NULL, Anda tidak akan mendapatkan hasil yang diharapkan. Gunakan IS NULL atau IS NOT NULL sebagai gantinya.
  • Contoh: SELECT * FROM users WHERE age = NULL; -- Incorrect SELECT * FROM users WHERE age IS NULL; -- Correct

Q4: Apakah ada pertimbangan terkait NULL dan indeks?

  • A4:
  • Anda dapat membuat indeks pada kolom yang berisi NULL, tetapi efisiensi indeks tergantung pada kondisi kueri.
  • Secara khusus, kondisi kompleks (misalnya yang melibatkan perhitungan) dapat mencegah penggunaan indeks.
  • Cara memeriksa penggunaan indeks: EXPLAIN SELECT * FROM users WHERE age IS NULL;

Q5: Apa perbedaan antara COALESCE dan IFNULL?

  • A5:
  • COALESCE : Menerima beberapa argumen dan mengembalikan nilai non-NULL pertama.
  • IFNULL : Menerima dua argumen dan mengembalikan yang kedua jika yang pertama NULL.
  • Contoh: SELECT COALESCE(NULL, NULL, 'Default Value', 'Other Value'); -- Result: 'Default Value' SELECT IFNULL(NULL, 'Default'); -- Result: 'Default'

Q6: Bagaimana saya dapat merancang basis data saya untuk menghindari NULL?

  • A6:
  • KONSTRUKSI NOT NULL : Tambahkan batasan pada kolom yang wajib diisi untuk mencegah NULL.
  • Nilai default : Gunakan nilai default alih-alih NULL bila sesuai.
  • Contoh: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );

Q7: Apakah fungsi agregat berperilaku berbeda dengan NULL?

  • A7:
  • Fungsi agregat (SUM, AVG, COUNT, dll.) mengabaikan nilai NULL. Namun, jika Anda ingin memeriksa berapa banyak nilai NULL yang ada, Anda perlu menambahkan kondisi eksplisit.
  • Contoh: SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;

Q8: Dapatkah NULL menyebabkan masalah dalam operasi JOIN?

  • A8:
  • Saat melakukan operasi JOIN pada kolom yang mengandung NULL, nilai NULL diperlakukan sebagai tidak cocok. Akibatnya, Anda mungkin tidak mendapatkan hasil yang diharapkan.
  • Solusi: Tulis kueri yang secara eksplisit memperhitungkan NULL atau gunakan fungsi COALESCE untuk mengganti NULL dengan nilai default.
    SELECT *
    FROM table1 t1
    LEFT JOIN table2 t2 ON COALESCE(t1.key, 0) = COALESCE(t2.key, 0);
    

Ringkasan

NULL adalah nilai yang memerlukan penanganan khusus dalam operasi basis data MySQL. Gunakan bagian FAQ ini sebagai referensi untuk memperdalam pemahaman Anda tentang NULL dan belajar cara menanganinya secara efektif.

10. Kesimpulan

Memahami cara menangani NULL di MySQL adalah keterampilan penting dalam desain dan operasi basis data. Dalam artikel ini, kami membahas segala hal mulai dari definisi dasar NULL hingga metode manipulasi, pencarian, pengurutan, pengindeksan, fungsi berguna, dan praktik terbaik.

Poin Penting

  1. Dasar-dasar NULL dan karakteristiknya
  • NULL mewakili “tidak ada nilai” atau “nilai tidak diketahui,” dan berbeda dari string kosong (“”) atau nol (0).
  • Gunakan IS NULL dan IS NOT NULL untuk perbandingan aman yang melibatkan NULL.
  1. Bekerja dengan dan mencari data NULL
  • Anda telah belajar cara menyisipkan, memperbarui, menghapus, dan mencari data yang mencakup NULL dengan benar.
  • Menggunakan sintaks dan fungsi seperti IS NULL dan COALESCE memungkinkan operasi yang fleksibel dan efisien.
  1. NULL dan kinerja
  • Kami membahas dampak indeks pada kolom yang berisi NULL dan strategi desain untuk mengoptimalkan kinerja.
  • Menetapkan nilai default bila sesuai dapat membantu meminimalkan penggunaan NULL yang berlebihan.
  1. Fungsi NULL yang praktis
  • Fungsi seperti COALESCE, IFNULL, dan NULLIF membantu menyelesaikan masalah umum terkait NULL.
  • Gunakan operator <=> untuk perbandingan aman guna mencegah perilaku yang tidak diinginkan.
  1. Praktik terbaik
  • Minimalkan penggunaan NULL yang tidak perlu dalam desain basis data dan terapkan validasi yang tepat di lapisan aplikasi untuk menjaga integritas data.
  • Menstandarisasi penanganan NULL dalam kueri SQL meningkatkan keterbacaan dan pemeliharaan.

Manfaat Memahami NULL

  • Operasi data yang efisien : Penanganan NULL yang tepat mencegah kesalahan yang tidak perlu dan memungkinkan penulisan kueri yang efisien.
  • Integritas data yang lebih baik : Menetapkan kebijakan yang jelas untuk penggunaan NULL selama desain basis data menghasilkan manajemen data yang lebih konsisten.
  • Keandalan aplikasi yang meningkat : Menangani NULL dengan tepat di lapisan aplikasi mencegah perilaku tak terduga dan bug.

Langkah Selanjutnya

Untuk memperdalam pemahaman Anda tentang NULL, pertimbangkan hal berikut:

  • Tinjau bagaimana NULL digunakan dalam proyek Anda saat ini dan identifikasi area yang dapat ditingkatkan.
  • Bereksperimen dengan fungsi dan operator seperti IS NULL, COALESCE, dan IFNULL menggunakan dataset nyata.
  • Selanjutnya, sesuaikan indeks dan strategi kinerja berdasarkan beban kerja Anda.

Dengan mempelajari artikel ini, Anda seharusnya kini memiliki pemahaman yang kuat tentang cara kerja NULL di MySQL dan cara menanganinya dalam praktik. Gunakan pengetahuan ini untuk meningkatkan operasi basis data Anda dan alur kerja pengembangan aplikasi.