Đơn giản hóa truy vấn bằng từ khóa WITH
Thuộc phần Kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 49 trên 72.
Các truy vấn có thể trở nên quá rối khi bạn thêm nhiều truy vấn con. Ví dụ, đây là một truy vấn có nhiều truy vấn con:
SELECT * FROM table1
WHERE col2 IN (
SELECT col1 FROM table2
WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN (
SELECT col5 FROM table3
WHERE col1 AND col3 OR col2
)
)Để mọi việc dễ dàng hơn, bạn có thể dùng từ khóa WITH query_name AS (...). Từ khóa này cho phép bạn lưu một truy vấn với tên gọi và dùng ở bất cứ đâu bạn muốn:
WITH query1 AS (
SELECT col5 FROM table3
WHERE col1 AND col3 OR col2
), query2 AS (
SELECT col1 FROM table2
WHERE col3 + col2 > 3 AND col5 LIKE '%test%' AND col6 IN query1
)
SELECT * FROM table1
WHERE col2 IN (SELECT col1 FROM query2) AND col4 IN (SELECT col5 FROM query1)Ở đây, chúng ta dùng lại query1 trong query2 và trong truy vấn chính.
Thử thách
DễCác bảng và cột hiện có:
devices_specs:device_id,width,height,num_features,opiniondevices_score:device_id,score
viết một truy vấn để:
- Trước tiên, xác định “các thiết bị lớn” (thiết bị có
widthlớn hơn 200) - Sau đó, tính điểm trung bình của các thiết bị lớn này. Đặt tên cột này là
average_score
Dùng mệnh đề WITH để giải bài toán này.
Tự làm thử
-- Bước 1: đặt tên cho tập kết quả tạm thời chỉ chứa các thiết bị bạn quan tâm
WITH large_devices AS (
SELECT ____
FROM devices_specs
WHERE ____
)
-- Bước 2: dùng lại tập kết quả tạm thời đó trong truy vấn (query) chính
SELECT ____ AS average_score
FROM devices_score
WHERE device_id IN (____);Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản
2Điều kiện
Kiến thức cơ bản về điều kiệnTừ khóa ANDTừ khóa ORTừ khóa NOTKết hợp nhiều điều kiệnDấu ngoặc đơnGiá trị logic3Định dạng giá trị trả về cụ thể
Giá trị nullSắp xếp kết quả phần 1Sắp xếp kết quả phần 2Ôn tập: Công ty an ninh mạngGiới hạn số bản ghiÔn tập: Nhà máy sản xuất xe6Thử thách nhập môn
Ôn tập: bầu cử quốc hộiÔn tập: cảnh sát bắt giữ tội phạmÔn tập: vật chứa đồ uống tại quầy barÔn tập: kỹ sư tạo cột mới9Nhiều bảng
Phép nối cơ bản phần 1Phép nối cơ bản phần 2Ôn tập về phép nốiPhép tự nốiÔn tập về phép tự nốiHợpĐơn giản hóa truy vấn bằng từ khóa WITHÔn tập về truy vấn WITHÔn tập về nhà thầu bất động sảnTự luyện tập: Playground SQL