2. SQL ile Sorgulama
SELECT [DISTINCT] kolon1, kolon2
FROM tablo-adı
[WHERE koşul]
[GROUP BY kolon1, kolon2
[HAVING koşul]]
[ORDER by kolon1, kolon2];
[] içine yazılan ifadeler isteğe bağlıdır.
İtalik yazılan ifadelerin yerine kolon ve tablo
adları gelecektir.
3. DISTINCT
Tekrar eden sorgu sonuçlarını önlemek için
kullanılır.
Sorgu sonucunda elde edilen aynı satırlar
yalnızca bir kez gösterilir.
SELECT komutunun hemen ardından
yazılır.
Kullanımı isteğe bağlıdır.
4. ORDER BY
Sorgu sonuçlarını sıralamak için kullanılır.
SELECT'ten sonra belirtilen kolonlar
sıralama için kullanılabilir.
Sıralamanın yönü:
− ASC: Ascending, artan sırada
− DESC: Descending, azalan sırada
Birden fazla kolondan sıralama yapılabilir.
O zaman öncelik soldan sağa doğru
belirlenir.
5. DISTINCT ve ORDER BY
SELECT DISTINCT sehir
FROM musteri;
Sorgu sonucunda müşterilerin bulunduğu şehirlerin
listesini verir. Şehir adları tekrar etmez.
SELECT sehir, firma_adi
FROM musteri
ORDER BY sehir DESC, firma_adi ASC;
Sorgu sonuçlarını şehirden tersine, firma adından
alfabetik olarak sıralanmış şekilde getirir.
6. Sorgu sonuçlarını sayma
Bir tabloda kaç satır olduğunu saymak için
COUNT() işlevini kullanırız.
Müşteri tablosunda kaç satır var?
SELECT COUNT(*)
FROM musteri;
7. Gruplama
Örneğin müşterilerin şehirlere göre
dağılımını merak edersek, gruplama
yapmamız gerekir.
GROUP BY ifadesini kullanarak gruplama
yapılır.
SELECT sehir, COUNT(*)
FROM musteri
GROUP BY sehir;
8. Grupta Koşulu Sağlayanlar...
Gruplama yaptıktan sonra, o grup içinde bir
koşulu sağlayanları süzmek için HAVING
ifadesini kullanırız.
Örneğin 3 veya daha fazla müşterimiz olan
şehirleri sorgulamak için:
SELECT sehir, COUNT(*)
FROM musteri
GROUP BY sehir
HAVING COUNT(*) >= 3;
9. En Büyük, En Küçük, Ortalama
MAX(): En büyük değeri getirir.
MIN(): En küçük değeri getirir.
AVG(): Ortalama değeri hesaplar.
Bu işlevlerin hepsi MySQL'in
kütüphanesinde tanımlıdır ve aynı
zamanda veriyi gruplar.
10. MIN(), MAX(), AVG()
CREATE TABLE kisi (
kisi_no INT NOT NULL PRIMARY KEY,
ad VARCHAR(20) NOT NULL,
soyad VARCHAR(20) NULL,
yas INT NULL,
sehir VARCHAR(20) NULL
);
-- Varsayalım ki, INSERT ile tabloyu
doldurduk.
SELECT MAX(yas), MIN(yas), AVG(yas)
FROM kisi;
11. AUTO_INCREMENT
MySQL'e özel bir komut. ANSI SQL'in bir
parçası değil!
1'den veya belirttiğiniz başka bir sayıdan
başlayarak, her yeni kayıtta otomotik birer
birer artar.
Birincil anahtar (primary key) ile birlikte
kullanılır.
ALTER TABLE `kisi` CHANGE
`kisi_no` `kisi_no` INT(11) NOT
NULL AUTO_INCREMENT;
12. Arka planda neler oluyor?
Sorgu en iyileyici (query optimizer)
Sorgu motoru (query engine)
Depolama yönetimi (storage management)
Hareket yönetimi (transaction
management)
− Aynı anda kullanım (Concurrency)
− Asıl haline dönme (Recovery)
13. Hareketler
Veri tabanınde SQL ile işlem yaparken,
hareket (transaction) kullanabiliriz.
Bir dizi işlemin ya toplu olarak ardışık bir
şekilde yapılacağını ya da hiç
yapılmayacaklarını bize garanti eder.
Örneğin art arda 5 kayıt girerken, 2. kayıtı
girdikten sonra bir hata oluşursa, sistem
kayıt girmeye başlamadan önceki haline
geri döner.
14. Hareketlerin Özellikleri (1)
Bölünemezler (atomicity):
− Bir çok SQL komutundan oluşsalar da,
tek bir komut gibi davranırlar.
− Hareket içindeki tüm komutlar sırayla
çalıştırılır. Eğer biri başarısız olursa, o
ana kadar yapılan tüm işlemler geri alınır.
Tutarlıdırlar (consistency)
− Sınırlamalar, ardışık işlemler, tetikleyiciler
gibi veri tabanının tutarlılığını sağlayan
kurallara uyarlar.
15. Haraketlerin Özellikleri (2)
Yalıtılmışlardır (isolation)
− Yapılan bir işlem diğerleri tarafından ne
zaman görülebilir?
− Hedef: Aynı anda kullanım kontrolü
(concurrency control)
Süreklidirler (durability)
− Bir hareket kesinleştiğinde (commit),
sistem çökse, kapansa, vb. bile
kesinleşmiş olarak kalır. Diske yazılır.
16. Hareket Kontrol Komutları
TCL: Transaction Control Language
START TRANSACTION;
− Hareketi başlatır.
COMMIT;
− Hareketi kesinleştirir, işlemleri diske yazar.
ROLLBACK;
− Hareket başlangıcındaki duruma geri döner.
SET autocommit = {0 | 1}
− MySQL varsayılan olarak autocommit durumda.