Hầu hết các RDBMS chính đều có chức năng cho phép chúng tôi trả về kết quả truy vấn của mình dưới dạng danh sách được phân tách bằng dấu phẩy.
Nghĩa là, chúng ta có thể sử dụng một hàm như vậy để chuyển đổi mỗi hàng thành một mục danh sách riêng biệt, trong một danh sách được phân tách bằng dấu phẩy.
Dưới đây là các ví dụ về cách đạt được điều này trong một số RDBMS phổ biến hơn.
MySQL
MySQL có GROUP_CONCAT()
cho phép chúng tôi xuất kết quả truy vấn của mình trong một danh sách được phân tách bằng dấu phẩy:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Kết quả:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Chúng tôi cũng có thể làm những việc như xóa các giá trị trùng lặp (với DISTINCT
), chỉ định thứ tự cho các kết quả (với ORDER BY
mệnh đề), và chỉ định một dấu phân cách khác.
Xem GROUP_CONCAT()
Hàm trong MySQL để biết thêm ví dụ.
Cơ sở dữ liệu Oracle
Cơ sở dữ liệu Oracle có LISTAGG()
chức năng:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Kết quả:
Hunold, Ernst, Austin, Pataballa, Lorentz
Giống như MySQL, Cơ sở dữ liệu Oracle cũng cho phép chúng tôi loại bỏ các giá trị trùng lặp, chỉ định thứ tự cho kết quả, chỉ định dấu phân tách khác, v.v.
Xem LISTAGG()
Hàm trong Oracle để có thêm ví dụ.
Máy chủ SQL
Máy chủ SQL có STRING_AGG()
chức năng trả về kết quả của chúng tôi trong một danh sách được phân tách bằng dấu phẩy:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Kết quả:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Chúng tôi cũng có thể xóa các giá trị trùng lặp, chỉ định thứ tự cho kết quả, thay đổi dấu phân cách, v.v.
Xem Cách trả về kết quả truy vấn dưới dạng danh sách được phân tách bằng dấu phẩy trong SQL Server để biết thêm ví dụ.
MariaDB
Giống như MySQL, MariaDB cũng có GROUP_CONCAT()
chức năng:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Kết quả:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Giống như hàm cùng tên của MySQL, chúng ta cũng có thể thực hiện những việc như xóa các giá trị trùng lặp (với DISTINCT
), chỉ định thứ tự cho các kết quả (với ORDER BY
mệnh đề) , thay đổi dấu phân tách, v.v.
Tuy nhiên, một thứ mà MariaDB có trên MySQL là LIMIT
, cung cấp cho chúng tôi khả năng giới hạn số lượng kết quả trong danh sách.
Xem MariaDB GROUP_CONCAT()
để biết thêm ví dụ.
PostgreSQL
Postgres có STRING_AGG()
chức năng:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Kết quả:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Chúng tôi cũng có thể xóa các giá trị trùng lặp (với DISTINCT
), chỉ định thứ tự cho các kết quả (với ORDER BY
mệnh đề), thay đổi dấu phân cách, v.v.
Xem STRING_AGG()
Hàm trong PostgreSQL để biết thêm ví dụ.
SQLite
Trong SQLite, chúng ta có thể sử dụng GROUP_CONCAT()
chức năng chuyển đổi kết quả truy vấn của chúng tôi thành một danh sách được phân tách bằng dấu phẩy:
SELECT group_concat(FirstName)
FROM Employee;
Kết quả:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Xem Cách thực hiện GROUP_CONCAT()
Hoạt động trong SQLite để biết thêm ví dụ.
Nhiều cột
Các ví dụ trên đều sử dụng một cột duy nhất cho danh sách. Chúng tôi cũng có thể nối nhiều cột để tạo ra một danh sách bao gồm nhiều cột.
Giả sử chúng ta có một bảng với dữ liệu sau:
SELECT TaskId, TaskName
FROM Tasks;
Kết quả:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
Trong SQL Server, chúng ta có thể làm như sau để xuất cả hai cột trong một hàng:
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
Kết quả:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats