Persediaan Temu Duga SQL · Pelajaran

UNION berbanding UNION ALL

Perbezaan pembuangan pendua dan prestasi, serta sebab UNION ALL biasanya dimaksudkan

Pelajaran 1 daripada 413 langkah

UNION berbanding UNION ALL ialah pelajaran Persediaan Temu Duga SQL percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga SQL, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.

Mengapa penemuduga bertanya tentang UNION

Operasi set menyusun satu set hasil di atas set yang lain secara menegak. UNION dan UNION ALL ialah pengendali set pertama yang biasanya digunakan oleh penemuduga kerana perbezaan antara kedua-duanya dapat dijawab dalam satu baris dan mendedahkan sama ada anda memahami kos.

Soalan itu hampir selalu berbunyi: "Apakah perbezaan antara UNION dengan UNION ALL, dan yang manakah patut anda gunakan?" Jawapan yang kukuh menyebut pembuangan pendua, susunan dan prestasi sekaligus.

Perkara yang dilakukan UNION

UNION menggabungkan baris daripada dua kueri menjadi satu set hasil, kemudian membuang baris pendua. Dua baris dianggap pendua hanya jika setiap lajur sepadan.

Untuk membuang pendua, enjin perlu mengisih atau menggunakan fungsi cincangan pada semua baris yang digabungkan, dan itu memerlukan kerja sebenar. UNION mengembalikan set dalam erti matematik: tiada ulangan.

SELECT city FROM customers
UNION
SELECT city FROM suppliers;

Perkara yang dilakukan UNION ALL

UNION ALL menggabungkan kedua-dua set hasil secara berturutan dan mengekalkan setiap baris, termasuk pendua. Ia tidak membuang pendua, jadi ia tidak melakukan pengisihan atau pencincangan untuk tujuan itu.

Oleh sebab langkah membuang pendua dilangkau, UNION ALL hampir sentiasa lebih pantas dan merupakan pilihan yang betul apabila anda tahu baris tidak boleh bertindih atau apabila pendua memang dikehendaki.

SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;

Perbezaan prestasi

Inti pati temu duga: UNION ALL lebih murah kerana ia tidak pernah membuang pendua. UNION perlu membandingkan setiap baris gabungan dengan baris lain untuk membuang ulangan.

  • UNION = UNION ALL + langkah DISTINCT tersirat.
  • Bagi set hasil yang besar, DISTINCT itu boleh menguasai kos kueri.

Jika anda tidak memerlukan pembuangan pendua, memilih UNION membazirkan CPU dan memori.

Contoh lengkap dengan pendua

Andaikan kedua-dua kueri boleh mengembalikan baris 'Paris'. Dengan UNION, anda mendapat satu Paris. Dengan UNION ALL, anda mendapat Paris dua kali.

Penemuduga gemar meminta anda meramalkan bilangan baris. Sentiasa bayangkan penggabungan mentah dahulu, kemudian tanya: adakah pengendali itu membuang ulangan?

-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION     -> Paris, Lyon, Nice   (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)

Pendua ditentukan merentas semua lajur

Perangkap biasa: dua baris dianggap pendua hanya jika setiap lajur yang dipilih adalah sama. Tambahkan satu lajur yang berbeza dan baris itu tidak lagi menjadi pendua, maka UNION akan mengekalkan kedua-duanya.

Inilah sebabnya SELECT id, city sering mengembalikan lebih banyak baris daripada SELECT city dengan UNION, walaupun menggunakan jadual yang sama.

SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removed

Menyusun hasil gabungan

Anda tidak boleh meletakkan ORDER BY pada cabang individu; ia digunakan pada keseluruhan hasil gabungan dan mesti muncul sekali sahaja di penghujung.

Penemuduga mungkin bertanya di mana ORDER BY perlu diletakkan. Jawapannya: satu ORDER BY selepas kueri terakhir, dengan merujuk lajur keluaran mengikut nama atau kedudukan.

SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;

Nama Lajur Datang daripada Kueri Pertama

Apabila merujuk lajur dalam ORDER BY terakhir, gunakan nama (atau alias) daripada SELECT pertama. Nama lajur kueri kedua diabaikan untuk pelabelan keluaran.

Perkara ini penting apabila cabang menamakan lajurnya secara berbeza. Berikan alias kepada cabang pertama untuk mengawal tajuk keluaran.

SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;

Bila UNION Merupakan Pilihan yang Tepat

Gunakan UNION hanya apabila baris bertindih benar-benar berkemungkinan berlaku dan anda mahu setiap baris unik muncul sekali sahaja. Contohnya, menggabungkan dua senarai kenalan yang mungkin mengandungi orang yang sama dalam kedua-duanya, atau membina senarai nilai unik yang dinyahpendua daripada beberapa sumber.

Jika anda boleh menjamin bahawa sumber tidak bertindih, UNION ALL memberikan hasil yang sama dengan lebih pantas.

SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across both

Bila UNION ALL Merupakan Pilihan yang Tepat

Gunakan UNION ALL apabila pendua tidak boleh berlaku, apabila pendua mempunyai makna, atau apabila anda akan melakukan pengagregatan selepas itu. Corak klasik ialah menyusun jadual pembahagian bulanan yang tidak berkongsi baris.

Petua untuk temu duga: nyatakan bahawa UNION ALL ialah lalai dan anda hanya beralih kepada UNION apabila nyahpenduaan benar-benar diperlukan.

SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;

Menggabungkan Semuanya

Jawapan temu duga yang mantap kedengaran begini: "UNION mengalih keluar baris pendua, yang memerlukan pengisihan atau cincangan; UNION ALL mengekalkan semuanya dan lebih pantas. Kedua-duanya memerlukan bilangan lajur yang sepadan dan jenis yang serasi, dan sebarang ORDER BY hanya ditulis sekali pada penghujung. Saya menggunakan UNION ALL sebagai lalai kecuali nyahpenduaan diperlukan."

Ayat tunggal itu menunjukkan ketepatan dan kesedaran terhadap prestasi secara serentak.

Semakan Pantas

Uji pemahaman anda tentang perbezaan antara UNION dengan UNION ALL.

Ringkasan

Pengajaran utama:

  • UNION = gabungkan + alih keluar baris pendua (DISTINCT tersirat, kos tambahan).
  • UNION ALL = gabungkan dan kekalkan semuanya, lebih pantas, serta merupakan lalai yang munasabah.
  • Pendua memerlukan semua lajur sepadan.
  • Satu ORDER BY diletakkan pada penghujung sekali dan menggunakan nama lajur kueri pertama.

Gunakan UNION ALL sebagai lalai; beralih kepada UNION hanya apabila nyahpenduaan benar-benar diperlukan.

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “UNION berbanding UNION ALL” percuma?

Ya — teks penuh “UNION berbanding UNION ALL” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga SQL, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga SQL merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “UNION berbanding UNION ALL”?

Perbezaan pembuangan pendua dan prestasi, serta sebab UNION ALL biasanya dimaksudkan Anda berlatih Persediaan Temu Duga SQL menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga SQL?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga SQL di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “UNION berbanding UNION ALL” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga SQL ini?

Ya. Setiap pelajaran Persediaan Temu Duga SQL menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. UNION berbanding UNION ALL
  2. Keserasian Bilangan dan Jenis Lajur
  3. INTERSECT dan EXCEPT untuk Perbandingan
  4. Meniru Operasi Set Dengan Cantuman
← Kembali ke Persediaan Temu Duga SQL