Cả hai câu trả lời tôi thấy đều hoạt động tốt trong Informix, và về cơ bản là SQL chuẩn. Đó là, ký hiệu:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
hoạt động tốt với Informix và, tôi mong đợi, tất cả các DBMS. (Trước đây 5 năm trở lên, đây là loại điều mà MySQL không phải lúc nào cũng hỗ trợ; giờ đây nó đã hỗ trợ rất tốt cho loại cú pháp SQL tiêu chuẩn này và, AFAIK, nó sẽ hoạt động tốt với ký hiệu này.) Danh sách cột là tùy chọn nhưng chỉ ra các cột mục tiêu theo trình tự, do đó, cột đầu tiên của kết quả của CHỌN sẽ đi vào cột được liệt kê đầu tiên, v.v. Trong trường hợp không có danh sách cột, cột đầu tiên của kết quả của CHỌN sẽ đi vào cột đầu tiên của bảng đích.
Điều có thể khác nhau giữa các hệ thống là ký hiệu được sử dụng để xác định các bảng trong các cơ sở dữ liệu khác nhau - tiêu chuẩn không có gì để nói về các hoạt động giữa các cơ sở dữ liệu (chứ không nói gì đến DBMS). Với Informix, bạn có thể sử dụng ký hiệu sau để xác định bảng:
[dbase[@server]:][owner.]table
Nghĩa là, bạn có thể chỉ định cơ sở dữ liệu, tùy ý xác định máy chủ lưu trữ cơ sở dữ liệu đó nếu không có trong máy chủ hiện tại, theo sau là chủ sở hữu tùy chọn, dấu chấm và cuối cùng là tên bảng thực tế. Tiêu chuẩn SQL sử dụng lược đồ thuật ngữ cho những gì Informix gọi cho chủ sở hữu. Do đó, trong Informix, bất kỳ ký hiệu nào sau đây có thể xác định một bảng:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Các chủ sở hữu nói chung không cần phải được trích dẫn; tuy nhiên, nếu bạn sử dụng dấu ngoặc kép, bạn cần phải viết đúng tên chủ sở hữu - nó trở nên phân biệt chữ hoa chữ thường. Đó là:
someone.table
"someone".table
SOMEONE.table
Tất cả xác định cùng một bảng. Với Informix, có một sự phức tạp nhẹ với cơ sở dữ liệu MODE ANSI, trong đó tên chủ sở hữu thường được chuyển đổi thành chữ hoa (thông tin là ngoại lệ). Đó là, trong cơ sở dữ liệu MODE ANSI (không được sử dụng phổ biến), bạn có thể viết:
CREATE TABLE someone.table ( ... )
và tên chủ sở hữu trong danh mục hệ thống sẽ là "MỘT SỐ", thay vì "ai đó". Nếu bạn đặt tên chủ sở hữu trong dấu ngoặc kép, nó sẽ hoạt động như một định danh phân cách. Với SQL tiêu chuẩn, các định danh được phân tách có thể được sử dụng ở nhiều nơi. Với Informix, bạn chỉ có thể sử dụng chúng xung quanh tên chủ sở hữu - trong các ngữ cảnh khác, Informix coi cả hai chuỗi trích dẫn đơn và trích dẫn kép dưới dạng chuỗi, thay vì tách các chuỗi trích dẫn đơn thành chuỗi và chuỗi trích dẫn kép làm định danh phân cách. (Tất nhiên, chỉ để hoàn chỉnh, có một biến môi trường, DELIMIDENT, có thể được đặt - thành bất kỳ giá trị nào, nhưng Y là an toàn nhất - để chỉ ra rằng dấu ngoặc kép luôn bao quanh các định danh được phân tách và dấu ngoặc đơn luôn bao quanh chuỗi.)
Lưu ý rằng MS SQL Server quản lý để sử dụng [số nhận dạng được phân tách] được đặt trong dấu ngoặc vuông. Nó có vẻ kỳ lạ đối với tôi và chắc chắn không phải là một phần của tiêu chuẩn SQL.