Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przykład z życia, kiedy używać OUTER / CROSS APPLY w SQL

Niektóre zastosowania dla APPLY są...

1) N najczęstszych zapytań na grupę (może być bardziej wydajny w przypadku niektórych kardynałów)

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) Wywołanie funkcji o wartości tabeli dla każdego wiersza w zewnętrznym zapytaniu

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

3) Ponowne użycie aliasu kolumny

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) Cofanie więcej niż jednej grupy kolumn

Zakłada naruszenie struktury tabeli 1NF..

CREATE TABLE T
  (
     Id   INT PRIMARY KEY,

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

Przykład przy użyciu 2008+ VALUES składnia.

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

W 2005 UNION ALL może być używany zamiast tego.

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. Uzyskaj rozmiar wszystkich tabel w bazie danych

  2. Wewnętrzne elementy SQL Server:operatorzy problematyczni Pt. III – Rodzaje

  3. Zapytanie blokujące serwer SQL

  4. Różnica między sys.objects, sys.system_objects i sys.all_objects w programie SQL Server

  5. Funkcja DECODE() w SQL Server