Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Contoh kehidupan nyata, kapan harus menggunakan OUTER / CROSS APPLY dalam SQL

Beberapa kegunaan untuk APPLY adalah...

1) N teratas per kueri grup (bisa lebih efisien untuk beberapa kardinalitas)

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 

2) Memanggil Fungsi Bernilai Tabel untuk setiap baris dalam kueri luar

SELECT *
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle)

3) Menggunakan kembali alias kolom

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)  

4) Membatalkan putaran lebih dari satu grup kolom

Menganggap 1NF melanggar struktur tabel....

CREATE TABLE T
  (
     Id   INT PRIMARY KEY,

     Foo1 INT, Foo2 INT, Foo3 INT,
     Bar1 INT, Bar2 INT, Bar3 INT
  ); 

Contoh menggunakan VALUES 2008+ sintaks.

SELECT Id,
       Foo,
       Bar
FROM   T
       CROSS APPLY (VALUES(Foo1, Bar1),
                          (Foo2, Bar2),
                          (Foo3, Bar3)) V(Foo, Bar); 

Pada tahun 2005 UNION ALL dapat digunakan sebagai gantinya.

SELECT Id,
       Foo,
       Bar
FROM   T
       CROSS APPLY (SELECT Foo1, Bar1 
                    UNION ALL
                    SELECT Foo2, Bar2 
                    UNION ALL
                    SELECT Foo3, Bar3) V(Foo, Bar);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemilihan Prosesor Praktis untuk Beban Kerja OLTP SQL Server 2014/2016

  2. Kolom Pivot Dinamis di SQL Server

  3. Dapatkan catatan bulan lalu di SQL server

  4. Cara Memilih Sejumlah Karakter dari Kiri atau Kanan String di SQL Server

  5. Fungsi agregat dalam kueri pembaruan SQL?