0Pricing
Coding Interview Prep · Pelajaran

Pengurutan Multi-Kolom dan Penempatan NULL

Pencampuran ASC/DESC dan perbedaan NULLS FIRST/LAST di berbagai basis data.

Pengurutan Multi-Kolom dan Penempatan NULL adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Mengapa Pengurutan Muncul dalam Wawancara

Pewawancara sering membahas ORDER BY sejak awal karena hal ini menunjukkan apakah Anda memahami bahwa hasil SQL secara bawaan tidak berurutan. Tanpa pengurutan eksplisit, database bebas mengembalikan baris dalam urutan apa pun.

Pembuka yang umum adalah: "Bagaimana Anda menjamin baris dikembalikan dalam urutan tertentu?" Satu-satunya jawaban yang benar adalah klausa ORDER BY eksplisit. Mengandalkan urutan penyisipan, urutan kunci utama, atau urutan indeks adalah kesalahan klasik pemula.

Dalam pelajaran ini, Anda akan menguasai pengurutan berdasarkan beberapa kolom dan pertanyaan rumit tentang posisi nilai NULL.

Dasar-Dasar ASC dan DESC

ORDER BY mengurutkan secara menaik (ASC) secara bawaan. Anda hanya memerlukan DESC untuk membalik arahnya. Arah berlaku untuk setiap kolom, bukan untuk seluruh klausa.

Tip wawancara: nyatakan bahwa ASC adalah bawaan implisit sehingga Anda tidak perlu menuliskannya. Banyak kandidat keliru mengira satu DESC akan membalik semua kolom.

SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;

Mengurutkan Berdasarkan Beberapa Kolom

Daftarkan beberapa kolom dengan memisahkannya menggunakan koma. SQL mengurutkan berdasarkan kolom pertama, lalu menyelesaikan nilai yang sama dengan kolom kedua, dan seterusnya. Anggaplah ini sebagai rangkaian pemecah seri.

Contoh ini mengurutkan berdasarkan departemen secara alfabetis, lalu dalam setiap departemen berdasarkan gaji dari yang tertinggi.

  • Pengurutan utama: department menaik
  • Pemecah seri: salary menurun
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;

Mencampur ASC dan DESC

Jebakan wawancara yang sering muncul: setiap kolom memiliki arah masing-masing. Menulis ORDER BY a, b DESC mengurutkan a secara menaik dan b secara menurun, bukan keduanya secara menurun.

Jika Anda ingin keduanya menurun, Anda harus menulis ORDER BY a DESC, b DESC. Nyatakan dengan jelas saat pertanyaan mencampurkan arah pengurutan.

SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;

Di Mana NULL Ditempatkan?

Inilah inti pelajaran. NULL berarti tidak diketahui, sehingga standar tidak menentukan posisinya, dan database berbeda-beda dalam bawaan pengurutannya:

  • PostgreSQL & Oracle: NULL diurutkan terakhir dalam ASC, dan pertama dalam DESC.
  • MySQL & SQL Server: NULL diurutkan pertama dalam ASC, dan terakhir dalam DESC (dianggap sebagai nilai terkecil).

Pewawancara senang menanyakan "Di mana NULL muncul dalam pengurutan ini?" Jawaban yang jujur: hal itu bergantung pada mesin database, kecuali Anda mengaturnya secara eksplisit.

Mengatur Posisi NULL secara Eksplisit

Untuk membuat penempatan bersifat deterministik, apa pun bawaan mesin database, gunakan NULLS FIRST atau NULLS LAST. PostgreSQL, Oracle, dan SQLite mendukungnya secara langsung.

Kueri di bawah ini memaksa tanggal perekrutan yang tidak diketahui ke bagian bawah, meskipun kolomnya diurutkan menaik.

SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;

Meniru NULLS LAST di MySQL

MySQL tidak mendukung kata kunci NULLS LAST. Solusi lintas database yang dapat digunakan adalah kunci pengurutan pertama yang menandai apakah nilainya NULL.

Ekspresi hire_date IS NULL menghasilkan 0 untuk tanggal yang valid dan 1 untuk NULL. Mengurutkannya secara menaik mendorong NULL ke bagian akhir, kemudian kunci kedua mengurutkan tanggal yang sebenarnya.

SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;

Meniru NULLS FIRST di SQL Server

SQL Server juga tidak memiliki NULLS FIRST/LAST. Gunakan ekspresi CASE sebagai kunci pengurutan pertama. Di sini NULL mendapatkan peringkat 0 sehingga muncul lebih dahulu.

Pola ini layak dihafalkan: kolom penanda hasil perhitungan yang ditempatkan sebelum kolom pengurutan sebenarnya memberi Anda kendali penuh atas posisi NULL dalam dialek apa pun.

SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
         hire_date ASC;

Contoh Lengkap: Papan Peringkat

Misalkan Anda membuat papan peringkat: skor tertinggi berada di urutan pertama, dan untuk skor yang sama, pemain yang mendaftar lebih awal mendapat peringkat lebih tinggi. Pemain yang tidak pernah memperoleh skor (skor NULL) ditempatkan di bagian bawah.

Pengurutan ini memerlukan tiga kunci: penanda NULL, skor menurun, dan tanggal pendaftaran menaik sebagai pemecah seri.

SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
         score DESC,
         signup_date ASC;

Catatan tentang Stabilitas Pengurutan

Pertanyaan favorit lainnya: "Jika dua baris sama pada setiap kunci ORDER BY, dalam urutan apa keduanya dikembalikan?"

Jawabannya: tidak terdefinisi. Pengurutan SQL tidak dijamin stabil, sehingga baris yang sama dapat muncul dalam urutan relatif apa pun, dan urutan tersebut dapat berubah antarpengoperasian atau setelah indeks diubah.

Perbaikannya adalah menambahkan pemecah seri yang sepenuhnya unik, biasanya kunci utama, agar hasilnya dapat direproduksi.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;

Catatan Kinerja tentang Pengurutan

Pengurutan dapat mahal. Jika ORDER BY sesuai dengan indeks yang sudah ada, dalam urutan kolom dan arah yang sama, mesin dapat membaca baris yang sudah terurut dan melewati langkah pengurutan terpisah.

Arah yang tidak cocok (misalnya indeks seluruhnya menaik, tetapi Anda mengurutkan satu kolom secara menurun) biasanya menggagalkan hal ini dan memaksa pengurutan di memori atau pada disk. Menyebutkan hubungan antara urutan indeks dan biaya pengurutan menunjukkan kematangan kepada pewawancara.

Pemeriksaan Singkat

Uji pemahaman Anda tentang aturan arah untuk beberapa kolom.

Ringkasan

Hal-hal penting tentang pengurutan berdasarkan beberapa kolom dan penempatan NULL:

  • Hasil kueri tidak berurutan kecuali Anda menambahkan ORDER BY.
  • Arah berlaku untuk setiap kolom; ASC adalah bawaan.
  • Posisi NULL berbeda menurut mesin database: terakhir dalam ASC untuk Postgres/Oracle, pertama dalam ASC untuk MySQL/SQL Server.
  • Gunakan NULLS FIRST/LAST jika didukung, atau penanda IS NULL / CASE di tempat lain.
  • Tambahkan pemecah seri unik (seperti kunci utama) agar urutan dapat direproduksi.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pengurutan Multi-Kolom dan Penempatan NULL” gratis?

Ya — teks lengkap “Pengurutan Multi-Kolom dan Penempatan NULL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pengurutan Multi-Kolom dan Penempatan NULL”?

Pencampuran ASC/DESC dan perbedaan NULLS FIRST/LAST di berbagai basis data. Kamu berlatih Coding Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Coding Interview Prep?

Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Pengurutan Multi-Kolom dan Penempatan NULL” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Coding Interview Prep ini?

Ya. Setiap pelajaran Coding Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Pengurutan Multi-Kolom dan Penempatan NULL
  2. LIMIT, OFFSET, dan FETCH FIRST
  3. Mengembalikan Baris Top-N secara Andal
  4. Mengurutkan Berdasarkan Ekspresi dan Alias
← Kembali ke Coding Interview Prep