T-SQL Dilinde Select, Insert, Update, Delete Komutları
-
SQL Dilinde Select, Insert, Update, Delete Komutları
Not: AlıntıYazar Sinan Pazartesi, 30 Mart 2009 Veri Düzenleme Komutları DML(Data Manuplation Language)
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 [DISTINCT][ALL] FROM Tablo_Adi
[WHERE Kosul]
[GROUP BY Kosul]
[HAVING Kosul]
[UNION Kosul]
[ ORDER BY Alanlar [ASC] [DESC]]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_Adi
Örnek : SQL cümlesinde bütün alanların görüntülenmesi ve sadece istenilen alanların gösterilmesi.
Where (Koşul) İ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 Operatörler:
Mantıksal Operatörler : İki yada daha fazla ifade arasında mantıksal sorgu yapılır.
() işlemleri gruplandırma ve öncelik belirleme
AND VE her iki ifade doğru ise işlem gerçekleşir
OR VEYA ifadelerden biri doğru ise işlem gerçekleşir
NOT DEĞİL ifadenin yanlış olması durumunda işlem yapılırKarşılaştırma Operatörleri:
< ..’ 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 Operatörleri: SQL cümlelerinde matematiksel operatörler normal işlevlerini gerçekleştirirler.
+ Toplama
- Çıkarma
* Çarpma
/ BölmeÖ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 (İçinde) Operatörü : 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 görebiliriz.
In ifadesi sabit bir veri kümesini sorguladığı gibi başka bir sql cümlesi sonucu dönen 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 (Arasında) İ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 gösterilmesi. Bu örnekte AS ifadesi ile Ad ve Soyad alanlarını birleştirip tek olarak gösterdik.
LIKE (Benzer) İ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 ‘[FH]%’ F veya H ile başlayan tüm isimler
LIKE ‘[^U]%’ 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 verir
MIN Verilen alanın kayıtlar arasındaki en küçük değerini verir.
ROUND Verilen alanın virgülden sonraki değerini yuvarlarlar
COUNT Verilen alanın kayıtlar arasında kaç defa yazıldığını bulur.GROUP BY İfadesi : Elde edilen verilerin belli kriterlere göre 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 göre ortalama maaş . Ortalaması alınan maaşı ROUND fonksiyonu ile virgülden sonraki iki rakamına göre 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 (Sahiplik) İ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 (Birleşim) 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ı göz 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 göre raiç bedellerini bulacağız
ORDER BY (Sırala) İfadesi: Sql sorgusu sonucunda elde edilen veriyi verilen kritere göre sıralar. ASC ek ifadesi ile küçükten büyüğe DESC ile de büyükten küçüğe sıralar
Örnek : PersonelMal Tablosunda PPersonleId si 1 olan personelin mal varlığını küçükten büyüğe ve büyükten küçüğe sıralama
DISTINCT İfadesi : Sql sorgu sonucunda veri tekrarı oluşabilir.Bu durumlarda veri tekrarını önlemek için DISTINCT ifadesi kullanılır.
JOIN (İlişkilendir)İfadesi : Tablolar arasında mantıksal olarak ilişki kurmayı sağlar.Join ifadesi ek ifadelerler daha kullanışlı hale getirilmiştir
SELECT Tablo1.*, Tablo2.* FROM Tablo1 , Tablo2 WHERE Tablo1.Alan = Tablo2.Alan
Örnek : 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 döner.
Ö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 döndü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 döndü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 (foreing key) 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 döndü.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 döndürdü.
T-SQL CASE İfadesi: Var olan alanlarda bir alanda bir değeri sorgulayacak ve dönecek olan değere göre işlem yapılacaksa case ifadesi kullanılır.
SELECT Alanlar CASE Kosul WHEN VarolabilecekDeğer THEN ELSE OlamayacakDeğer END
Örnek : Personel Tablosunda çocuk sayısına göre maaşını belli katsayılarla hesaplanması.
INSERT komutu: Tabloya veri eklemek için kullanılır.
INSERT INTO Tablo veya View([Kolon listesi]) VALUES(Değerler)
Ö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(ArsaId, SahipId, Ada, Pafta, Parsel, IslemYili, RaicBedel) 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 (Kolonlar = Değerleri ,...) [WHERE Kosul ]
Ö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 [WHERE Koşul ]
Ö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(ArsaId, SahipId, Ada, Pafta, Parsel, IslemYili, RaicBedel) VALUES (9, 2,’150-52’,’45821-hb’,’15’, 2005, 2000)
