Seperti apa sub-kueri?

Meningkatkan Kinerja Kueri di SQL Server

Dean Smith

Founder, Atamai Analytics

Seperti apa sub-kueri?

Sub-kueri

Meningkatkan Kinerja Kueri di SQL Server

Seperti apa sub-kueri?

Sub-kueri dengan kueri luar

Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri dengan FROM

Sub-kueri dengan FROM

Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri dengan 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
Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri dengan WHERE

Sub-kueri dengan WHERE

Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri dengan 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
Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri dengan SELECT

Sub-kueri dengan SELECT

Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri dengan 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
... ... ...
Meningkatkan Kinerja Kueri di SQL Server

Jenis sub-kueri

Sub-kueri tidak berkorelasi

SELECT CustomerID
       ,CompanyName 
FROM Customers
WHERE CustomerID IN

(SELECT CustomerID FROM Orders WHERE Freight > 800);
  • Sub-kueri tidak mereferensikan kueri luar
  • Sub-kueri bisa berjalan mandiri
  • Dipakai dengan WHERE dan FROM

Sub-kueri berkorelasi

SELECT CustomerID, 
       CompanyName,

(SELECT AVG(Freight) FROM Orders o WHERE c.CustomerID = o.CustomerID) AS AvgFreight
FROM Customers c;
  • Sub-kueri mencantumkan referensi ke kueri luar
  • Sub-kueri tidak bisa berjalan mandiri
  • Dipakai dengan WHERE dan SELECT
Meningkatkan Kinerja Kueri di SQL Server

Kinerja sub-kueri

Berkorelasi

  • Sub-kueri dieksekusi untuk tiap baris pada kueri luar

Tidak berkorelasi

  • Sub-kueri dijalankan sekali lalu mengirim hasil ke kueri luar
Meningkatkan Kinerja Kueri di SQL Server

Sub-kueri vs. INNER JOIN

Sub-kueri berkorelasi

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;
Meningkatkan Kinerja Kueri di SQL Server

Ayo berlatih!

Meningkatkan Kinerja Kueri di SQL Server

Preparing Video For Download...