Rumah >pangkalan data >tutorial mysql >Bagaimanakah SQL Boleh Menjana Julat Nombor Antara Dua Nilai Tertentu?

Bagaimanakah SQL Boleh Menjana Julat Nombor Antara Dua Nilai Tertentu?

Linda Hamilton
Linda Hamiltonasal
2025-01-20 03:26:09327semak imbas

How Can SQL Generate a Range of Numbers Between Two Specified Values?

SQL: Menjana Urutan Nombor Antara Dua Nilai

Perlu membuat senarai nombor berturut-turut dalam julat tertentu dalam SQL? Ini boleh dicapai dengan mudah menggunakan gabungan VALUES kata kunci dan operasi JOIN. Katakan anda perlu menjana jujukan dari 1000 hingga 1050, setiap nombor pada baris baharu:

<code>1000
1001
1002
1003
...
1050</code>

Begini cara melakukannya:

Penyelesaian:

Kaedah ini memanfaatkan berbilang JOINs jadual nombor kecil untuk mencipta jujukan yang lebih besar.

<code class="language-sql">WITH RECURSIVE x AS (
  SELECT 0 AS n
  UNION ALL
  SELECT n + 1
  FROM x
  WHERE n < 9999 -- Adjust upper limit as needed
)
SELECT n
FROM x
WHERE n BETWEEN 1000 AND 1050
ORDER BY n;</code>

Penjelasan:

  1. CTE Rekursif (Ungkapan Jadual Biasa): Penyataan WITH RECURSIVE mencipta jadual sementara x yang mengandungi nombor dari 0 ke atas. UNION ALL menggabungkan 0 awal dengan nombor berikutnya, meningkat sehingga syarat n < 9999 tidak lagi dipenuhi. Laraskan 9999 untuk mengawal nombor maksimum yang dijana.

  2. Menapis Julat: Klausa WHERE menapis hasil daripada CTE untuk hanya memasukkan nombor antara 1000 dan 1050 (termasuk).

  3. Pemesanan: ORDER BY n memastikan nombor dipaparkan dalam tertib menaik.

Alternatif (Bukan Rekursif): Untuk julat yang lebih kecil, pendekatan bukan rekursif mungkin lebih mudah:

<code class="language-sql">WITH x AS (
    SELECT 1000 AS num UNION ALL
    SELECT 1001 UNION ALL
    SELECT 1002 UNION ALL
    -- ... add more numbers as needed ...
    SELECT 1050
)
SELECT num FROM x;</code>

Walau bagaimanapun, pendekatan rekursif jauh lebih berskala untuk julat yang lebih besar.

Kesimpulan:

Teknik SQL ini menyediakan cara yang fleksibel dan cekap untuk menjana urutan berangka dalam sempadan yang ditentukan. CTE rekursif menawarkan kebolehskalaan untuk menjana jujukan yang sangat besar, menjadikannya alat yang berkuasa untuk pelbagai tugas penjanaan data. Ingat untuk melaraskan had atas dalam CTE rekursif (n < 9999) untuk menampung julat yang diingini.

Atas ialah kandungan terperinci Bagaimanakah SQL Boleh Menjana Julat Nombor Antara Dua Nilai Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn