Rumah >pangkalan data >tutorial mysql >Bagaimana OUTER/CROSS APPLY Boleh Menyelesaikan Cabaran Manipulasi Data SQL Dunia Sebenar?

Bagaimana OUTER/CROSS APPLY Boleh Menyelesaikan Cabaran Manipulasi Data SQL Dunia Sebenar?

Barbara Streisand
Barbara Streisandasal
2025-01-10 06:06:41594semak imbas

How Can OUTER/CROSS APPLY Solve Real-World SQL Data Manipulation Challenges?

Aplikasi Praktikal OUTER/CROSS APPLY dalam SQL

OUTER dan CROSS APPLY ialah pengendali SQL berkuasa yang menawarkan keupayaan manipulasi data yang dipertingkatkan. Artikel ini menjelaskan kegunaan praktikal mereka melalui contoh dunia sebenar.

Senario 1: Rekod N Teratas bagi setiap Kategori

OUTER APPLY terbukti tidak ternilai untuk mendapatkan semula N baris teratas dalam setiap kumpulan. Pertimbangkan untuk mencari dua parameter teratas untuk setiap prosedur yang disimpan:

<code class="language-sql">SELECT pr.name, pa.name
FROM sys.procedures pr
OUTER APPLY (
    SELECT TOP 2 *
    FROM sys.parameters pa
    WHERE pa.object_id = pr.object_id
    ORDER BY pr.name
) pa
ORDER BY pr.name, pa.name;</code>

Senario 2: Menggunakan Fungsi Bernilai Jadual

CROSS APPLY memudahkan pelaksanaan fungsi bernilai jadual untuk setiap baris dalam pertanyaan utama. Contohnya:

<code class="language-sql">SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle);</code>

Ini digunakan dengan cekap sys.dm_exec_query_plan pada setiap baris daripada sys.dm_exec_query_stats.

Senario 3: Menggunakan Semula Lajur Dikira

APPLY membenarkan penggunaan semula alias lajur yang dikira, menjana berbilang lajur terbitan daripada satu ungkapan:

<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>

Senario 4: Menyahpaut Berbilang Kumpulan Lajur

Untuk set data yang melanggar 1NF, APPLY menyahpangsi berbilang kumpulan lajur secara serentak dengan cekap:

<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>

Menguasai OUTER/CROSS APPLY dengan ketara meningkatkan kemahiran manipulasi data SQL, membolehkan penyelesaian yang cekap untuk cabaran data yang kompleks.

Atas ialah kandungan terperinci Bagaimana OUTER/CROSS APPLY Boleh Menyelesaikan Cabaran Manipulasi Data SQL Dunia Sebenar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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