Sub-queries

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Dean Smith

Founder, Atamai Analytics

Sub-query มีหน้าตาอย่างไร?

Sub-query

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query มีหน้าตาอย่างไร?

Sub-query กับ outer query

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query กับ FROM

Sub-query กับ FROM

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query กับ 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
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query กับ WHERE

Sub-query กับ WHERE

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query กับ 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
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query กับ SELECT

Sub-query กับ SELECT

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query กับ 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
... ... ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ประเภทของ Sub-query

Uncorrelated sub-query

SELECT CustomerID
       ,CompanyName 
FROM Customers
WHERE CustomerID IN

(SELECT CustomerID FROM Orders WHERE Freight > 800);
  • Sub-query ไม่มี การอ้างอิงถึง outer query
  • Sub-query สามารถ รันได้อิสระโดยไม่ต้องพึ่ง outer query
  • ใช้กับ WHERE และ FROM

Correlated sub-query

SELECT CustomerID, 
       CompanyName,

(SELECT AVG(Freight) FROM Orders o WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;
  • Sub-query _มี_ การอ้างอิงถึง outer query
  • Sub-query ไม่สามารถ รันได้อิสระโดยไม่ต้องพึ่ง outer query
  • ใช้กับ WHERE และ SELECT
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ประสิทธิภาพของ Sub-query

Correlated

  • Sub-query ทำงานทุกครั้งสำหรับแต่ละแถวใน outer query

Uncorrelated

  • Sub-query ทำงานเพียงครั้งเดียวแล้วส่งผลลัพธ์กลับไปยัง outer query
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Sub-query เทียบกับ INNER JOIN

Correlated sub-query

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

มาฝึกกันเถอะ!

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Preparing Video For Download...