Perbezaan antara UNION dan UNION ALL dalam SQL
Kedua-dua pengendali UNION
dan UNION ALL
dalam SQL digunakan untuk menggabungkan hasil berbilang pertanyaan. Walau bagaimanapun, perbezaan utama antara keduanya ialah cara mereka mengendalikan baris pendua.
UNION: hapuskan baris pendua
UNION
digunakan untuk menggabungkan berbilang hasil pertanyaan dan menghapuskan sebarang baris pendua. Ia membandingkan baris berdasarkan nilai lajur dan hanya mengembalikan baris yang berbeza. Ini bermakna jika baris mempunyai nilai yang sama dalam semua lajur, baris itu hanya akan muncul sekali dalam hasil gabungan.
UNION ALL: Simpan semua baris
Sebaliknya, UNION ALL
tidak mengalih keluar baris pendua. Ia hanya menggabungkan hasil pertanyaan, termasuk sebarang pendua. Ini berguna apabila anda ingin mengekalkan semua baris daripada pelbagai pertanyaan tanpa mengira sama ada nilai lajurnya sepadan.
Impak prestasi
Menggunakan UNION
bukannya UNION ALL
menimbulkan overhed prestasi. Ini kerana pangkalan data mesti melakukan kerja tambahan untuk mengenal pasti dan menghapuskan baris pendua. Oleh itu, UNION ALL
biasanya lebih pantas daripada UNION
, tetapi ia mungkin tidak selalu sesuai apabila pendua perlu dialih keluar.
Contoh: Kenal pasti baris pendua
Untuk menentukan sama ada baris adalah pendua, bukan sahaja baris itu daripada jenis yang sama, tetapi juga mesti serasi. Sistem SQL yang berbeza mungkin mengendalikan keserasian ini secara berbeza. Sebagai contoh, sesetengah sistem mungkin memotong lajur teks panjang untuk perbandingan, manakala sistem lain mungkin menolak perbandingan antara lajur binari.
Demonstrasi UNION:
Contoh berikut menggabungkan dua pertanyaan, setiap satu mengembalikan nilai 'foo' yang sama untuk lajur 'bar':
<code class="language-sql">SELECT 'foo' AS bar UNION SELECT 'foo' AS bar</code>
Keputusan:
<code>+-----+ | bar | +-----+ | foo | +-----+ 1 row in set (0.00 sec)</code>
Seperti yang dijangkakan, UNION
mengalih keluar baris pendua, menghasilkan hanya satu baris yang mengandungi 'foo'.
UNION ALL Demo:
Sebaliknya, UNION ALL
tidak mengalih keluar pendua:
<code class="language-sql">SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar</code>
Keputusan:
<code>+-----+ | bar | +-----+ | foo | | foo | +-----+ 2 rows in set (0.00 sec)</code>
Terdapat dua baris dalam hasil gabungan, termasuk pendua.
Atas ialah kandungan terperinci Apakah Perbezaan Antara UNION SQL dan UNION ALL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!