Thứ tự xử lý truy vấn

Giới thiệu về Oracle SQL

Hadrien Lacroix

Content Developer

Vì sao thứ tự xử lý quan trọng?

  • Tối ưu truy vấn
    • Không có kết quả không mong muốn
    • Chạy nhanh hơn
Giới thiệu về Oracle SQL

Ví dụ

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Giới thiệu về Oracle SQL

Ví dụ

    SELECT BillingCountry, AVG(Total) > 100) AS Average
->  FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Giới thiệu về Oracle SQL

Ví dụ

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
->  WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Giới thiệu về Oracle SQL

Ví dụ

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
->  GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Giới thiệu về Oracle SQL

Ví dụ

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
->  HAVING AVG(Total) > 100
    ORDER BY Average DESC
Giới thiệu về Oracle SQL

Ví dụ

->  SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
    ORDER BY Average DESC
Giới thiệu về Oracle SQL

Ví dụ

    SELECT BillingCountry, AVG(Total) > 100) AS Average
    FROM Invoice
    WHERE BillingCity <> 'Paris' 
    GROUP BY BillingCountry
    HAVING AVG(Total) > 100
->  ORDER BY Average DESC
Giới thiệu về Oracle SQL

Có thể sai ở đâu?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Bí danh không dùng được trong WHERE, GROUP BY, HAVING
  • Bí danh có thể dùng trong ORDER BY
Giới thiệu về Oracle SQL

Có thể sai ở đâu?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100
ORDER BY Average DESC
  • Giá trị tổng hợp không lọc trong WHERE
  • Giá trị tổng hợp có thể lọc trong HAVING
Giới thiệu về Oracle SQL

Có thể sai ở đâu?

SELECT BillingCountry, 
       AVG(Total) > 100) AS Average
FROM Invoice
WHERE BillingCity <> 'Paris' 
GROUP BY BillingCountry
HAVING AVG(Total) > 100)
ORDER BY Average DESC
  • Hàng đơn lẻ không lọc trong HAVING
  • Hàng đơn lẻ có thể lọc trong WHERE
Giới thiệu về Oracle SQL

Thứ tự thực thi truy vấn

  1. FROMJOIN: xác định dữ liệu được truy vấn

  2. WHERE: lọc từng hàng

  3. GROUP BY: nhóm hàng

  4. HAVING: lọc nhóm

  5. SELECT: chọn cột và áp dụng hàm

  6. DISTINCT: loại trùng lặp

  7. UNION, UNION ALL, INTERSECT, MINUS: toán tử tập hợp

  8. ORDER BY: sắp xếp hàng

Giới thiệu về Oracle SQL

Luyện tập nào!

Giới thiệu về Oracle SQL

Preparing Video For Download...