Bu ünitedeki sorgular, Bolum, Ogrenci, Dersler ve Dersi_Alanlar tablolarından oluşan örnek Fakülte veri tabanı üzerinde anlatılır.
Kayıt ekleme: INSERT
INSERT INTO tablo (alanlar) VALUES (değerler) biçiminde yazılır. Metin ve tarih değerleri tek tırnak içinde, sayılar tırnaksız yazılır. Alan sayısı ile değer sayısı eşit ve aynı sırada olmalıdır. IDENTITY tanımlı sütuna değer yazılmaz. Yabancı anahtar nedeniyle önce ana tablo, sonra bağlı tablolar, en son köprü tablo doldurulur.
Listeleme ve filtreleme
- SELECT: SELECT * tüm sütunları, SELECT Ad, Soyad yalnızca istenen sütunları getirir.
- ORDER BY: ASC artan (varsayılan), DESC azalan sıralar; birden fazla alana göre sıralanabilir.
- WHERE: Koşula uyan kayıtları getirir. AND ile bağlanan koşulların hepsi, OR ile bağlananların en az biri sağlanmalıdır. Birlikte kullanıldıklarında parantez sonucu değiştirir.
- LIKE: Kalıba göre arar. SQL Server'da % herhangi sayıda karakterin, _ tek bir karakterin yerini tutar. LIKE 'D%' D ile başlayanları getirir. (Access'te % yerine * kullanılır.)
- BETWEEN a AND b: Aralıktaki değerleri seçer; uç değerler dâhildir. IN (…): Listedeki değerlerden birine eşit olanları seçer.
- DISTINCT: Tekrarlayan değerleri bir kez listeler.
UPDATE ve DELETE
UPDATE tablo SET sütun = değer WHERE koşul ile veri güncellenir, DELETE FROM tablo WHERE koşul ile satır silinir. WHERE yazılmazsa işlem bütün satırlara uygulanır. Çalıştırmadan önce aynı koşulla bir SELECT yapıp etkilenecek satırlara bakmak iyi bir alışkanlıktır. Başka bir tabloda kullanılan bir kaydı silmeye çalışmak yabancı anahtar hatası verir; önce bağlı kayıtlar silinmelidir.
Hazır fonksiyonlar
COUNT() kayıt sayısını, SUM toplamı, AVG ortalamayı, MAX en büyüğü, MIN en küçüğü verir; sonuç sütununa AS ile ad verilebilir. Sütun INT ise SQL Server tam sayı bölmesi* yapar: toplamı 27, sayısı 8 olan kredilerin AVG sonucu 3,375 değil 3 olur. Ondalıklı sonuç için AVG(Kredi * 1.0) yazılır.
JOIN ile tabloları birleştirme
Normalizasyonla ayrılan tablolar raporlanırken JOIN ile birleştirilir; bağlantı genellikle birincil ve yabancı anahtar üzerinden kurulur.
- INNER JOIN: Yalnızca iki tabloda da eşleşen kayıtları getirir.
- LEFT JOIN: Soldaki tablonun tüm kayıtlarını getirir; sağda eşleşeni olmayanlar NULL olur. Öğrencisi olmayan bölümleri de listelemek için Bolum tablosu solda olmalıdır.
- RIGHT JOIN: Sağdaki tablonun tamamını getirir. FULL JOIN: İki tablonun da tamamını getirir.
Üç tablo (öğrenci, ders ve aradaki köprü tablo) iki JOIN ile bağlanır. Sorgu yazarken tablolara kısa takma adlar verilebilir (Ogrenci O gibi).
GROUP BY ve HAVING
GROUP BY satırları bir sütuna göre gruplar ve her grup için COUNT, SUM gibi özet değer hesaplar; karışık madenî paraları türlerine göre destelemek gibidir. HAVING gruplara şart koyar. WHERE COUNT(*) > 1 yazılamaz, çünkü WHERE çalıştığında henüz sayım yapılmamıştır.
SQL sorgusunun çalışma sırası: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. İlk çalışan bölüm FROM, son çalışan ORDER BY'dır.
Alt sorgu ve VIEW
Bir sorgunun sonucu başka bir sorgunun koşulunda kullanılabilir; içteki sorgu önce çalışır. Örneğin kredisi ortalamanın üzerinde olan dersler WHERE Kredi > (SELECT AVG(Kredi) FROM Dersler) ile bulunur.
VIEW (görüntü), fiziksel olarak veri saklamayan, kaydedilmiş bir sorgudan ibaret sanal tablodur; veriye bakan bir pencere gibidir. CREATE VIEW ile oluşturulur, ALTER VIEW ile değiştirilir, DROP VIEW ile silinir. Kullanıcıya yalnızca görmesi gereken veriyi gösterir, uzun JOIN sorgularını tek satırla çağırmayı sağlar ve ana tablo değişince gösterdiği veri de kendiliğinden güncellenir.