Không hẳn vậy. Bạn có thể sử dụng *
ký tự đại diện cột
để chọn tất cả các cột. Nếu bạn đang kết hợp nhiều bảng, bạn có thể chọn tất cả các cột từ bảng cụ thể bằng cách thêm tiền tố *
với tên bảng hoặc bí danh:
SELECT a.id, a.title, b.*
FROM articles AS a
JOIN blurbs AS b ON a.id = b.article
Tuy nhiên, bạn không nên sử dụng *
trừ khi bạn đang viết một chương trình quản trị DB.
Ngoài ra, bạn có thể xây dựng một câu lệnh trong SQL hoặc một ngôn ngữ khác bằng cách tìm nạp siêu dữ liệu bảng để lấy tên cột. Chỉ sử dụng MySQL, bạn có thể truy vấn COLUMNS
trong INFORMATION_SCHEMA
cơ sở dữ liệu để lấy tên cột và sử dụng GROUP_CONCAT
để xây dựng danh sách cột cho câu lệnh.
SELECT CONCAT(
'SELECT ',
GROUP_CONCAT(COLUMN_NAME SEPARATOR ', '),
' FROM ', :db, '.', :table,
' WHERE ...'
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA=:db AND TABLE_NAME=:table
Thay ":db", ":table" và "..." bằng các giá trị thích hợp. Bạn thậm chí có thể biến nó thành một tuyên bố chuẩn bị sẵn để bạn có thể sử dụng nó cho bất kỳ bảng nào. Từ đó, PREPARE
và EXECUTE
câu lệnh đã xây dựng.
Nếu bạn không bị giới hạn ở SQL để lập trình, nó sẽ bớt lộn xộn hơn. Trình điều khiển DB cho ngôn ngữ bạn chọn có thể cung cấp các phương thức lấy siêu dữ liệu. Việc triển khai thực tế sẽ tương tự như cách tiếp cận SQL thuần túy (lấy tên cột, câu lệnh lắp ráp, chuẩn bị, thực thi), nhưng không quá tệ, vì bạn đang sử dụng một thuật toán, thay vì ngôn ngữ khai báo.
Tôi rất muốn thấy tình huống mà điều này thực sự bắt buộc phải có ..