Sottoquery

Migliorare le prestazioni delle query in SQL Server

Dean Smith

Founder, Atamai Analytics

Come sono fatte le sottoquery?

Sottoquery

Migliorare le prestazioni delle query in SQL Server

Come sono fatte le sottoquery?

Sottoquery con query esterna

Migliorare le prestazioni delle query in SQL Server

Sottoquery con FROM

Sottoquery con FROM

Migliorare le prestazioni delle query in SQL Server

Sottoquery con FROM

SELECT OrderID, 
       CustomerID, 
       NumDays
FROM 
    (SELECT *, 
     DATEDIFF(DAY,OrderDate,ShippedDate) AS NumDays 
     FROM Orders) AS o
WHERE NumDays >= 35;
OrderID CustomerID NumDays
10380 HUNGO 35
10427 PICCO 35
10545 LAZYK 35
10593 LEHMS 35
10660 HUNGC 37
10777 GOURL 37
10924 BERGS 35
Migliorare le prestazioni delle query in SQL Server

Sottoquery con WHERE

Sottoquery con WHERE

Migliorare le prestazioni delle query in SQL Server

Sottoquery con WHERE

SELECT CustomerID
       ,CompanyName 
FROM Customers
WHERE CustomerID 
         IN (SELECT CustomerID 
         FROM Orders 
         WHERE Freight > 800);
CustomerID CompanyName
QUEEN Queen Cozinha
QUICK QUICK-Stop
SAVEA Save-a-lot Markets
Migliorare le prestazioni delle query in SQL Server

Sottoquery con SELECT

Sottoquery con SELECT

Migliorare le prestazioni delle query in SQL Server

Sottoquery con SELECT

SELECT CustomerID, 
       CompanyName, 
        (SELECT AVG(Freight) 
        FROM Orders o 
        WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;
CustomerID CompanyName AvgFreight
ALFKI Alfreds Futterkiste 37.6
ANATR Ana Trujillo Emparedados y helados 24.4
ANTON Antonio Moreno Taquería 38.4
... ... ...
Migliorare le prestazioni delle query in SQL Server

Tipi di sottoquery

Sottoquery non correlata

SELECT CustomerID
       ,CompanyName 
FROM Customers
WHERE CustomerID IN

(SELECT CustomerID FROM Orders WHERE Freight > 800);
  • La sottoquery non fa riferimento alla query esterna
  • La sottoquery può essere eseguita indipendentemente dalla query esterna
  • Usata con WHERE e FROM

Sottoquery correlata

SELECT CustomerID, 
       CompanyName,

(SELECT AVG(Freight) FROM Orders o WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;
  • La sottoquery contiene un riferimento alla query esterna
  • La sottoquery non può essere eseguita indipendentemente dalla query esterna
  • Usata con WHERE e SELECT
Migliorare le prestazioni delle query in SQL Server

Prestazioni delle sottoquery

Correlata

  • La sottoquery viene eseguita per ogni riga della query esterna

Non correlata

  • La sottoquery viene eseguita una sola volta e restituisce i risultati alla query esterna
Migliorare le prestazioni delle query in SQL Server

Sottoquery vs INNER JOIN

Sottoquery correlata

SELECT CustomerID, 
       CompanyName, 
        (SELECT AVG(Freight) 
        FROM Orders o 
        WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;

INNER JOIN

SELECT c.CustomerID,
       c.CompanyName, 
       AVG(o.Freight)
FROM Customers c
INNER JOIN Orders o
    ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID,
         c.CompanyName;
Migliorare le prestazioni delle query in SQL Server

Ayo berlatih!

Migliorare le prestazioni delle query in SQL Server

Preparing Video For Download...