Alt sorgular

SQL Server'da Sorgu Performansını İyileştirme

Dean Smith

Founder, Atamai Analytics

Alt sorgular nasıl görünür?

Alt sorgu

SQL Server'da Sorgu Performansını İyileştirme

Alt sorgular nasıl görünür?

Dış sorgu ile alt sorgu

SQL Server'da Sorgu Performansını İyileştirme

FROM ile alt sorgu

FROM ile alt sorgu

SQL Server'da Sorgu Performansını İyileştirme

FROM ile alt sorgu

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
SQL Server'da Sorgu Performansını İyileştirme

WHERE ile alt sorgu

WHERE ile alt sorgu

SQL Server'da Sorgu Performansını İyileştirme

WHERE ile alt sorgu

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
SQL Server'da Sorgu Performansını İyileştirme

SELECT ile alt sorgu

SELECT ile alt sorgu

SQL Server'da Sorgu Performansını İyileştirme

SELECT ile alt sorgu

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
... ... ...
SQL Server'da Sorgu Performansını İyileştirme

Alt sorgu türleri

İlişkisiz alt sorgu

SELECT CustomerID
       ,CompanyName 
FROM Customers
WHERE CustomerID IN

(SELECT CustomerID FROM Orders WHERE Freight > 800);
  • Alt sorgu dış sorguya referans içermez
  • Alt sorgu dış sorgudan bağımsız çalışabilir
  • WHERE ve FROM ile kullanılır

İlişkili alt sorgu

SELECT CustomerID, 
       CompanyName,

(SELECT AVG(Freight) FROM Orders o WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;
  • Alt sorgu dış sorguya referans içerir
  • Alt sorgu dış sorgudan bağımsız çalışamaz
  • WHERE ve SELECT ile kullanılır
SQL Server'da Sorgu Performansını İyileştirme

Alt sorgu performansı

İlişkili

  • Alt sorgu dış sorgudaki her satır için çalışır

İlişkisiz

  • Alt sorgu bir kez çalışır ve sonuçları dış sorguya döndürür
SQL Server'da Sorgu Performansını İyileştirme

Alt sorgu vs. INNER JOIN

İlişkili alt sorgu

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;
SQL Server'da Sorgu Performansını İyileştirme

Hadi pratik yapalım!

SQL Server'da Sorgu Performansını İyileştirme

Preparing Video For Download...