Rumah > pangkalan data > tutorial mysql > Bagaimanakah OUTER dan CROSS APPLY Boleh Meningkatkan Fleksibiliti dan Prestasi Pertanyaan SQL?

Bagaimanakah OUTER dan CROSS APPLY Boleh Meningkatkan Fleksibiliti dan Prestasi Pertanyaan SQL?

DDD
Lepaskan: 2025-01-10 07:13:41
asal
326 orang telah melayarinya

How Can OUTER and CROSS APPLY Enhance SQL Query Flexibility and Performance?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan