SQL Insert Sorgusu
SQL meraklılarına merhabalar :)
Adım adım SQL derslerimizde ilerlerken nihayet SQL sorguları derslerine başlıyoruz,hatırlarsanız bir önceki makalemizde SQL sorgu tiplerinden bahsetmiş ve nerelerde nasıl kullanacağımızı öğrenmiştik.
Bugünkü makalemizin konusundan bahsetmek gerekirse DML sorgularından insert ve select sorgularını göreceğiz.Aslında makalemizin konusu sadece insert sorgusu olması gerekirken select sorgusunuda öğrenme zorunluluğumuz bulunmaktadır,zira insert ile girdiğimiz verileri görebilmek için select sorgusunu da öğrenmeliyiz :)
Insert Sorgusu
Insert kelime anlamı olarak "içine yerleştirmek" oalrak Türkçe'ye çevrilebilir ve DML sorgulardan biri olan insert sorgusu ile veritabanındaki tablolara veri girişleri yapmamızı sağlar.Insert sorgusunun genel yapısı ise 2'ye ayrılmaktadır;
Bunlardan birincisi tabloda tüm kolonlara veri girdiğimizi varsaydığımız
insert into Tablo values (deger1,deger2...)
şeklindeki sorgu yapısıdır.Bir diğer kullanım tipi ise sadece belirli kolonlara veri gireceğimiz sorgu yapısı olan
insert into Tablo (kolon1,kolon2...) values (deger1,deger2)
sorgu cümleciğidir.Ancak tablodaki belirli kolonlara veri girişi yapmak istediğimiz ikinci insert sorgusunun çalışabilmesi için bütün kolonların null (boş) geçilebilmesi gerekmekte ve aynı zamanda sorgunun çalışabilmesini engelleyen trigger (ileride göreceğiz) tetikleyicisinin olmaması gerekmektedir.
Konuya örnekle devam etmek için veritabanı derslerimizden beri süregelen "BakkalDB" veritabanımızı kullanacağız,şimdi SQL Server Management Studio'yu açıyoruz ve yeni sorgu penceresi oluşturuyoruz:
Açılan sorgu penceresinde ilk olarak karşınıza bembeyaz bir ekran gelecek ve sorgu penceresinin iç başlığında şu
görüntüyü göreceksiniz:
Bunun anlamı şu an ki çalıştığımız sorgu penceresine hangi SQL sorgularını yazarsak yazalım "master" isimli Management Studio'nun çalışması için zorunlu bulunan veritabanımızda çalışacağıdır,dolayısıyla yazacağımız sorguların BakkalDB veritabanımız için herhangi bir etkisi olmayacaktır.Bu yüzden aşağıdaki gibi çalışmak istediğimiz veritabanımızı BakkalDB olarak değiştiriyoruz:
Artık veritabanımızı seçtik ve SQL sorgularını yazmaya hazırız ancak ne yazacağız?
Şu anda karşımızda bomboş duran bir sorgu penceresi duruyor ancak insert sorgusu yazmak için içine veri dolduracağımız bir tablomuzu seçmedik,o yüzden hemen şimdi daha önce çalıştığımız DataBase Diagramımızı açıyor ve bir tablo seçiyoruz:
Tablolarımız yukarıdaki gibi duruyor ve henüz istediğimiz tabloyu rastgele seçemiyoruz çünkü bazı tablolarımızda
foreign key bağıntıları mevcut,foreign key kavramını daha önce öğrenmiştik ve foreign key olarak atanan bir tablodaki
kolon bir başka ya da yine kendi içerisindeki kolonlarındaki veriyi çağırıyor demiştik.
Bütün tablolarımız şu anda boş olduğumuz için foreign key için referans veri çağıracağımız henüz dolu bir tablo yok o
yüzden foreign key alan bir tablo seçemeyiz.
Örneğin ilk olarak "Markalar" tablomuzu ele alalım; herhangi bir tablodan veriyi referans almıyor ancak "Ürünler" isimli tabloya referans veriyor.Bu demek ki "markalar" tablosunda insert sorgusu çalıştırırsak diğer tablolardan varolan bir veriyi çağırmayacağız,dolayısıyla "markalar" tablosu için rahatlıkla insert sorgusu çalıştırabiliriz.
İçerisine veri ekleyeceğimiz tablomuzu belirledikten sonra şimdi gelelim tablonun yapısına;tablo iki kolon var,bunlar
integer tipinde olan "MarkaID" ve nvarchar tipinde olan "MarkaAdi" kolonları.
"MarkaID" isimli kolonumuz Primary Key olarak tanımlandığı için tablo içerisine veri eklendiği anda kendi kendine değer alacaktır ve bu demektir ki insert sorgusunda "MarkaID" isimli kolonumuzu belirmeden sadece "MarkaAdi" isimli kolonumuzu yazmamız yeterlidir.
Şimdi veri eklemeye başlayalım ama öncelikle birinci tip olan insert sorgusunu kullanalım,yani tüm kolonları varsaydığımız:
Insert sorgumuzu yazdık ve çalıştırılmaya hazır ancak sorgumuzu gözden geçirelim öncelikle;
insert into (içine yerleştir) sözcüklerini yazdıktan sonra "Markalar" tablomuza veri eklemek istediğimizi belirttik ve values deyimi açarak parantez içerisinde "MarkaAdi" isimli kolonumuza ekleyeceğimiz veriyi "Eti" olarak yazdık.
Buradaki en önemli nokta "Eti" markasını tek tırnaklar (') arasında yazdık çünkü "MarkaAdi" isimli kolonumuz nvarchar
yani diğer deyişle metin tabanlı olduğu için metin değeri vermemiz gerektiğidir.
Bir diğer püf nokta ise "into" sözcüğüyle ilgili, into (içine) deyimini kullanmak zorunda değilsiniz ancak ben genel
kural olarak bu şekilde öğrendim ve öğretiyorum :)
Son olarak sorgu cümlesinin sonunda noktalı virgül (;) kullandım,bunu da kullanmak zorunda değilsiniz :)
Şimdi sorgumuzu çalıştıralım ama nasıl?
SQL sorgularını çalıştırmanın iki yolu vardır; birincisi klavyenizdeki F5 tuşu bir diğeri ise sorgu penceresinin üstünde yer alan "Execute!" butonu, istediğinizi kullanabilirsiniz ancak SQL sorgularını çalıştırmak bazen çok üst düzey dikkat gerektirmektedir çünkü kalıcı veri kayıplarına kadar giden sonuçlar doğurabilir ve bu yüzden işinize son verilebilir :)
Bir SQL sorgu penceresine alt alta istediğiniz kadar sorgu yazabilir ve tek seferde hepsini çalıştırabilirsiniz ancak bunu kesinlikle önermem zira ilk satırda tabloya bir veri yazdığınız sorgu ile hemen alt satırdaki tüm müşteri bilgilerini içeren tabloya ait silme sorgusunun aynı anda çalıştırdığınızı düşünün: sonuç felaket!
O yüzden el alışkanlığı olarak SQL sorgularınızı mouse imlecinizle seçtikten sonra F5 ya da "Execute!" butonuyla
çalıştırmanızı öneririm.
Şimdi bu kadar öneriden sonra insert sorgumuzu çalıştıralım:
Gördüğünüz gibi sorguyu fare imlecimle işaretledim ve F5 ile çalıştırdım,ardından sorgu penceresi içerisinde hemen
altta bir yazı belirdi:
(1 row(s) affected)
Bunun anlamı sorgu başarıyla çalıştırıldı ve "Markalar" isimli tablomuzda sadece 1 sorguluk işlem yapıldığını gösterdi,yani tablomuza veriyi ekledik.
Peki nerede bu eklenen "Eti" değeri?
Şimdi geldik tablolardaki verileri görüntülemeye,bunu iki yolla yapabiliriz birincisi SQL select sorgusu ile diğer ise Object Explorer üzerinden.Select sorgusundan önce Object Explorer ile görüntülemek istersek "Tables" ağacı altında tablomuzu buluyor ve "Select Top 1000 Rows" ile seçim yapıyoruz:
Bu şekilde tablodaki kayıtları görüntülemenizi önermem çünkü hem ilk 1000 kaydı görüntüleme gibi bir sınır koyuyor hem de select sorgusuna göre oldukça yavaş çalışıyor.O halde select sorgusunu kullanmamız gerekiyor,şimdi de SQL Select sorgusunu görelim:
Select Sorgusu
Select sorgusu veritabanındaki tablolar ve viewler (ileride öğreneceğiz) içerisindeki verileri görüntülemek için kullanılan bir SQL sorgusudur,genel yapısı ise;
Select * from Tablo
şeklindedir.Bu select sorgusundaki yıldız (*) işaretinin anlamı tablodaki tüm kolonları göstermesi anlamına gelmektedir ve istenildiğinde yıldız işareti yerine kolonları isimleri sırası önemli olmadan yazılır ve yazılan kolonlardaki veriler sorgu sonucunda görüntülenir.
Örneğin az önce "Eti" değerini girdiğimiz "Markalar" isimli tablomuzun içeriğini görüntüleyelim:
Sorgumuzu çalıştırdık ve sorgu sonuç penceresinde girdiğimiz veri görüntülendi,sorgu sonucuna dikkat edersek insert
sorgusu içerisinde kendisini yazmadığımız Primary Key olarak tanımlanmış olan "MarkaID" isimli kolonumuzun değeri
otomatik olarak 1 değerini aldı ve girilen her insert sorgusunda "Auto-Increment" olarak daha önce belirttiğimiz için
1'er 1'er artacaktır.
Şimdi tablomuza insert sorgusunun ikinci tipinde yeni bir veri girişini gerçekleştirelim:
Tablomuz primary key olarak atanmış kolonu sadece bir kolona sahip olduğu için sadece tek bir kolonu hedef gösterdik
ve o kolonun veri tipine uygun olarak değer verdik.
Şimdi tekrar SQL select sorgusunu çalıştıralım:
Gördüğünüz gibi beklenildiği şekilde sorgumuz çalıştı ve yeni verilerimizi girdik.
Buraya kadar insert sorgusunu öğrendik ve select sorgusu ile girilen verileri nasıl görüntüleyeceğimizi öğrendik,bundan sonraki makalelerimizde tablolarımızı hızlıca doldurmaya başlayacağız ve her veri girişinden sonra select sorguları ile nasıl girilen verileri görüntüleyeceğimizi göreceğiz.
SQL sorgularıyla ilgili olarak bilmeniz gereken bir nokta ise sorguların küçük-büyük harfe duyarlı olmadığıdır,yani insert sözcüğünün küçük "i" harfiyle yazmanız ile büyük "I" harfiyle yazmanız konusunda bir sakınca yok ancak sonuçta
SQL bile insan ürünü olduğu için bazı sorunları barındırıyor; Türkçe karakterleri.
SQL sorguları yazarken mümkün olduğunca küçük "ı" ve büyük "İ" kullanmamaya özen gösterin çünkü SQL Management Studio bu harflere karşı ayırt edebilme sorunu var tabi şimdilik,umarız Microsoft'un kulağı çınlar da bu konuya el atar :)
Son olarak toplu halde SQL sorgusu nasıl yapılır görelim; bunun için öncelikle yeni bir sorgu penceresi açın ve
aşağıdaki gibi "Kategoriler" tablosunu doldurun:
Sorguları fare imleciyle hepsini seçerek ya da seçmeden doğrudan F5 tuşuna basarak çalıştırdığımızda her sorgu başına
kaç satır verinin etkilendiğini daha doğrusu verinin tabloya eklendiğini görüyoruz :)
Böylece "Kategoriler" isimli tablomuzuda tek seferde doldurmuş olduk ve size ev ödevim olsun,"Kategoriler" isimli
tabloyu SQL select sorgusuyla görüntüleyin :)
Not:Sorgu pencerelerini kapatırken yazılan sorguların kaydedilmesiyle ilgili bir uyarı alırsınız,bu durumda güvenle "hayır" diyerek kapatabilirsiniz,zira insert ya da diğer SQL sorgularıyla yapılan işlemler (select hariç) veritabanında özel bir dosyada tutulmaktadır.
SQL insert sorgusu makalemizin sonuna gelmiş bulunmaktayım,bir sonraki makalemizde görüşene kadar bu öğrendiğimiz iki tabloya yeni veriler girmeyi deneyin.
Hoşçakalın :)
Adım adım SQL derslerimizde ilerlerken nihayet SQL sorguları derslerine başlıyoruz,hatırlarsanız bir önceki makalemizde SQL sorgu tiplerinden bahsetmiş ve nerelerde nasıl kullanacağımızı öğrenmiştik.
Bugünkü makalemizin konusundan bahsetmek gerekirse DML sorgularından insert ve select sorgularını göreceğiz.Aslında makalemizin konusu sadece insert sorgusu olması gerekirken select sorgusunuda öğrenme zorunluluğumuz bulunmaktadır,zira insert ile girdiğimiz verileri görebilmek için select sorgusunu da öğrenmeliyiz :)
Insert Sorgusu
Insert kelime anlamı olarak "içine yerleştirmek" oalrak Türkçe'ye çevrilebilir ve DML sorgulardan biri olan insert sorgusu ile veritabanındaki tablolara veri girişleri yapmamızı sağlar.Insert sorgusunun genel yapısı ise 2'ye ayrılmaktadır;
Bunlardan birincisi tabloda tüm kolonlara veri girdiğimizi varsaydığımız
insert into Tablo values (deger1,deger2...)
şeklindeki sorgu yapısıdır.Bir diğer kullanım tipi ise sadece belirli kolonlara veri gireceğimiz sorgu yapısı olan
insert into Tablo (kolon1,kolon2...) values (deger1,deger2)
sorgu cümleciğidir.Ancak tablodaki belirli kolonlara veri girişi yapmak istediğimiz ikinci insert sorgusunun çalışabilmesi için bütün kolonların null (boş) geçilebilmesi gerekmekte ve aynı zamanda sorgunun çalışabilmesini engelleyen trigger (ileride göreceğiz) tetikleyicisinin olmaması gerekmektedir.
Konuya örnekle devam etmek için veritabanı derslerimizden beri süregelen "BakkalDB" veritabanımızı kullanacağız,şimdi SQL Server Management Studio'yu açıyoruz ve yeni sorgu penceresi oluşturuyoruz:
Açılan sorgu penceresinde ilk olarak karşınıza bembeyaz bir ekran gelecek ve sorgu penceresinin iç başlığında şu
görüntüyü göreceksiniz:
Bunun anlamı şu an ki çalıştığımız sorgu penceresine hangi SQL sorgularını yazarsak yazalım "master" isimli Management Studio'nun çalışması için zorunlu bulunan veritabanımızda çalışacağıdır,dolayısıyla yazacağımız sorguların BakkalDB veritabanımız için herhangi bir etkisi olmayacaktır.Bu yüzden aşağıdaki gibi çalışmak istediğimiz veritabanımızı BakkalDB olarak değiştiriyoruz:
Artık veritabanımızı seçtik ve SQL sorgularını yazmaya hazırız ancak ne yazacağız?
Şu anda karşımızda bomboş duran bir sorgu penceresi duruyor ancak insert sorgusu yazmak için içine veri dolduracağımız bir tablomuzu seçmedik,o yüzden hemen şimdi daha önce çalıştığımız DataBase Diagramımızı açıyor ve bir tablo seçiyoruz:
Tablolarımız yukarıdaki gibi duruyor ve henüz istediğimiz tabloyu rastgele seçemiyoruz çünkü bazı tablolarımızda
foreign key bağıntıları mevcut,foreign key kavramını daha önce öğrenmiştik ve foreign key olarak atanan bir tablodaki
kolon bir başka ya da yine kendi içerisindeki kolonlarındaki veriyi çağırıyor demiştik.
Bütün tablolarımız şu anda boş olduğumuz için foreign key için referans veri çağıracağımız henüz dolu bir tablo yok o
yüzden foreign key alan bir tablo seçemeyiz.
Örneğin ilk olarak "Markalar" tablomuzu ele alalım; herhangi bir tablodan veriyi referans almıyor ancak "Ürünler" isimli tabloya referans veriyor.Bu demek ki "markalar" tablosunda insert sorgusu çalıştırırsak diğer tablolardan varolan bir veriyi çağırmayacağız,dolayısıyla "markalar" tablosu için rahatlıkla insert sorgusu çalıştırabiliriz.
İçerisine veri ekleyeceğimiz tablomuzu belirledikten sonra şimdi gelelim tablonun yapısına;tablo iki kolon var,bunlar
integer tipinde olan "MarkaID" ve nvarchar tipinde olan "MarkaAdi" kolonları.
"MarkaID" isimli kolonumuz Primary Key olarak tanımlandığı için tablo içerisine veri eklendiği anda kendi kendine değer alacaktır ve bu demektir ki insert sorgusunda "MarkaID" isimli kolonumuzu belirmeden sadece "MarkaAdi" isimli kolonumuzu yazmamız yeterlidir.
Şimdi veri eklemeye başlayalım ama öncelikle birinci tip olan insert sorgusunu kullanalım,yani tüm kolonları varsaydığımız:
Insert sorgumuzu yazdık ve çalıştırılmaya hazır ancak sorgumuzu gözden geçirelim öncelikle;
insert into (içine yerleştir) sözcüklerini yazdıktan sonra "Markalar" tablomuza veri eklemek istediğimizi belirttik ve values deyimi açarak parantez içerisinde "MarkaAdi" isimli kolonumuza ekleyeceğimiz veriyi "Eti" olarak yazdık.
Buradaki en önemli nokta "Eti" markasını tek tırnaklar (') arasında yazdık çünkü "MarkaAdi" isimli kolonumuz nvarchar
yani diğer deyişle metin tabanlı olduğu için metin değeri vermemiz gerektiğidir.
Bir diğer püf nokta ise "into" sözcüğüyle ilgili, into (içine) deyimini kullanmak zorunda değilsiniz ancak ben genel
kural olarak bu şekilde öğrendim ve öğretiyorum :)
Son olarak sorgu cümlesinin sonunda noktalı virgül (;) kullandım,bunu da kullanmak zorunda değilsiniz :)
Şimdi sorgumuzu çalıştıralım ama nasıl?
SQL sorgularını çalıştırmanın iki yolu vardır; birincisi klavyenizdeki F5 tuşu bir diğeri ise sorgu penceresinin üstünde yer alan "Execute!" butonu, istediğinizi kullanabilirsiniz ancak SQL sorgularını çalıştırmak bazen çok üst düzey dikkat gerektirmektedir çünkü kalıcı veri kayıplarına kadar giden sonuçlar doğurabilir ve bu yüzden işinize son verilebilir :)
Bir SQL sorgu penceresine alt alta istediğiniz kadar sorgu yazabilir ve tek seferde hepsini çalıştırabilirsiniz ancak bunu kesinlikle önermem zira ilk satırda tabloya bir veri yazdığınız sorgu ile hemen alt satırdaki tüm müşteri bilgilerini içeren tabloya ait silme sorgusunun aynı anda çalıştırdığınızı düşünün: sonuç felaket!
O yüzden el alışkanlığı olarak SQL sorgularınızı mouse imlecinizle seçtikten sonra F5 ya da "Execute!" butonuyla
çalıştırmanızı öneririm.
Şimdi bu kadar öneriden sonra insert sorgumuzu çalıştıralım:
Gördüğünüz gibi sorguyu fare imlecimle işaretledim ve F5 ile çalıştırdım,ardından sorgu penceresi içerisinde hemen
altta bir yazı belirdi:
(1 row(s) affected)
Bunun anlamı sorgu başarıyla çalıştırıldı ve "Markalar" isimli tablomuzda sadece 1 sorguluk işlem yapıldığını gösterdi,yani tablomuza veriyi ekledik.
Peki nerede bu eklenen "Eti" değeri?
Şimdi geldik tablolardaki verileri görüntülemeye,bunu iki yolla yapabiliriz birincisi SQL select sorgusu ile diğer ise Object Explorer üzerinden.Select sorgusundan önce Object Explorer ile görüntülemek istersek "Tables" ağacı altında tablomuzu buluyor ve "Select Top 1000 Rows" ile seçim yapıyoruz:
Bu şekilde tablodaki kayıtları görüntülemenizi önermem çünkü hem ilk 1000 kaydı görüntüleme gibi bir sınır koyuyor hem de select sorgusuna göre oldukça yavaş çalışıyor.O halde select sorgusunu kullanmamız gerekiyor,şimdi de SQL Select sorgusunu görelim:
Select Sorgusu
Select sorgusu veritabanındaki tablolar ve viewler (ileride öğreneceğiz) içerisindeki verileri görüntülemek için kullanılan bir SQL sorgusudur,genel yapısı ise;
Select * from Tablo
şeklindedir.Bu select sorgusundaki yıldız (*) işaretinin anlamı tablodaki tüm kolonları göstermesi anlamına gelmektedir ve istenildiğinde yıldız işareti yerine kolonları isimleri sırası önemli olmadan yazılır ve yazılan kolonlardaki veriler sorgu sonucunda görüntülenir.
Örneğin az önce "Eti" değerini girdiğimiz "Markalar" isimli tablomuzun içeriğini görüntüleyelim:
Sorgumuzu çalıştırdık ve sorgu sonuç penceresinde girdiğimiz veri görüntülendi,sorgu sonucuna dikkat edersek insert
sorgusu içerisinde kendisini yazmadığımız Primary Key olarak tanımlanmış olan "MarkaID" isimli kolonumuzun değeri
otomatik olarak 1 değerini aldı ve girilen her insert sorgusunda "Auto-Increment" olarak daha önce belirttiğimiz için
1'er 1'er artacaktır.
Şimdi tablomuza insert sorgusunun ikinci tipinde yeni bir veri girişini gerçekleştirelim:
Tablomuz primary key olarak atanmış kolonu sadece bir kolona sahip olduğu için sadece tek bir kolonu hedef gösterdik
ve o kolonun veri tipine uygun olarak değer verdik.
Şimdi tekrar SQL select sorgusunu çalıştıralım:
Gördüğünüz gibi beklenildiği şekilde sorgumuz çalıştı ve yeni verilerimizi girdik.
Buraya kadar insert sorgusunu öğrendik ve select sorgusu ile girilen verileri nasıl görüntüleyeceğimizi öğrendik,bundan sonraki makalelerimizde tablolarımızı hızlıca doldurmaya başlayacağız ve her veri girişinden sonra select sorguları ile nasıl girilen verileri görüntüleyeceğimizi göreceğiz.
SQL sorgularıyla ilgili olarak bilmeniz gereken bir nokta ise sorguların küçük-büyük harfe duyarlı olmadığıdır,yani insert sözcüğünün küçük "i" harfiyle yazmanız ile büyük "I" harfiyle yazmanız konusunda bir sakınca yok ancak sonuçta
SQL bile insan ürünü olduğu için bazı sorunları barındırıyor; Türkçe karakterleri.
SQL sorguları yazarken mümkün olduğunca küçük "ı" ve büyük "İ" kullanmamaya özen gösterin çünkü SQL Management Studio bu harflere karşı ayırt edebilme sorunu var tabi şimdilik,umarız Microsoft'un kulağı çınlar da bu konuya el atar :)
Son olarak toplu halde SQL sorgusu nasıl yapılır görelim; bunun için öncelikle yeni bir sorgu penceresi açın ve
aşağıdaki gibi "Kategoriler" tablosunu doldurun:
Sorguları fare imleciyle hepsini seçerek ya da seçmeden doğrudan F5 tuşuna basarak çalıştırdığımızda her sorgu başına
kaç satır verinin etkilendiğini daha doğrusu verinin tabloya eklendiğini görüyoruz :)
Böylece "Kategoriler" isimli tablomuzuda tek seferde doldurmuş olduk ve size ev ödevim olsun,"Kategoriler" isimli
tabloyu SQL select sorgusuyla görüntüleyin :)
Not:Sorgu pencerelerini kapatırken yazılan sorguların kaydedilmesiyle ilgili bir uyarı alırsınız,bu durumda güvenle "hayır" diyerek kapatabilirsiniz,zira insert ya da diğer SQL sorgularıyla yapılan işlemler (select hariç) veritabanında özel bir dosyada tutulmaktadır.
SQL insert sorgusu makalemizin sonuna gelmiş bulunmaktayım,bir sonraki makalemizde görüşene kadar bu öğrendiğimiz iki tabloya yeni veriler girmeyi deneyin.
Hoşçakalın :)