Menu
CoddyTech

Một dãy số

Thuộc phần Vượt ra ngoài kiến thức cơ bản trong hành trình SQL của Coddy. Bài học 20 trên 27.

Bạn đã gặp từ khóa (keyword) WITH trong Fundamentals để đặt tên cho truy vấn con, còn gọi là CTE (Common Table Expression). CTE đệ quy tiến thêm một bước: nó cho phép truy vấn con tham chiếu đến chính nó, tạo dần kết quả theo từng hàng.

Phiên bản đơn giản nhất tạo ra một dãy số mà không cần bảng nền. Cấu trúc luôn giống nhau:

WITH RECURSIVE counter(n) AS (
    SELECT 1                              -- khởi đầu: hàng bắt đầu
    UNION ALL
    SELECT n + 1 FROM counter WHERE n < 5 -- đệ quy: tạo hàng tiếp theo từ hàng trước đó
)
SELECT n FROM counter

Đọc như sau: bắt đầu với n = 1, sau đó tiếp tục thêm hàng, trong đó mỗi n bằng n + 1 trước đó, và dừng khi WHERE không còn khớp. Kết quả là 1, 2, 3, 4, 5.

Hai phần của thân truy vấn được nối bằng UNION ALL. Phần đầu tiên là phần gốc: các hàng khởi tạo. Phần thứ hai là bước đệ quy: phần này truy vấn chính CTE.

challenge icon

Thử thách

Dễ

Viết một CTE đệ quy có tên powers với hai cột:

  • i: chỉ số lần lặp, bắt đầu từ 1
  • p: 2 lũy thừa i (2, 4, 8, …)

Dừng khi p vượt quá 1000. Trả về cả hai cột, sắp xếp theo i tăng dần.

Tự làm thử

WITH RECURSIVE powers(i, p) AS (
    -- khởi đầu: i=1, p=2
    -- đệ quy: i+1, p*2, cho đến khi p đạt 1000
)
SELECT i, p FROM powers ORDER BY i
quiz iconTự kiểm tra

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 Vượt ra ngoài kiến thức cơ bản

Tự luyện tập: Playground SQL