Jumlah dan Kompatibilitas Tipe Kolom
Aturan yang harus dipenuhi kumpulan hasil agar dapat digabungkan, serta error ketidakcocokan yang umum.
Jumlah dan Kompatibilitas Tipe Kolom adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 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.
Aturan Kompatibilitas yang Diuji Pewawancara
Setiap operasi himpunan (UNION, INTERSECT, EXCEPT) mengharuskan kedua kumpulan hasil bersifat kompatibel dengan UNION. Pewawancara menanyakan hal ini untuk melihat apakah Anda mengetahui cara-cara yang tidak kentara yang dapat membuat kueri-kueri tersebut gagal.
Dua aturan menentukan kompatibilitas: jumlah kolom yang sama dan tipe data yang kompatibel pada setiap posisi. Jika salah satunya tidak terpenuhi, Anda akan mendapatkan kesalahan atau hasil yang tidak terduga.
Aturan 1: Jumlah Kolom Harus Sama
Kedua kueri harus menghasilkan jumlah kolom yang sama. Jika kueri pertama menghasilkan tiga kolom dan kueri kedua menghasilkan dua kolom, basis data akan menolak pernyataan tersebut.
Ini adalah kesalahan operasi himpunan yang paling umum dalam wawancara, terutama setelah seseorang mengedit satu cabang dan melupakan cabang lainnya.
SELECT id, name, city FROM a
UNION
SELECT id, name FROM b;
-- ERROR: each UNION query must have the same number of columnsAturan 2: Tipe yang Kompatibel Berdasarkan Posisi
Kolom dipasangkan berdasarkan posisi, bukan nama. Kolom pertama dari kueri pertama dipasangkan dengan kolom pertama dari kueri kedua, dan seterusnya. Setiap pasangan harus memiliki tipe yang kompatibel.
Kompatibel biasanya berarti dapat dikonversi secara implisit: INT dan BIGINT tidak bermasalah; INT dan DATE umumnya tidak kompatibel.
SELECT id, signup_date FROM a
UNION
SELECT id, signup_date FROM b;
-- positions: (int,date) vs (int,date) -> OKYang Penting adalah Posisi, Bukan Nama
Perangkap yang halus: kolom dapat memiliki nama yang berbeda dan tetap dapat digabungkan, selama posisinya sejajar dan tipenya kompatibel. Sebaliknya, nama yang sama dalam urutan yang salah akan membuat data tidak sejajar.
Selalu pahami operasi himpunan berdasarkan posisi kolom. Pewawancara sengaja menukar kolom untuk menguji hal ini.
SELECT name, id FROM a
UNION ALL
SELECT id, name FROM b;
-- name<->id swapped: types may clash or data lands in wrong columnNama Kolom Keluaran
Kumpulan hasil mengambil nama kolomnya dari kueri pertama. Label dari kueri kedua dibuang. Untuk mengatur nama kolom keluaran, beri alias pada kolom di cabang pertama.
Inilah alasan ORDER BY pada tahap berikutnya harus merujuk nama dari kueri pertama atau menggunakan nomor posisi.
SELECT id AS user_id, city AS location FROM a
UNION ALL
SELECT id, town FROM b;
-- output headers: user_id, locationKoersi Tipe Implisit
Ketika dua kolom yang dipasangkan berdasarkan posisi memiliki tipe berbeda tetapi kompatibel, mesin memilih tipe hasil yang cukup luas untuk menampung keduanya. Gabungan INT dan DECIMAL biasanya menghasilkan DECIMAL.
Menyebutkan koersi ini dalam wawancara menunjukkan pemahaman mendalam: Anda tahu kolom tersebut tidak menghasilkan kesalahan, melainkan dipromosikan ke tipe yang lebih luas.
SELECT amount FROM int_table -- INT
UNION ALL
SELECT amount FROM dec_table; -- DECIMAL
-- result column is DECIMALMengisi Kolom yang Hilang dengan NULL
Ketika dua kueri secara alami memiliki struktur berbeda, selaraskan keduanya dengan menambahkan kolom pengganti. Teknik umum adalah memilih NULL (sering kali menerapkan CAST ke suatu tipe) untuk mengisi posisi yang dimiliki cabang lain.
Menerapkan CAST pada NULL mencegah mesin menebak tipe dan menjaga kompatibilitas kolom.
SELECT id, phone, CAST(NULL AS VARCHAR) AS email FROM a
UNION ALL
SELECT id, CAST(NULL AS VARCHAR), email FROM b;Contoh Kegagalan akibat Ketidakcocokan Tipe
Di sini, kolom kedua berupa tanggal di satu cabang dan teks di cabang lain. Mesin yang ketat akan menolak ini; mesin yang longgar mungkin melakukan koersi secara tak terduga. Perbaikan yang aman adalah menggunakan CAST eksplisit agar kedua sisi memiliki tipe yang sama.
Dalam wawancara, usulkan penggunaan CAST daripada mengandalkan konversi implisit.
SELECT id, CAST(event_date AS VARCHAR) FROM a
UNION ALL
SELECT id, label FROM b;
-- both second columns now VARCHAR -> compatibleAturan Ini Berlaku untuk Semua Operator Himpunan
Aturan jumlah kolom dan kompatibilitas tipe identik untuk UNION, UNION ALL, INTERSECT, dan EXCEPT. Semuanya menumpuk kumpulan hasil secara vertikal dan mengharuskan masukan yang kompatibel dengan UNION.
Jadi, satu daftar periksa mental mencakup setiap operasi himpunan: hitung kolom, periksa tipe berdasarkan posisi, dan atur nama dari kueri pertama.
SELECT id, city FROM a
INTERSECT
SELECT id, city FROM b;
-- same compatibility rules as UNIONDaftar Periksa Sebelum Eksekusi
Sebelum menggabungkan kumpulan hasil, pastikan:
- Jumlah kolom sama di setiap cabang.
- Setiap pasangan berdasarkan posisi memiliki tipe yang kompatibel (terapkan CAST jika ragu).
- Kolom berada dalam urutan logis yang sama.
- Alias ditetapkan pada kueri pertama untuk menghasilkan nama keluaran yang rapi.
Menyampaikan daftar periksa ini dengan lantang dalam wawancara mencegah kesalahan ketidakselarasan yang tersembunyi.
Memadukan Semuanya
Kegagalan kompatibilitas sebagian besar dapat dihindari. Kesalahan terlihat jelas ketika jumlah kolom berbeda dan tidak kentara ketika kolom tertukar atau mengalami koersi yang tidak terduga. Membaca kueri berdasarkan posisi kolom dan menerapkan CAST secara sengaja menjaga operasi himpunan tetap benar.
Jawaban yang meyakinkan menyebutkan kedua aturan, menjelaskan pencocokan berdasarkan posisi, dan menyatakan bahwa nama keluaran berasal dari kueri pertama.
Pemeriksaan Singkat
Bagaimana SQL menentukan kolom dari dua cabang UNION mana yang saling berpadanan?
Ringkasan
Pokok-pokok penting:
- Semua operator himpunan memerlukan jumlah kolom yang sama di setiap cabang.
- Kolom dicocokkan berdasarkan posisi, dan setiap pasangan harus memiliki tipe yang kompatibel.
- Tipe yang kompatibel dapat dikoersi menjadi tipe umum yang lebih luas.
- Gunakan
CAST(NULL AS type)untuk mengisi struktur yang berbeda. - Nama keluaran berasal dari kueri pertama.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jumlah dan Kompatibilitas Tipe Kolom” gratis?
Ya — teks lengkap “Jumlah dan Kompatibilitas Tipe Kolom” 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 “Jumlah dan Kompatibilitas Tipe Kolom”?
Aturan yang harus dipenuhi kumpulan hasil agar dapat digabungkan, serta error ketidakcocokan yang umum. 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 2 dari 4.
Berapa lama pelajaran “Jumlah dan Kompatibilitas Tipe Kolom” 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
- UNION vs UNION ALL
- Jumlah dan Kompatibilitas Tipe Kolom
- INTERSECT dan EXCEPT untuk Perbandingan
- Meniru Operasi Himpunan dengan JOIN