Subquery's

De queryprestaties verbeteren in SQL Server

Dean Smith

Founder, Atamai Analytics

Hoe zien subquery's eruit?

Subquery

De queryprestaties verbeteren in SQL Server

Hoe zien subquery's eruit?

Subquery met outer query

De queryprestaties verbeteren in SQL Server

Subquery met FROM

Subquery met FROM

De queryprestaties verbeteren in SQL Server

Subquery met 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
De queryprestaties verbeteren in SQL Server

Subquery met WHERE

Subquery met WHERE

De queryprestaties verbeteren in SQL Server

Subquery met 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
De queryprestaties verbeteren in SQL Server

Subquery met SELECT

Subquery met SELECT

De queryprestaties verbeteren in SQL Server

Subquery met 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
... ... ...
De queryprestaties verbeteren in SQL Server

Typen subquery's

Ongecorreleerde subquery

SELECT CustomerID
       ,CompanyName 
FROM Customers
WHERE CustomerID IN

(SELECT CustomerID FROM Orders WHERE Freight > 800);
  • Subquery bevat géén verwijzing naar de buitenste query
  • Subquery kan onafhankelijk draaien
  • Gebruikt met WHERE en FROM

Gecorreleerde subquery

SELECT CustomerID, 
       CompanyName,

(SELECT AVG(Freight) FROM Orders o WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;
  • Subquery bevat een verwijzing naar de buitenste query
  • Subquery kan niet zelfstandig draaien
  • Gebruikt met WHERE en SELECT
De queryprestaties verbeteren in SQL Server

Prestaties van subquery's

Gecorreleerd

  • Subquery draait voor elke rij van de buitenste query

Ongecorreleerd

  • Subquery draait één keer en levert het resultaat aan de buitenste query
De queryprestaties verbeteren in SQL Server

Subquery vs. INNER JOIN

Gecorreleerde subquery

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;
De queryprestaties verbeteren in SQL Server

Laten we oefenen!

De queryprestaties verbeteren in SQL Server

Preparing Video For Download...