SQL Join Order: Adakah Ia Memberi Impak kepada Keputusan?
Artikel ini meneroka sama ada mengubah susunan cantuman dalam pertanyaan SQL mempengaruhi hasil, terutamanya apabila menggabungkan cantuman dalam dan luar. Kami akan mengabaikan implikasi prestasi untuk analisis ini.
Gabungan Dalam:
Susunan jadual dalam cantuman dalam adalah tidak penting. Hasilnya kekal sama, dengan syarat klausa SELECT
dilaraskan untuk menyenaraikan lajur secara eksplisit (cth., SELECT a.*, b.*, c.*
bukannya SELECT *
).
Gabungan Luar (KIRI, KANAN, PENUH):
Situasi berbeza dengan ketara untuk sambungan luar:
a LEFT JOIN b
adalah tidak sama dengan b LEFT JOIN a
.<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id</code>
<code class="language-sql">a LEFT JOIN c ON c.ac_id = a.ac_id LEFT JOIN b ON b.ab_id = a.ab_id</code>
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id AND c.bc_id = b.bc_id</code>
Struktur Syarat Sertai:
Struktur syarat cantuman adalah penting. Contohnya:
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.bc_id = b.bc_id</code>
hanya bersamaan dengan:
<code class="language-sql">a LEFT JOIN (b LEFT JOIN c ON c.bc_id = b.bc_id) ON b.ab_id = a.ab_id</code>
dengan syarat syarat gabungan hanya menggunakan semakan kesamaan tanpa perbandingan nilai NULL. Kemasukan NULL perbandingan atau fungsi seperti COALESCE()
boleh memecahkan kesetaraan antara pertanyaan tersusun berbeza.
Ringkasnya, walaupun susunan gabungan dalaman tidak penting, pesanan gabungan luar memberi kesan ketara kepada keputusan. Pertimbangan berhati-hati terhadap syarat cantuman, terutamanya berkenaan nilai NULL, adalah penting apabila bekerja dengan cantuman luar.
Atas ialah kandungan terperinci Adakah Perintah Sertai Mempengaruhi Keputusan Pertanyaan SQL, Terutamanya dengan Gabungan Dalam dan Luar Bercampur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!