Merhaba Webkolog takipçileri!
SQL Server'da veri tabanı objelerini nasıl oluşturup yöneteceğimizi (DDL işlemleri) önceki makalemizde konuşmuştuk. Peki ya o objelerin içine veri nasıl ekleyeceğiz, mevcut verileri nasıl güncelleyeceğiz, sorgulayacağız veya sileceğiz? İşte tam da bu noktada DML (Data Manipulation Language) işlemleri devreye giriyor. Bugün sizlerle, veri tabanındaki verilerle nasıl etkileşime geçeceğimizi detaylıca inceleyeceğiz. Hazırsanız, verilerle dans etmeye başlayalım!
DML Nedir?
DML (Data Manipulation Language - Veri İşleme Dili), veri tabanı içindeki mevcut veriler üzerinde işlem yapmamızı sağlayan SQL komutları setidir. En temel DML komutları SELECT, INSERT, UPDATE ve DELETE'tir. Bu komutlar sayesinde, veri tabanınızın kalbinde yer alan bilgilere hükmedersiniz.
1. SELECT: Veri Sorgulama
Veri tabanından bilgi almak için kullandığımız en temel komut SELECT'tir. Hangi verileri, hangi koşullara göre ve nasıl görmek istediğimizi bu komutla belirtiriz.
Tüm sütunları almak için:
SELECT * FROM TabloAdi;
Belirli sütunları almak için:
SELECT adi, soyadi FROM TabloAdi;
Sütunları birleştirerek veya üzerinde işlem yaparak almak için:
SELECT adi + ' ' + soyadi AS TamAd FROM Personel;
WHERE: Koşullu Seçim
WHERE anahtar kelimesi, sorgumuza filtreler eklememizi sağlar. Böylece sadece belirli koşulları sağlayan satırları döndürebiliriz.
-- İsmi 'Ali' olan kayıtları seç
SELECT * FROM Personel WHERE isim = 'Ali';
-- İsmi 'Ali' olmayan kayıtları seç (!= veya <> kullanılabilir)
SELECT * FROM Personel WHERE isim != 'Ali';
-- Yaşı 25'ten büyük ve 31'den küçük olan kayıtları seç
SELECT * FROM Personel WHERE yas > 25 AND yas < 31;
-- Yaşı 18 veya daha büyük olan kayıtları seç
SELECT * FROM Personel WHERE yas >= 18;
-- Kompleks matematiksel koşullar
SELECT * FROM Personel WHERE ((yas * 2) + 3) > 20;
-- Belirli bir aralıktaki kayıtları seç (25 dahil 30 dahil)
SELECT * FROM Personel WHERE yas BETWEEN 25 AND 30;
-- Kayıt tarihi belirli bir tarihten önce olanlar
SELECT * FROM Personel WHERE kayitTarihi < '2015-10-01'; -- YYYY-AA-GG formatı daha güvenlidir
-- İsmi 'Ali' VEYA soyadı 'Candan' olanlar
SELECT * FROM Personel WHERE isim = 'Ali' OR soyad = 'Candan';
-- Mantıksal operatörlerin önceliği (AND, OR)
SELECT * FROM Personel WHERE isim = 'Ali' OR soyad = 'Candan' AND sehir = 'İSTANBUL'; -- AND daha önceliklidir
-- Belirli bir listedeki değerlere sahip olanlar
SELECT * FROM Personel WHERE sehir IN ('ANKARA','BURSA','İSTANBUL');
-- Belirli bir koşulu SAĞLAMAYANLAR
SELECT * FROM Personel WHERE NOT yazi = 'Yazı' AND sayi = 0;
-- Kompleks koşulların birleşimi
SELECT * FROM Personel WHERE (yazi = 'Yazı' AND sayi = 1) OR yazi LIKE 'A%';
LIKE: Desen Eşleştirme
LIKE operatörü, belirli bir desene uyan metin değerlerini aramak için kullanılır. Joker karakterler (wildcard) ile birlikte kullanılır:
- %: Sıfır veya daha fazla karakteri temsil eder.
- _: Tek bir karakteri temsil eder.
-- İsminin içinde 'l' geçenler
SELECT * FROM Personel WHERE isim LIKE '%l%';
-- İsmi 'Al' ile başlayanlar
SELECT * FROM Personel WHERE isim LIKE 'Al%';
-- İsmi 'li' ile bitenler
SELECT * FROM Personel WHERE isim LIKE '%li';
-- İsmi 'A' ile başlayıp 'i' ile bitenler
SELECT * FROM Personel WHERE isim LIKE 'A%i';
-- İçinde 'a', herhangi bir karakter ve 'i' geçenler (örneğin 'api', 'ami')
SELECT * FROM Personel WHERE yazi LIKE '%a_i%';
-- İçinde 'a', herhangi iki karakter ve 'y' geçenler (örneğin 'abcy', 'axxy')
SELECT * FROM Personel WHERE yazi LIKE '%a__y%';
-- Baş harfleri 'A' veya 'B' olanlar
SELECT * FROM Personel WHERE yazi LIKE '[AB]%';
-- Baş harfi 'A' veya 'B' OLMAYANLAR
SELECT * FROM Personel WHERE yazi LIKE '[^AB]%';
-- 'A' ile başlayan ve ikinci harfi 'b' olmayanlar
SELECT * FROM Personel WHERE yazi LIKE 'A[^b]%';
GROUP BY: Gruplandırma
GROUP BY, aynı değerlere sahip satırları tek bir özet satırda gruplamak için kullanılır. Genellikle AVG(), COUNT(), SUM(), MAX(), MIN() gibi toplama (aggregate) fonksiyonlarıyla birlikte kullanılır.
-- Yazı sütunundaki benzersiz değerleri ve her birinin kaç kez tekrar ettiğini say
SELECT yazi, COUNT(*) AS Adet FROM TabloAdi GROUP BY yazi;
-- Yazı ve Sayı sütunlarına göre gruplandır ve her grubun adedini say
SELECT yazi, sayi, COUNT(*) AS Adet FROM TabloAdi GROUP BY yazi, sayi;
-- Ülkelere göre maaş ortalaması, sadece yaşı 30'dan büyük olan kişilerin
SELECT ulke, AVG(maas) AS OrtalamaMaas FROM Kisiler WHERE yas > 30 GROUP BY ulke;
-- GROUP BY ile HAVING: Gruplar üzerinde filtreleme
-- Ülkelere göre gruplandır ve sadece ortalama yaşı 30'dan büyük olan ülkeleri getir
SELECT ulke, AVG(maas) AS OrtalamaMaas FROM Kisiler GROUP BY ulke HAVING AVG(yas) > 30;
WHERE satırlar üzerinde, HAVING ise gruplar üzerinde filtreleme yapar. Bu farkı unutmayın.
ORDER BY: Sıralama
Sorgu sonuçlarını belirli bir sütuna göre artan (ASC) veya azalan (DESC) düzende sıralamak için ORDER BY kullanırız. Varsayılan sıralama ASC'dir.
-- İsim sütununa göre artan sıralama (ASC yazmasak da varsayılan budur)
SELECT * FROM Personel ORDER BY isim ASC;
-- İsim sütununa göre azalan sıralama
SELECT * FROM Personel ORDER BY isim DESC;
-- Önce isme göre azalan, sonra soyada göre azalan sıralama
SELECT * FROM Personel ORDER BY isim DESC, soyad DESC;
-- Rastgele sıralama (Genellikle test amaçlı veya gösterim için kullanılır)
SELECT * FROM Personel ORDER BY NEWID();
DISTINCT: Tekil Değerler
Bir sütundaki yinelenen değerleri kaldırarak sadece tekil (benzersiz) değerleri döndürmek için DISTINCT kullanırız.
SELECT DISTINCT sehir FROM Musteriler;
TOP: Belirli Sayıda Satır Seçimi
Sorgu sonucundan belirli sayıda satırı veya belirli bir yüzdeyi almak için TOP anahtar kelimesini kullanırız.
-- İlk 5 kaydı getir
SELECT TOP 5 * FROM TabloAdi;
-- İlk %5'lik kısmı getir
SELECT TOP 5 PERCENT * FROM TabloAdi;
-- İlk 5 kaydı getir ve 5. sıradaki kayıtlarla aynı değere sahip olanları da dahil et
SELECT TOP 5 WITH TIES * FROM TabloAdi ORDER BY Fiyat DESC; -- WITH TIES kullanmak için ORDER BY şarttır
JOIN: Tabloları Birleştirme
Birden fazla tablodaki verileri ilişkili sütunlar üzerinden birleştirmek için JOIN kullanılır. En yaygın kullanılan JOIN türleri şunlardır:
- INNER JOIN: Her iki tabloda da eşleşen kayıtlarda veri getirir.
- LEFT JOIN (LEFT OUTER JOIN): Sol tablodaki tüm kayıtları ve sağ tabloda eşleşen kayıtları getirir. Eşleşme yoksa sağ taraftan NULL değerler gelir.
- RIGHT JOIN (RIGHT OUTER JOIN): Sağ tablodaki tüm kayıtları ve sol tabloda eşleşen kayıtları getirir. Eşleşme yoksa sol taraftan NULL değerler gelir.
- FULL OUTER JOIN: Her iki tablodaki tüm kayıtları getirir. Eşleşme yoksa ilgili taraftan NULL değerler gelir.
- CROSS JOIN: Her iki tablonun tüm satırlarını birbiriyle eşleştirerek kartezyen çarpım oluşturur. Genellikle WHERE koşulu olmadan kullanılmaz.
-- İç Birleşim (Ortak olanları getirir)
SELECT t1.id, t1.isim, t2.siparis_tutari
FROM Musteriler AS t1
INNER JOIN Siparisler AS t2 ON t1.id = t2.musteri_id;
-- Sol Birleşim (Müşterilerin tamamı ve varsa siparişleri)
SELECT t1.id, t1.isim, t2.siparis_tutari
FROM Musteriler AS t1
LEFT JOIN Siparisler AS t2 ON t1.id = t2.musteri_id;
-- Sağ Birleşim (Siparişlerin tamamı ve varsa müşteri bilgileri)
SELECT t1.id, t1.isim, t2.siparis_tutari
FROM Musteriler AS t1
RIGHT JOIN Siparisler AS t2 ON t1.id = t2.musteri_id;
-- Tam Dış Birleşim (Her iki tablodaki tüm kayıtlar)
SELECT t1.id, t1.isim, t2.siparis_tutari
FROM Musteriler AS t1
FULL OUTER JOIN Siparisler AS t2 ON t1.id = t2.musteri_id;
-- Üç veya daha fazla tablo birleştirme
SELECT m.isim, s.siparis_no, u.urun_adi
FROM Musteriler AS m
LEFT JOIN Siparisler AS s ON m.id = s.musteri_id
LEFT JOIN Urunler AS u ON s.urun_id = u.id;
UNION, INTERSECT, EXCEPT: Sorgu Sonuçlarını Birleştirme/Karşılaştırma
Bu operatörler, birden fazla SELECT sorgusunun sonuç kümelerini birleştirmek veya karşılaştırmak için kullanılır. Her sorgunun sütun sayıları ve veri tipleri uyumlu olmalıdır.
- UNION: İki veya daha fazla sorgunun sonuçlarını birleştirir ve yinelenen satırları kaldırır.
- UNION ALL: İki veya daha fazla sorgunun sonuçlarını birleştirir, yinelenen satırları kaldırmaz (daha hızlıdır).
- INTERSECT: İki sorgunun ortak olan satırlarını döndürür.
- EXCEPT: İlk sorguda olup ikinci sorguda olmayan satırları döndürür.
-- İki tablodaki (veya iki sorgudaki) tüm benzersiz kayıtları birleştir
SELECT isim, soyad FROM Personel
UNION
SELECT adi, soyadi FROM EskiPersonel;
-- Tüm kayıtları birleştir (tekrar edenleri de dahil)
SELECT isim, soyad FROM Personel
UNION ALL
SELECT adi, soyadi FROM EskiPersonel;
-- Her iki tabloda da bulunan ortak isimleri getir
SELECT isim FROM Personel
INTERSECT
SELECT isim FROM Misafirler;
-- Sadece Personel tablosunda olup Misafirler tablosunda olmayan isimleri getir
SELECT isim FROM Personel
EXCEPT
SELECT isim FROM Misafirler;
Ayrıca, SELECT * INTO YeniTablo FROM KopyalanacakTablo; komutu ile mevcut bir tablonun yapısını ve verilerini yeni bir tabloya kolayca kopyalayabiliriz.
2. INSERT: Veri Ekleme
Tabloya yeni satır (kayıt) eklemek için INSERT INTO komutunu kullanırız.
-- Belirli sütunlara veri ekleme
INSERT INTO Personel (isim, soyad, yas) VALUES ('Elif', 'Yılmaz', 28);
-- Tüm sütunlara veri ekleme (sütun adlarını belirtmeden, sıraya dikkat!)
INSERT INTO Personel VALUES (DEFAULT, 'Deniz', 'Kara', 70.00, '1995-05-15', GETDATE(), '12345678901'); -- ID için DEFAULT
3. UPDATE: Veri Güncelleme
Mevcut bir tablodaki verileri değiştirmek için UPDATE komutunu kullanırız. WHERE koşulu ile hangi satırların güncelleneceğini belirtmek çok önemlidir; aksi takdirde tüm satırlar güncellenir!
-- Sadece ID'si 1 olan kişinin yaşını 35 olarak güncelle
UPDATE Personel SET yas = 35 WHERE id = 1;
-- Yaşı 30'dan büyük olan herkesin kilosunu 80 yap
UPDATE Personel SET kilo = 80.00 WHERE yas > 30;
4. DELETE: Veri Silme
Tablodan satırları silmek için DELETE FROM komutunu kullanırız. Yine, WHERE koşulu burada hayati öneme sahiptir; aksi takdirde tüm tablo içeriği silinir!
-- Sadece ID'si 5 olan kişiyi sil
DELETE FROM Personel WHERE id = 5;
-- Yaşı 60'tan büyük olan tüm kişileri sil
DELETE FROM Personel WHERE yas > 60;
-- Tablodaki TÜM verileri sil (WHERE kullanmazsanız!)
DELETE FROM Personel; -- Dikkat!
Aggregate (Toplama) Fonksiyonları
Veriler üzerinde hesaplamalar yapmak için kullanılan fonksiyonlardır:
- SUM(): Bir sütundaki sayısal değerlerin toplamını hesaplar.
- AVG(): Bir sütundaki sayısal değerlerin ortalamasını hesaplar.
- COUNT(): Bir sorgunun döndürdüğü satır sayısını sayar. COUNT(*) tüm satırları sayarken, COUNT(SutunAdi) NULL olmayan değerleri sayar.
- MAX(): Bir sütundaki en büyük değeri bulur.
- MIN(): Bir sütundaki en küçük değeri bulur.
SELECT SUM(Maas) AS ToplamMaas FROM Personel;
SELECT AVG(Yas) AS OrtalamaYas FROM Personel;
SELECT COUNT(*) AS ToplamKayit FROM Personel;
SELECT MAX(Fiyat) AS EnYuksekFiyat FROM Urunler;
SELECT MIN(StokAdedi) AS EnDusukStok FROM Urunler;
Bu makalede, MS SQL'deki DML işlemlerini yani veri tabanı içerisindeki verilerle nasıl etkileşim kuracağımızı detaylıca öğrendik. Artık verilerinizi sorgulayabilir, ekleyebilir, güncelleyebilir ve silebilirsiniz. Unutmayın, veri tabanıyla çalışırken pratik yapmak en iyi öğrenme yöntemidir!
Webkolog'u takipte kalın!
Hepinize bol kodlu ve keyifli veri işleme süreçleri dilerim!
0 yorum:
Yorum Gönder