Rumah >pangkalan data >tutorial mysql >Bagaimanakah OUTER dan CROSS APPLY Boleh Meningkatkan Fleksibiliti dan Prestasi Pertanyaan SQL?
Aplikasi praktikal OUTER dan CROSS APPLY dalam SQL
OUTER dan CROSS APPLY ialah dua struktur yang sangat berharga dalam SQL yang boleh meningkatkan fleksibiliti dan prestasi pertanyaan. Walaupun contoh klasik mungkin kelihatan esoterik, struktur ini mempunyai aplikasi praktikal dalam pelbagai senario.
1. Dapatkan data yang berkaitan dengan cekap
Andaikan anda mempunyai dua jadual: jadual Kenalan mengandungi butiran kenalan dan jadual CommunicationEntries mengandungi saluran komunikasi (telefon, faks, e-mel). Untuk mendapatkan semula maklumat hubungan dan butiran komunikasi yang berkaitan, anda boleh menggunakan CROSS APPLY seperti berikut:
<code class="language-sql">SELECT c.name, ce.communicationType, ce.channel FROM Contacts c CROSS APPLY ( SELECT * FROM CommunicationEntries ce WHERE ce.contactId = c.contactId ) ce;</code>
2. Gunakan fungsi bernilai jadual
Fungsi bernilai jadual (TVF) menyediakan cara untuk menjana data jadual secara dinamik. CROSS APPLY membolehkan anda memanggil TVF untuk setiap baris dalam pertanyaan luar. Contohnya, untuk memaparkan rancangan pertanyaan bagi pertanyaan yang sedang berjalan:
<code class="language-sql">SELECT * FROM sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>
3. Gunakan semula alias lajur
Kadangkala anda perlu menggunakan semula alias lajur dalam pertanyaan yang kompleks. CROSS APPLY membolehkan anda menetapkan berbilang alias untuk lajur yang sama, menjadikan pertanyaan lebih mudah dibaca dan diurus. Contohnya:
<code class="language-sql">SELECT number, doubled_number, doubled_number_plus_one FROM master..spt_values CROSS APPLY (SELECT 2 * CAST(number AS BIGINT)) CA1(doubled_number) CROSS APPLY (SELECT doubled_number + 1) CA2(doubled_number_plus_one);</code>
4. Lepaskan data dengan cekap
Dalam struktur jadual yang dinormalkan, data disimpan dalam lajur. Melepas belitan meratakan data ini, mencipta baris untuk setiap atribut. OUTER APPLY boleh melakukan pelepasan dengan cekap, terutamanya apabila beberapa set lajur perlu ditanggalkan. Pertimbangkan senario berikut:
<code class="language-sql">SELECT Id, Foo, Bar, GrpName FROM T CROSS APPLY (VALUES('1', Foo1, Bar1), ('2', Foo2, Bar2), ('3', Foo3, Bar3)) V(GrpName, Foo, Bar);</code>
Atas ialah kandungan terperinci Bagaimanakah OUTER dan CROSS APPLY Boleh Meningkatkan Fleksibiliti dan Prestasi Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!