SQL
Structured Query Language
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Tek Tablo Sorguları
SQL (devam)
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
WHERE kelimesi (devam):
LIKE işleci (operatörü):
LIKE işlemi İşlem sonucu
WHERE adı LIKE "a%" adı "a" harfi ile başlayan kayıtlar.
WHERE adı LIKE "%a" adı "a" harfi ile biten kayıtlar.
WHERE adı LIKE "%ab%" adı alanının içinde "ab" geçen kayıtlar.
WHERE adı LIKE "_a%" adı alanında İkinci karakteri "a" olan kayıtlar.
WHERE adı LIKE "b%a" adı alanında "b" ile başlayıp "a" ile biten kayıtlar.
WHERE adı LIKE "a__" adı alanında "a" ile başlayıp en az 3 karakter
uzunluğunda olan kayıtlar.
WHERE adı LIKE "_b%a" Adı alanında 2. karakteri "b" olan ve "a" ile biten
kayıtlar.
MS access'te "%" işareti yerine "*" ve "_" işareti yerine "?" kullanılır.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 4: "ArabaÜretici" tablosunda "uzun_adı" alanı ‘s’ harfi ile başlayan kayıtları
bulun.
SELECT üretici_id, Uzun_Adı
FROM ArabaÜretici
WHERE Uzun_Adı LIKE "s%";
Örnek 5: "ArabaÜretici" tablosunda "uzun_adı" alanı ‘n’ harfi ile biten kayıtları bulun.
SELECT üretici_id, Uzun_Adı
FROM ArabaÜretici
WHERE Uzun_Adı LIKE "%n";
Örnek 6: "ArabaAdı" tablosunda "Model" alanını içinde 'ford' geçen kayıtları bulun.
SELECT Model FROM ArabaAdı
WHERE Model LIKE "%ford%";
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 7: "MarkaÜretici" tablosunda 2. harfi 'm' olan arabaları listeleyen bir sorgu yazın.
SELECT Marka FROM MarkaÜretici
WHERE Marka LIKE "_m%";
AND, NOT ve OR bağlaçları:
WHERE kelimesi ile birlikte kullanıla mantık ifadelerde AND (ve), NOT (değil), OR (veya)
bağlaçları kullanılabilir.
Örnek 8: Silindir sayısı 6 olan ve motor hacmi 150 cid'e eşit veya küçük olan arabaların
verisini listeleyen bir sorgu yazınız.
SELECT * FROM araba_verisi
WHERE silindir_sayısı=6 AND motor_hacmi<=150;
Örnek 9: Motor hacmi 350 ci'den büyük olan arabalardan, silindir sayısı 6'dan küçük eşit
olan, veya tüketim değeri 20 mpg'den küçük olan arabaların verisini bulunuz.
SELECT * FROM araba_verisi
WHERE motor_hacmi >350 AND (silindir_sayısı<=6 OR tüketim<=20);
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
IN işleci:
IN işleci, bir alanda bulunan birden çok değeri içeren kayıtları seçmek amacıyla
kullanılır. Çoklu OR işleci gibidir.
Örnek 10: "ArabaAdı" tablosuna kayıtlı arabalardan, marka_id'si 3,14 veya 23 olan
arabaların model ve marka_id bilgilerini listeleyen bir sorgu yazınız.
SELECT Model, Marka_id
FROM ArabaAdı
WHERE Marka_id IN(3,14,23);
Eşdeğeri (OR kullanarak):
SELECT Model, Marka_id
FROM ArabaAdı
WHERE Marka_id=3 OR marka_id=14 OR marka_id=23;
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
BETWEEN İşleci:
Bir aralık belirtmek için kullanılır.
Örnek 11: Beygir gücü 150 ile 200 arasında olan arabaların verisini listeleyiniz.
SELECT * FROM araba_verisi
WHERE beygir_gücü BETWEEN 150 AND 200;
(150 ve 200 dahil)
Eş değeri:
SELECT * FROM araba_verisi
WHERE beygir_gücü>=150 AND beygir_gücü<=200;
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
DISTINCT kelimesi:
Farklı değerler alan kayıtları listelemek amacıyla kullanılır. Tekrar eden (aynı olan)
kayıtlardan (satırlardan) bir tanesi gösterilir.
Örnek 12: Araba verisi kayıtlarında farklı olan silindir sayılarını listeleyin.
SELECT DISTINCT silindir_sayısı
FROM araba_verisi;
Örnek 13: Araba verisi kayıtlarında silindir sayısı ve motor hacmi farklı olan kayıtları
listeleyin.
SELECT DISTINCT silindir_sayısı, motor_hacmi
FROM araba_verisi;
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Aritmetik işlemler:
SELECT sorgularında, toplama, çıkarma, çarpma ve bölme işlemleri yapılabilir.
Örnek 14: Araba verisi kayıtlarında bulunan arabaların silindir sayıları, ağırlıkları ve 100
kg başına beygir güçlerini listeleyen bir sorgu yazınız.
SELECT silindir_sayısı, ağırlığı, (beygir_gücü/ağırlığı)*100
FROM araba_verisi;
MS Access çıktısı:
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
SQLite çıktısı:
İşlem sonucu sıfır görünüyor. SQLite C tabanlı olduğu için C'den bildiğimiz
aritmetik ifade kuralları geçerlidir.
Tamsayı bölmesi kuralı: Bir bölme işleminde pay ve paydanın her ikisi de
tamsayı ise sonuç tamsayıdır. Pay ve paydadan bir tane kesirli sayı ise sonuç
kesirli sayıdır.
beygir_gücü ve ağırlığı alanlarının her ikisi de "integer" oldukları için sonuç
tamsayı çıkmıştır. Bölme işleminde pay, paydadan küçük olduğu için sonuç, sıfır
tam ile başlayan ondalık sayı çıkıyor. Ondalık kısmı atılınca sıfır kalıyor.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Pay veya paydadan bir tanesini kesirli sayıya çevirerek, işlem sonucu kesirliye çevrilebilir.
Örneğin:
SELECT silindir_sayısı, ağırlığı,(beygir_gücü*1.0/ağırlığı)*100
FROM araba_verisi;
Çıktı: Payı 1.0 ile
çarptık.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Aritmetik ifadeler, WHERE ölçütünde kullanılabilir.
Örnek 15: Yüz kg başına beygir gücü oranı 4,5'tan büyük olan arabaların silindir sayısı,
ağırlığı ve yüz kg başına beygir gücü bilgilerini listeleyiniz.
SELECT silindir_sayısı, ağırlığı, (beygir_gücü/ağırlığı)*100
FROM araba_verisi
WHERE (beygir_gücü/ağırlığı)*100>4.5;
Örnek 16: Silindir sayısı 6 ve daha az olan arabaların, yüz kg başına beygir gücü oranı
4,5'tan büyük olanlarını silindir sayısı, ağırlığı ve yüz kg başına beygir gücü bilgilerini
listeleyiniz.
SELECT silindir_sayısı, ağırlığı, (beygir_gücü/ağırlığı)*100
FROM araba_verisi
WHERE (beygir_gücü/ağırlığı)*100>4.5
AND silindir_sayısı<=6 ;
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Takma isim (alias):
Tablo adı, alan (kolon) adı, aritmetik ifadeler ve fonksiyonlar yeniden isimlendirilebilir.
Bu durumda SQL cümlesinde yeni isimler geçerli olur.
Örnek 17: Araba verilerinden silindir sayısı ve motor hacmini listeleyen bir sorgu
yazınız. Motor hacmi cubic inch yerine santimetre küp cinsinden yazılsın ve başlığı
"motor_hacmi" olsun. (1 cid = 16,387 cm3)
SELECT silindir_sayısı, motor_hacmi * 16.387 AS hacim
FROM araba_verisi;
Takma isim verilecek ifade isimden sonra "AS" kelimesi yeni isim yazılır. eklenerek
SQLite için "AS" kelime gerekli değildir, yazılmayabilir. Yeni ismin içinde boşluk veya
özel işaretler varsa, isim köşeli parantezler içine alınır. Örneğin, yeni isim "motor
hacmi" ise, içinde boşluk olduğu için [motor hacmi] yazılır.
SQL cümlesinde birden çok tablo adı kullanıldığında tablo isimlerini kısaltmak amacıyla
takma isim kullanılabilir. Örneğin "araba_verisi" tablo adını kısaltmak amacıyla "…
araba_verisi AS av" yazılabilir.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 18: Araba verisinde yer alan tüketim değerleri mpg (Mil Per Gallon) cinsinden
verilmiştir.
Yaklaşık olarak 1 Mil=1,6 Km. Ve 1 US Gallon= 3,78 Litre olduğuna göre, model yılı
1977 olan arabaların hızlanma ve Litre/100 km cinsinden tüketim değerlerini, "Tüketim
(Litre/100 Km)" ve Hızlanma (0-60 mph)" başlıkları altında listeleyen bir sorgu yazınız.
Çözüm:
Yaklaşık olarak Litre/100Km = 378/(1,6 x mpg) formülü ile hesaplanabilir.
SELECT 378/(1.6*tüketim) AS [Tüketim (Litre/100 Km)],
hızlanma AS [Hızlanma (0-60 mph)]
FROM araba_verisi
WHERE model_yılı=1977;
Boşluk ve ( ) gibi özel
işaretler olduğu için []
kullanılır.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Fonksiyonlar
Kullanılan VTYS'ye göre farklılık göstermesine rağmen standart SQL fonksiyonları
şunlardır.
Fonksiyon Açıklama
MAX() En büyük değer.
MIN() En küçük değer.
SUM() Toplam fonksiyonu.
AVG() Ortalama değer fonksiyonu.
COUNT(*) Sorgudaki kayıt (satır) sayısı.
Fonksiyonlarda parantez içine parametre (argüman) yazılır. Count fonksiyonu
dışında, parametre olarak alan adı kullanılır. Count fonksiyonu standart
kullanımda, tüm alan adları anlamında "*" parametresi ile kullanılır. Ancak
bazı VTYS'lerde ölçüt veya alan adı yazılır.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 19: Motor hacmi en büyük olan arabanın motor hacmi kaç cid'dir?
SELECT MAX(motor_hacmi) FROM araba_verisi;
Örnek 20: Ortalama motor hacmi kaç cid'dir?
SELECT AVG(motor_hacmi) FROM araba_verisi;
Max, Min, Avg gibi fonksiyonlara, toplamsal fonksiyonlar veya küme fonksiyonları
(aggregation functions) denir. Çalışma mantığı gereği bir tane kayda işaret ederler.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 21: Model yılı 1978 olan arabaların en küçük ve en büyük motor
hacimleri ile ortalama motor hacmini uygun başlıklar ile listeleyiniz.
SELECT MAX(motor_hacmi) AS [En Büyük],
MIN(motor_hacmi) AS [En Küçük],
AVG(motor_hacmi) AS Ortalama
FROM araba_verisi
WHERE model_yılı=1978;
Tek kelime olduğu için
köşeli paranteze gerek
yok.
Dikkat: Motor hacmi en büyük olan arabanın silindir sayısını bulmak için
yazılacak sorgu: (Örnek 22)
SELECT MAX(motor_hacmi) AS [En Büyük], silindir_sayısı
FROM araba_verisi;
Aslında hatalıdır. MAX(motor_hacmi) bir tane kayıt olmasına rağmen
silindir_sayısı birçok kayıttan oluşan bir veri kümesidir. Bu iki kayıt kümesi bir
arada gösterilemez. Ancak SQL sözdizim çözümlemesi farklı olan VTYS'lerin
bazıları bu sorguyu çalıştırırken, bazıları çalıştırmaz. Örneğin SQLite
çalıştırırken MS Access çalıştırmaz.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 23: Araba verisine kayıtlı kaç tane 6 silindirli araba vardır?
SELECT COUNT(*)
FROM araba_verisi
WHERE silindir_sayısı=6;
Count fonksiyonunun değişik kullanımları vardır. Kullanılan yazılıma göre
önemli farkları olduğu için sadece "*" parametresi ile kullanımına
değiniyorum.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
ORDER BY kelimesi
SQL cümlesi ile elde edilen satırlar kümesini sıralamak amacıyla kullanılır. Artan
(ascending, ASC) veya azalan (descending, DESC) sıralama yapılabilir. Sıralama
anahtarı alan (kolon) adı ve alan adlarıdır. Sıralama bir alan adına göre
yapılabileceği gibi birden alan adı kullanılabilir. Örneğin soyadına göre sıralama
yapılabileceği gibi, Soyadı aynı olanlar, kendi içinde ada göre sıralanması istenirse
soyad ve ad birlikte, sıralama anahtarı olur. Order by kelimesi, sorgunun sonuna
yazılır.
Örnek 24: Araba üreticilerinin listesini adına göre sıralanmış olarak veren bir sorgu
yazınız.
SELECT * FROM ArabaÜretici
ORDER BY Uzun_Adı;
Bu sorgu araba üreticilerine ait bilgileri, uzun ada göre, küçükten büyüğe (artan
sıra ASC) sıralar. Büyükten küçüğe, azalan sıralama için DESC kelimesi kullanılır.
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Örnek 25: Kıta tablosundaki kıta adlarını büyükten küçüğe (artan) sırada veren bir
sorgu yazınız.
SELECT kıta_adı FROM Kıta
ORDER BY kıta_adı DESC;
Örnek 26: Araba verisi tablosunda kayıtlı olan arabalardan 8 silindirli olanları beygir
gücüne göre küçükten büyüğe sıralayın. Beygir gücü aynı olan arabalar hızlanma
değerine göre artan sırada sıralansın.
SELECT * FROM araba_verisi
WHERE silindir_sayısı=8
ORDER BY beygir_gücü, hızlanma;
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor
Hacettepe Üniversitesi, İstatistik Bölümü
Veritabanı Yönetimi Dersi, Dr. İbrahim Zor