SQL Dilinde Select, Insert, Update, Delete Komutları Yazar Sinan Pazartesi, 30 Mart 2009 Veri Düzenleme Komutları DML DML komutları var olan kayıtlar üzerinde işlem yapılmasını sağlar. Veri listeleme, yeni kayıt ekleme, var olan kaydı değiştirme veya silme işlemleri yapmak için kullanılır. SELECT ifadesi : Tablolarda bulunan bilgileri elde etmenin en sık kullanılan biçimidir. Select ifadesi diğer ek ifadeler ile birlikte veriyi filtrelemeyi yada daha anlamlı kılmayı sağlar. SELECT FROM Tablo_Adi [ ORDER BY Alanlar ] Sorgu sonucunda tablonun bütün alanlarındaki verilerin elde edilmesi isteniyorsa karakteri kullanılmalı. Eğer tabloda belli kolonlardaki bilgiler isteniyorsa, istenilen alanlar aralarına virgül konularak sıralanır. SELECET Alan1, Alana2, Alan3 FROM Tablo_Adirnek : SQL cümlesinde bütün alanların grüntülenmesi ve sadece istenilen alanların gsterilmesi. Where İfadesi : Select cümlelerinde veriyi çeşitli koşullar sonucunda filtrelemek için kullanılır. SELECT FROM Tablo_Adi WHERE Koşul rnek : Personel tablosunda maaşı 1200'den büyük olan personeller. SQL' de Operatrler:Mantıksal Operatrler : İki yada daha fazla ifade arasında mantıksal sorgu yapılır. işlemleri gruplandırma ve ncelik belirlemeAND VE her iki ifade doğru ise işlem gerçekleşirOR VEYA ifadelerden biri doğru ise işlem gerçekleşirNOT DEĞİL ifadenin yanlış olması durumunda işlem yapılırKarşılaştırma Operatrleri:< ..' den daha küçük> ..' den daha büyük>= Büyük veya eşit<= Küçük veya eşit= Eşit<> Eşit degil!= Eşit degil!< ..' den küçük değil!> ..' den büyük değil rnek : Maaşı 1200 den büyük ve DepartmanId si 1 olmayan ve Adi Feryat olan personelin bilgileri. Matematiksel Operatrleri: SQL cümlelerinde matematiksel operatrler normal işlevlerini gerçekleştirirler. + Toplama- Çıkarma Çarpma/ Blme rnek : Personel tablosundan DepartmanId 'si 2 den farklı olan personellerin id, adı, soyadı, maaşı ve maaşının 25 ile toplamının listelenmesi. IN Operatrü : Bir koşulun başka bir veri kümesi içinde olup olmaması durumu. rnek: Personel tablosunda PersonleId si 2,3 ve ya 5 olan personeller. Burda (2, 3,5 ) bir kümesi olarak grebiliriz. In ifadesi sabit bir veri kümesini sorguladığı gibi başka bir sql cümlesi sonucu dnen değerler içinde de arama yapabilir. zellikle iç içe select ifadelerinde bu yapı kullanılır. rnek : Başka bir tablodan sorgu sonucu elde edilin veri kümesi içinde sorgulama. Departmanın kuruluş tarihi 01.01.1999 dan büyük olan departmanlarda bulunan personellerin listesi. BETWEEN İfadesi : Koşulun belirtilen iki değer arasında olup olmaması için kullanılır. Between ifadesi >= ve <= ifadesi yerinde kullanılabilir. rnek : Personle tablosunda maaşları 1000 ve 1300 arasındaki personellerin adı ve soyad ve maaşlarının gsterilmesi. Bu rnekte AS ifadesi ile Ad ve Soyad alanlarını birleştirip tek olarak gsterdik. LIKE İfadesi : Bir veri kümesi içerisinde belirtiğimiz değere benzeyen verilerin olup olmadığını kontrol etmek için kullanılır. Bu ifade genellikle karakter içeren bilgilerde yani char, varchar, binary vb. tipli alanlar için kullanılır.% 0 veya daha fazla karakter _ Sadece tek bir karakter Belirtilen karakterler arasında sadece tek bir karakter Belirtilen karakterler arasında olmayan tek bir karakter rneğin SELECT FROM Personel WHERE Adi + aşağıdaki like ifadeleri ile kullanılabilir. Adi alanıLIKE 'Al%' Al ile başlayan tüm isimler LIKE '%n' en ile biten tüm isimler LIKE '%y%' y karakterlerini içeren tüm isimler LIKE ' n' en ile biten tüm 5 karakterli isimler LIKE ' %' F veya H ile başlayan tüm isimler LIKE ' %' Başharfi U olmayan tüm isimler rnek : Adresi Barbaros içeren personellerin PeronelId leri. SQL Fonksiyonları : SQL bulunan standart fonksiyonlar. AVG Verilen alanın aritmetik ortalamasını alır. SUM Verilen alanların toplamını alır. MAX Verilen alanın kayıtlar arasındaki en büyük değerini verirMIN Verilen alanın kayıtlar arasındaki en küçük değerini verir. ROUND Verilen alanın virgülden sonraki değerini yuvarlarlarCOUNT Verilen alanın kayıtlar arasında kaç defa yazıldığını bulur. GROUP BY İfadesi : Elde edilen verilerin belli kriterlere gre gruplandırılması. Group by da dikkat edilmesi gereken durum select ifadesinden sonra yazdığımız ve fomksiyonlar dışındaki bütün kolonların group by ifadesinden sonra sıralanması gerekir. rnek : Personel Tablosundan departmana gre ortalama maaş. Ortalaması alınan maaşı ROUND fonksiyonu ile virgülden sonraki iki rakamına gre yuvarladık. Bu rnekte select te PDepartmanId ve Round fonksiyonunu kullandık. Round fon ksiyon olduğu için GROUP BY ifaseinde sonra sadece PDepartmanId yi ekledik. HAVING İfadesi : Gruplandırılmış verilerin var olan koşula sahip olup olmadı kontrolu yapılır. Bu ifade genellikle sum , avg, min , max , vs. gibi ifadeler ile kullanılır. rnek : PersonelMal taplosunda mal toplamı 40 tan büyük olanlar UNION ifadesi :Veri kümelerinde birleştirme işlemi yapar. Ancak veri kümelerinde aynı sayıda kolon bulunmalı ve birbirine karşılıklı gelen kolonların veri tipleri ve uzunlukları aynı olmalıdır. Union ALL ifadesi ile de kullanılır. ALL ifadesi ile kullanıldığında birleştime sonucunda çift kayıt oluşursa hepsini getirir. Union yanlız kullanıldığında çift kayıtları gz ardı eder. rnek : Emlak vergisi için bina ve arsa için ayrı ayrı tabloların oluşturalım. Tablo yapısı aşağıdaki gibi olsun. Bu iki tablo arasında birleştime işlemi yapacağız. 2005 yılındaki bina ve arsaların sahiplerId lerine gre raiç bedellerini bulacağız ORDER BY İfadesi: Sql sorgusu sonucunda elde edilen veriyi verilen kritere gre sıralar. ASC ek ifadesi ile küçükten büyüğe DESC ile de büyükten küçüğe sıralarrnek : PersonelMal Tablosunda PPersonleId si 1 olan personelin mal varlığını küçükten büyüğe ve büyükten küçüğe sıralamaDISTINCT İfadesi : Sql sorgu sonucunda veri tekrarı oluşabilir. Bu durumlarda veri tekrarını nlemek için DISTINCT ifadesi kullanılır. JOIN İfadesi : Tablolar arasında mantıksal olarak ilişki kurmayı sağlar. Join ifadesi ek ifadelerler daha kullanışlı hale getirilmiştirSELECT Tablo1. , Tablo2. FROM Tablo1, Tablo2 WHERE Tablo1. Alan = Tablo2. Alanrnek : Personel ve PersonelMal tablolarını birleştirme işlemi yapıldı ve Personel Tablosundan PersonelId, Adi, Soyadi; PersonelMal Tablosundan da Malın Adını ve Bedelini aldık. Burda dikkat edilmesi gereken nemli bir nokta Personel Tablosunda da Adi isimli bir alan var PersonelMal tablosunda da bu durumda TabloAdi. AlanAdi şeklinde yapılır. Yada tabloya daha kısa isim verilim kısa ismi ile de kullanılabilir. Biz aşağıda Personel'e P PersonelMal ' da PM adı verdik. INNER JOIN İfadesi : T-SQL de var olan bir ifadedir. Tabloların bire bir ilikkilendirilmesini sağlar. Inner joinde join yapılan tabloda ilgili kayıt yok ise boş kayıt geri dner. rnek : Yukardaki rneği inner joinle yapalım; PersonelId si 4 olan personel ait bilgiler gelsin. LEFT JOIN İfadesi : Bu ilişki biçimi de inner joindeki gibi sadece T-SQL de bulunmaktadır. Bu ifadede sol taraf değeri NULL yada boş olması durumunda da; sql cümlesinin istediği veri kümesini geri dndürür. RIGHT JOIN İfadesi :Right joinde sağ taraf değeri NULL yada boş olması durumunda da sql cümlesinin istediği veri kümesini geri dndürür. rnek :Tablo yapısı aşağıdaki gibi olan tablolardan left join ve right joinle sql cümlesi yazılacak. Bina tablosundan CaddeId ile Cadde isimlerine ulaşılacak. Ve hangi binanın hangi caddede olduğunu bulunacak. EmlakBina tablosundaki CaddeId alanı boş geçilebilir. Ve Cadde tablosuyla arasında ikincil olmadığı için mantıklı kayıtlarda girilmemiş olabilir. Şekil - Tablonun yapısı Şekil - Tablodaki kayıtlar Left joinde sadece 2 kayıtta mantıklı veri olmasına rağmen EmlakBina tablosunda bulunan kayıt sayısı kadar kayıt geri dndü. Right joinde de bu durum sağ tarataki tablo için geçerlidir. Sağ taraftaki yani Cadde tablosundaki kayıt sayısı kadar kayıt geri dndürdü. T-SQL CASE İfadesi: Var olan alanlarda bir alanda bir değeri sorgulayacak ve dnecek olan değere gre işlem yapılacaksa case ifadesi kullanılır. SELECT Alanlar CASE Kosul WHEN VarolabilecekDeğer THEN ELSE OlamayacakDeğer ENDrnek : Personel Tablosunda çocuk sayısına gre maaşını belli katsayılarla hesaplanması. INSERT komutu: Tabloya veri eklemek için kullanılır. INSERT INTO Tablo veya View VALUES rnek : Tabloda bulunun bütün kolonların teker teker yazılması ve değerlerinin atanması. rnek : İkinci insert ifadesi ise tablodaki bütün alanlara kayıt yapılacağı için kolon isimlerini yazmaya gerek kalmıyor. Ama dikkat edilmesi gereken durum atanacak değerlerin doğru sırada yazılması. INSERT INTO Departman VALUES (3, 'Genel Müdürlük', '01.01.2000') rnek : Başka bir tablodan select ifadesi ile bilgi alıp tablomuza ekleme. BinaId si 5 olan EmlakBina tablosundaki bilgilerin bir kısmı EmlakArsa tablosuna eklenmesi. INSERT INTO EmlakArsa SELECT BinaId, SahipSicil, Ada, Pafta, Parsel, IslemYili, RaicBedel FROM EmlakBina WHERE BinaId = 5 UPDATE komutu: Tablo veya viewde bulunan kayıt yada kayıtların değiştirilmesi için kullanılır. Değiştirilmesi istenen kolonların teker teker yazılıp değerlerin atanması gerekmekte. UPDATE TabloAdi veya ViewAdi SET rnek :Departman tablosunda DepartmanId 4 olan departmanın bütün alanlarının değiştirilmesi. UPDATE Departman SET DepartmanId = 5, DAdi = 'Halkla İlişkiler', KurulusTarihi='01.01.2001' WHERE DepartmanId = 4 rnek : EmlakArsa tablosunda işlem yılı 2005 olan kayıtlarda Raic bedeli 0.02 oranında artılılması. UPDATE EmlakArsa SET RaicBedel = RaicBedel + RaicBedel 0.02 WHERE IslemYili = 2005 rnek :Koşulsuz update işlemi. EmlakArsa tablosundaki bütün ArsaId değerlerinin 1 artırılması. UPDATE EmlakArsa SET ArsaId = ArsaId + 1 Delete Komutu: Tablo veya viewde bulunan kayıt yada kayıtların silinmesi amacı ile kullanılır. DELETE FROM TabloAdi rnek : Cadde tablosundaki bütün kayıtların silinmesi. DELETE FROM Cadde DELETE FROM EmlakBina WHERE BinaId = 1 rnek :EmlakBina tablosunda BinaId si 1 olan kaydın silinmesi. burda where koşulu daha kompleks de yazılabilir. INSERT INTO EmlakArsa VALUES (9, 2,'150-52','45821-hb','15', 2005, 2000) Not: Alıntı Emekli