Rumah >pangkalan data >SQL >Bagaimanakah saya menggunakan Union, Intersect, dan kecuali pengendali dalam SQL?
Dalam SQL, UNION
, INTERSECT
, dan EXCEPT
pengendali digunakan untuk menggabungkan hasil dua atau lebih pernyataan pilih. Setiap pengendali mempunyai fungsi yang unik dan menggunakan kes:
Kesatuan : Pengendali ini digunakan untuk menggabungkan set keputusan dua atau lebih pernyataan pilih ke dalam satu set keputusan. Ia menghilangkan baris pendua dari hasil akhir melainkan jika UNION ALL
digunakan, yang termasuk pendua. Struktur pernyataan pilih mestilah sama, bermakna mereka perlu mempunyai bilangan lajur yang sama, dan lajur yang sepadan mesti mempunyai jenis data yang serasi.
Sintaks :
<code class="sql">SELECT column1, column2 FROM table1 UNION SELECT column1, column2 FROM table2;</code>
Intersect : Operator ini hanya mengembalikan baris yang biasa dengan set keputusan kedua -dua pernyataan pilih. Seperti UNION
, pernyataan pilih mesti mempunyai struktur yang sama.
Sintaks :
<code class="sql">SELECT column1, column2 FROM table1 INTERSECT SELECT column1, column2 FROM table2;</code>
Kecuali : Juga dikenali sebagai MINUS
dalam beberapa sistem pangkalan data, pengendali ini mengembalikan semua baris dari pernyataan pilih pertama yang tidak hadir dalam pernyataan Pilih kedua. Sekali lagi, pernyataan pilih mestilah bersesuaian secara struktur.
Sintaks :
<code class="sql">SELECT column1, column2 FROM table1 EXCEPT SELECT column1, column2 FROM table2;</code>
Perbezaan utama antara pengendali ini adalah berdasarkan cara mereka mengendalikan data dari pelbagai penyataan pilih:
UNION ALL
digunakan). Ia digunakan apabila anda ingin mengagregat data dari sumber yang berbeza di mana penyertaan pendua harus dihapuskan. Ringkasnya, UNION
menggabungkan dan berpotensi de-duplikasi data, INTERSECT
mencari data biasa, dan EXCEPT
mengasingkan data unik dari satu set yang tidak dijumpai di pihak yang lain.
Contoh Kesatuan : Katakan anda menguruskan pangkalan data dengan dua jadual, employees
dan contractors
, kedua -duanya mengandungi nama dan jabatan. Jika anda mahukan senarai lengkap semua kakitangan di syarikat tanpa pendua, anda boleh menggunakan UNION
:
<code class="sql">SELECT name, department FROM employees UNION SELECT name, department FROM contractors;</code>
Contoh Intersect : Bayangkan anda menjejaki kehadiran di dua acara yang berbeza, disimpan dalam event1_attendees
dan event2_attendees
. Untuk mengetahui siapa yang menghadiri kedua -dua acara, anda boleh menggunakan INTERSECT
:
<code class="sql">SELECT attendee_id FROM event1_attendees INTERSECT SELECT attendee_id FROM event2_attendees;</code>
Kecuali Contoh : Jika anda ingin mencari pelanggan yang mempunyai akaun tetapi tidak pernah membuat pesanan, dan ini disimpan dalam jadual customers
dan orders
masing -masing, anda boleh menggunakan EXCEPT
:
<code class="sql">SELECT customer_id FROM customers EXCEPT SELECT customer_id FROM orders;</code>
Mengoptimumkan pertanyaan yang menggunakan UNION
, INTERSECT
, atau EXCEPT
dapat meningkatkan prestasi dengan ketara. Berikut adalah beberapa petua:
UNION ALL
bukannya UNION
. UNION ALL
lebih cepat kerana ia tidak perlu menyemak dan mengeluarkan pendua.WHERE
klausa dalam pernyataan SELECT
individu sebelum menggunakan UNION
, INTERSECT
, atau EXCEPT
. Ini mengurangkan jumlah data yang diproses oleh pengendali ini.SELECT
diindeks dengan betul. Indeks boleh mempercepatkan pengambilan data dengan ketara, terutamanya dalam jadual besar.UNION
dan bukannya UNION ALL
apabila anda tidak perlu mengeluarkan pendua, ia tidak boleh melambatkan pertanyaan anda. Sentiasa menilai sama ada DISTINCT
diperlukan.SELECT
komponen, mengoptimumkan setiap bahagian pertanyaan secara individu. Dengan mengikuti strategi pengoptimuman ini, anda dapat meningkatkan prestasi pertanyaan SQL anda yang menggunakan UNION
, INTERSECT
, atau EXCEPT
pengendali.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan Union, Intersect, dan kecuali pengendali dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!