Gördüğüm her iki yanıt da Informix'te gayet iyi çalışıyor ve temelde standart SQL. Yani gösterim:
INSERT INTO target_table[(<column-list>)] SELECT ... FROM ...;
Informix ile iyi çalışır ve tüm DBMS beklenir. (5 veya daha fazla yıl önce, bu MySQL'in her zaman desteklemediği bir şeydir; şimdi bu tür standart SQL sözdizimi için iyi bir desteğe sahiptir ve AFAIK, bu gösterimde TAMAM çalışacaktır.) Sütun listesi isteğe bağlıdır, ancak hedef sütunları sırayla gösterir, bu nedenle SELECT sonucunun ilk sütunu listelenen ilk sütuna vb. girer. Sütun listesinin yokluğunda SELECT sonucunun ilk sütunu, hedef tablonun ilk sütunu.
Sistemler arasında farklı olan, farklı veritabanlarındaki tabloları tanımlamak için kullanılan gösterimdir - standardın veritabanları arası (DBMS bağımsız olarak) işlemler hakkında söyleyecek bir şeyi yoktur. Informix ile tablo tanımlamak için aşağıdaki gösterimi kullanabilirsiniz:
[dbase[@server]:][owner.]table
Yani, isteğe bağlı olarak geçerli sunucuda değilse o veritabanını barındıran sunucuyu tanımlayan bir veritabanı belirtebilirsiniz, ardından isteğe bağlı bir sahip, nokta ve son olarak gerçek tablo adı gelir. SQL standardı, Informix'in sahibi olarak adlandırdığı şema terimini kullanır. Böylece, Informix'te, aşağıdaki gösterimlerden herhangi biri bir tablo belirleyebilir:
table
"owner".table
dbase:table
dbase:owner.table
dbase@server:table
dbase@server:owner.table
Genel olarak sahibin kote edilmesine gerek yoktur; ancak, tırnak işaretleri kullanırsanız, sahip adının doğru yazılmasını sağlamanız gerekir. Büyük / küçük harf duyarlıdır. Yani:
someone.table
"someone".table
SOMEONE.table
hepsi aynı tabloyu tanımlar. Informix ile, sahip adlarının genellikle büyük harfe dönüştürüldüğü MODE ANSI veritabanlarında hafif bir komplikasyon vardır (informix istisnadır). Yani, bir MODE ANSI veritabanında (yaygın olarak kullanılmaz) şunları yazabilirsiniz:
CREATE TABLE someone.table ( ... )
ve sistem kataloğundaki sahip adı "birisi" yerine "SOMEONE" olur. Sahip adını çift tırnak içine alırsanız, sınırlandırılmış bir tanımlayıcı gibi davranır. Standart SQL ile, sınırlandırılmış tanımlayıcılar birçok yerde kullanılabilir. Informix ile bunları yalnızca sahip adlarında kullanabilirsiniz - diğer bağlamlarda Informix, tek tırnaklı dizeleri dize olarak ayırmak yerine çift tırnaklı dizeleri ayrılmış tanımlayıcılar olarak ayırmak yerine, hem tek tırnaklı hem de çift tırnaklı dizeleri dizeler olarak ele alır. (Elbette, sadece bütünlük için, herhangi bir değere ayarlanabilen DELIMIDENT ortam değişkeni vardır, ancak Y en güvenlidir - çift tırnakların her zaman sınırlandırılmış tanımlayıcıları çevrelediğini ve tek tırnakların her zaman dizeleri çevrelediğini gösterir.)
MS SQL Server köşeli parantez içine alınmış [sınırlandırılmış tanımlayıcılar] kullanmayı başardığını unutmayın. Bana tuhaf geliyor ve kesinlikle SQL standardının bir parçası değil.