Bu bölümde, tablolara sütun değerleri içeren yeni satırlar ekleyen sorgular yazmayı öğreneceksiniz.

INSERT ile Veri Eklemek

SQL’de INSERT ifadesi bir veya daha fazla satırı bir tabloya eklemek için kullanılır. Bu ifadenin birkaç formu vardır.

Temel syntax aşağıdaki gibidir:

INSERT [INTO] <Table or View> [(column_list)]
VALUES ([ColumnName or an expression or DEFAULT or NULL], .…n)

Insert Değerleri olarak adlandırılan bu formla, kendi veri türlerine uygun değerler yerleştirilecek sütunları ve tabloya eklenen her satır için verinin bulunacağı sırayı belirtebilirsiniz. Ek olarak bu sütunların değerlerini virgülle ayrılmış bir liste olarak da belirtebilirsiniz.

DEFAULT anahtar sözcüğünün kullanılması ise, bir sütun değerinin listelenmediği ancak bir değere ihtiyaç duyulduğu zaman sunulması gereken önceden tanımlanmış değer anlamına gelir.

NULL anahtar sözcüğü de, bir sütun değerinin listelenmediği ve bir değere gerek duyulmaması durumunda sunulması gereken önceden tanımlanmış değer anlamına gelir.

Aşağıdaki örnekte INSERT ifadesinin kullanımını gösterilmiştir. Sütunlar ve değer listesi arasındaki korelasyona dikkat edin:

USE TSQL
GO
INSERT INTO Sales.OrderDetails (OrderID, ProductID, UnitPrice, Qty, Discount)
VALUES (10248, 39, 18, 2, 0.05)

Sütun listesi belirtilmezse her sütun için tabloda tanımlandıkları sırayla bir sütun değeri veya anahtar kelime (DEFAULT veya NULL) belirtilmelidir. IDENTITY sütunu gibi otomatik olarak atanmış değeri olmayan bir sütun için değer belirtilmezse insert işlemi başarısız olur.

INSERT VALUES ifadesi, bir seferde tek bir satır eklemeye ek olarak kendisi gibi birden fazla virgülle ayrılmış değer kümesi sağlayarak birden çok satır eklemek için kullanılabilir:

(1,2,3), (3,2,1), (2,2,2)

Birden fazla satır eklemek için şu T-SQL kodunu kullanabilirsiniz:

USE TSQL
GO
INSERT INTO Sales.OrderDetails(orderid, productid, unitprice, qty, discount)
VALUES (10249,39,18,2,0.05), (12002,39,18,5,0.10);
INSERT INTO Sales.OrderDetails(orderid, productid, unitprice, qty, discount)
VALUES (10250,39,18,2,0.05)
, (10251,39,18,5,0.10)
, (10252,39,18,2,0.05)
, (10254,39,18,5,0.10);
INSERT’i Veri Sağlayıcılarla Kullanma

T-SQL, ayrıca INSERT için değer sağlamak üzere diğer işlemlerin çıktılarının kullanılmasını da destekler. SELECT ifadesinin sonuçlarını veya stored procedure çıktısını INSERT ifadesinde kullanabilirsiniz.

SELECT deyimini INSERT ifadesiyle kullanmak için, VALUES yerine SELECT ifadenizi koyun. INSERT SELECT adı verilen bu formla, bya SELECT sorgusu döndürülen satır kümesini hedef tabloya ekleyebilirsiniz. INSERT SELECT kullanımı, INSERT DEĞERLERI ile aynı hususları sunar:

  • İsteğe bağlı olarak tablo adını takip eden bir sütun listesi belirleyebilirsiniz.
  • Her sütun için değerleri veya DEFAULT / NULL sağlamalısınız.

Aşağıdaki syntax, INSERT ile SELECT kullanımını göstermektedir:

INSERT [INTO] <table or view> [(column_list)]
SELECT <column_list> FROM <table_list>...; 

Stored procedure’lerden  gelen sonuç kümeleri (hatta dinamik kümeler) bir INSERT ifadesine  input olarak da kullanılabilir. INSERT EXEC adı verilen bu form, kavramsal olarak INSERT SELECT ile aynı şeyleri sunacaktır.

Aşağıdaki örnekte, EXEC ifadesinin bir stored procedure’den satır ekleme işlemi gösterilmektedir:

INSERT INTO Production.Products (productID, productname, supplierid, categoryid,
unitprice)
EXEC Production.AddNewProducts;
GO 
SELECT INTO kullanımı

T-SQL’de SELECT INTO deyimini kullanarak SELECT sorgusunun sonuçlarıyla yeni bir tablo oluşturup bu tabloyu doldurmak için kullanabilirsiniz. SELECT INTO mevcut bir tabloya satır eklemek için kullanılamaz. SELECT listesindeki sütunlar tarafından tanımlanan bir şema ile yeni bir tablo oluşturulur. Yeni tablodaki her sütun, SELECT listesindeki karşılık gelen sütunla (veya ifadeyle) aynı isme, veri türüne ve okunabilirliğe sahip olacaktır.

SELECT INTO ifadesini kullanmak için FROM ifadesinden hemen önce, sorgunun SELECT ifadesinde INTO <new_target_table_name> eklemeniz yeterli.

SELECT INTO
SELECT column1
, column2

INTO NewTable FROM OldTable

SELECT ordered
, custid
, empid
, orderdate
, shipcity
, shipregion
, shipcountry
INTO Sales.OrdersExport FROM Sales.Orders
WHERE empid = 5;

Not: SELECT INTO ifadesi, varsayılan FileGroup’ta yeni bir tablo oluşturur. SQL Server 2017’den başlayarak, ON anahtar sözcüğünü kullanarak FileGroup’u belirleyebilirsiniz.

Not: SELECT INTO kullanımı, hedef veri tabanında tablo nesneleri oluşturmak için izin gerektirmektedir. Bu ifade sadece bir kez çalışacağı için view içerisinde kullanmayın. View etkinleştirildiğinde bir tablo oluşturulamazsa view’ın ilk kullanımından sonra bir hata ortaya çıkacaktır.

Kaynak:
INSERT (Transact-SQL)
Table Value Constructor (Transact-SQL)
INTO clause (Transact-SQL)