Như tôi đã giải thích trong bài viết này , để xáo trộn tập kết quả SQL, bạn cần sử dụng lệnh gọi hàm cụ thể cho cơ sở dữ liệu.
Lưu ý rằng việc sắp xếp một tập kết quả lớn bằng hàm RANDOM có thể rất chậm, vì vậy hãy đảm bảo bạn làm điều đó trên các tập kết quả nhỏ.
Nếu bạn phải xáo trộn một tập kết quả lớn và hạn chế nó sau đó, sau đó nó là tốt hơn để một cái gì đó sử dụng như OracleSAMPLE(N)
hoặc TABLESAMPLE
trong SQL Server hoặc PostgreSQL thay vì một hàm ngẫu nhiên trong mệnh đề ORDER BY.
Vì vậy, giả sử chúng ta có bảng cơ sở dữ liệu sau:
Và các hàng sau trong song
bảng:
| id | artist | title |
|----|---------------------------------|------------------------------------|
| 1 | Miyagi & Эндшпиль ft. Рем Дигга | I Got Love |
| 2 | HAIM | Don't Save Me (Cyril Hahn Remix) |
| 3 | 2Pac ft. DMX | Rise Of A Champion (GalilHD Remix) |
| 4 | Ed Sheeran & Passenger | No Diggity (Kygo Remix) |
| 5 | JP Cooper ft. Mali-Koa | All This Love |
Oracle
Trên Oracle, bạn cần sử dụng DBMS_RANDOM.VALUE
hàm, như được minh họa bằng ví dụ sau:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY DBMS_RANDOM.VALUE
Khi chạy truy vấn SQL đã nói ở trên trên Oracle, chúng ta sẽ nhận được tập kết quả sau:
| song |
|---------------------------------------------------|
| JP Cooper ft. Mali-Koa - All This Love |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
Lưu ý rằng các bài hát đang được liệt kê theo thứ tự ngẫu nhiên, nhờ DBMS_RANDOM.VALUE
lệnh gọi hàm được sử dụng bởi mệnh đề ORDER BY.
Máy chủ SQL
Trên SQL Server, bạn cần sử dụng NEWID
hàm, như được minh họa bằng ví dụ sau:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY NEWID()
Khi chạy truy vấn SQL đã nói ở trên trên SQL Server, chúng ta sẽ nhận được tập kết quả sau:
| song |
|---------------------------------------------------|
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
| JP Cooper ft. Mali-Koa - All This Love |
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
Lưu ý rằng các bài hát đang được liệt kê theo thứ tự ngẫu nhiên, nhờ NEWID
lệnh gọi hàm được sử dụng bởi mệnh đề ORDER BY.
PostgreSQL
Trên PostgreSQL, bạn cần sử dụng random
hàm, như được minh họa bằng ví dụ sau:
SELECT
artist||' - '||title AS song
FROM song
ORDER BY random()
Khi chạy truy vấn SQL đã nói ở trên trên PostgreSQL, chúng ta sẽ nhận được tập kết quả sau:
| song |
|---------------------------------------------------|
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| JP Cooper ft. Mali-Koa - All This Love |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
Lưu ý rằng các bài hát đang được liệt kê theo thứ tự ngẫu nhiên, nhờ random
lệnh gọi hàm được sử dụng bởi mệnh đề ORDER BY.
MySQL
Trên MySQL, bạn cần sử dụng RAND
hàm, như được minh họa bằng ví dụ sau:
SELECT
CONCAT(CONCAT(artist, ' - '), title) AS song
FROM song
ORDER BY RAND()
Khi chạy truy vấn SQL đã nói ở trên trên MySQL, chúng ta sẽ nhận được tập kết quả sau:
| song |
|---------------------------------------------------|
| HAIM - Don't Save Me (Cyril Hahn Remix) |
| Ed Sheeran & Passenger - No Diggity (Kygo Remix) |
| Miyagi & Эндшпиль ft. Рем Дигга - I Got Love |
| 2Pac ft. DMX - Rise Of A Champion (GalilHD Remix) |
| JP Cooper ft. Mali-Koa - All This Love |
Lưu ý rằng các bài hát đang được liệt kê theo thứ tự ngẫu nhiên, nhờ RAND
lệnh gọi hàm được sử dụng bởi mệnh đề ORDER BY.