Bu yazımda SQL Server'da oldukça faydalı olan LAG() ve LEAD() fonksiyonlarını inceleyeceğiz. Bu fonksiyonlar, bir satırdaki veriye bakarken, o satırın öncesindeki v...
SQL Server'da SELECT INTO ve INSERT INTO SELECT Kullanımı
Bu yazımda, SQL Server'da oldukça sık kullanılan ve günlük veri işlemlerinde hayat kurtaran iki komutu inceleyeceğiz: SELECT INTO ve INSERT INTO SELECT.
Bu komutlar özellikle tablo kopyalama, yedek alma, veri çoğaltma, test verisi oluşturma gibi durumlarda oldukça işe yarar. Her iki komut da veri kopyalama işlemlerini kolaylaştırır fakat kullanım amaçları biraz farklıdır.
SELECT INTO Nedir?
SELECT INTO, var olan bir tablodan veri alarak, bu verilerle yeni bir tablo oluşturmak için kullanılır. Yani hem tabloyu oluşturur hem de verileri kopyalar. Hedef tablo önceden var olmamalıdır.
Basit SELECT INTO Kullanımı
Aşağıdaki örnekte, Persons tablosundaki tüm verileri PersonsNewTable adında yeni bir tabloya kopyalıyoruz:
SELECT
* INTO PersonsNewTable
FROM Persons;
Bu komut ile, SQL Server PersonsNewTable adında yeni bir tablo oluşturur ve Persons tablosundaki verileri buraya kopyalar.
Belirli Kolonları Kopyalayarak Yeni Tablo Oluşturma
Sadece bazı sütunları seçerek tablo oluşturma:
SELECT
FirstName, LastName, City
INTO PersonsSummary
FROM Persons;
Bu örnek yalnızca FirstName, LastName ve City kolonlarını içeren yeni bir tablo oluşturur.
WHERE ile Filtreleme Yaparak Kopyalama
Verilerin bir kısmını alarak tablo oluşturma:
SELECT
*
INTO Persons_Istanbul
FROM Persons
WHERE City = 'Istanbul';
Böylece yalnızca İstanbul'da yaşayan kişilerin verileri yeni tabloya aktarılır.
INSERT INTO SELECT Nedir?
INSERT INTO SELECT, bir tablodan veri çekerek başka bir tabloya eklemek için kullanılır. Hedef tablo önceden var olmalıdır. Bu komut, mevcut bir tabloya başka bir tablodan ya da kendisinden veri kopyalamak için kullanılır.
Aynı Tablo İçerisinde Veri Kopyalama
Aşağıdaki örnekte, Products tablosundaki CategoryID = 1 olan ürünleri alıp, bazı alanları değiştirerek aynı tabloya yeniden ekliyoruz:
INSERT INTO dbo.Products (
ProductName,
SupplierID,
CategoryID,
QuantityPerUnit,
UnitPrice,
UnitsInStock,
UnitsOnOrder,
ReorderLevel,
Discontinued
)
SELECT
ProductName,
SupplierID,
1, -- Yeni kategori
'1 Yeni Ürün', -- Yeni açıklama
13, -- Yeni fiyat
UnitsInStock,
UnitsOnOrder,
ReorderLevel,
Discontinued
FROM dbo.Products
WHERE CategoryID = 1;
Bu işlem sonucunda CategoryID değeri 1 olan ürünlerin bir kopyası oluşturulmuş olur. Ancak bazı alanlar (örneğin UnitPrice, QuantityPerUnit) yeni değerlerle değiştirilmiştir.
Başka Tabloya Veri Ekleme
İki tablo arasında veri aktarımı yapmak da mümkündür:
INSERT INTO ArchiveProducts
SELECT *
FROM Products
WHERE Discontinued = 1;
Bu örnek, satıştan kaldırılmış ürünleri ArchiveProducts adlı tabloya taşımak için kullanılabilir.
Sonuç
SQL Server'da SELECT INTO ve INSERT INTO SELECT, veriyle çalışırken bir çok anlamda işleri kolaylaştırmaktadır.
Umarım faydalı olmuştur. İyi çalışmalar!

Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.