Bài học theo mô-đun (1/3)
Giới thiệu về CTE (VỚI)
Giới thiệu về CTE (VỚI)
Sớm hay muộn điều này cũng xảy ra với tất cả mọi người: bạn cần lọc dữ liệu dựa trên kết quả của một phép tổng hợp, sau đó lấy bộ lọc đó và THAM GIA nó với một truy vấn tổng hợp khác. Bạn bắt đầu viết SELECT bên trong SELECT, kết quả là FROM của một SELECT khác.
Kết quả? Spaghetti SQL, một truy vấn mà con người không thể đọc được.
CTE (Biểu thức bảng chung) cho phép bạn giải quyết tình trạng lộn xộn này. Bạn kích hoạt chúng bằng từ khóa WITH, từ khóa này cho phép bạn xác định các truy vấn được đặt tên tạm thời và sau đó sử dụng lại chúng dưới dạng "bảng ảo" trong truy vấn cuối cùng.
Cú pháp cơ bản
WITH premium_customers AS (
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;Như bạn có thể thấy, truy vấn chính ở phía dưới đọc từ premium_customers như thể đó là một bảng thực sự! Và nó dễ đọc hơn nhiều so với một kết nối nội bộ lớn với các truy vấn con lồng nhau.
Chúng tôi muốn những sản phẩm rất đắt tiền. Sử dụng CTE có tên là 'luxury_products' để chọn 'id' và 'price' từ 'products' có 'price > 500'. Sau đó chạy truy vấn chính trên CTE này và hiển thị mọi thứ (*).
Hiển thị gợi ý
Bắt đầu với WITH Luxury_products AS (...) sau đó CHỌN * FROM Luxury_products.
Giải pháp khả dụng sau 3 lần thử
Chúng tôi muốn tìm những người dùng viết đánh giá. Tạo 'người đánh giá' CTE trích xuất các giá trị (DISTINCT) 'customer_id' duy nhất từ 'đánh giá'. Sau đó trích xuất 'id', 'first_name', 'last_name' từ bảng 'customers' và \`JOIN\` với CTE của 'người đánh giá' trên id.
Hiển thị gợi ý
VỚI người đánh giá NHƯ (CHỌN DISTINCT customer_id TỪ các bài đánh giá) CHỌN id, first_name, Last_name TỪ khách hàng THAM GIA người đánh giá TRÊN khách hàng.id = reviewers.customer_id;
Giải pháp khả dụng sau 3 lần thử