veritabani yonetimi - Erciyes Üniversitesi Akademik Bilgi Sistemi

advertisement
VERİ TABANI YÖNETİMİ
Hafta 1
Veri Tabanı Nedir?
• Birbiriyle ilişkisi olan verilerin tutulduğu,
• Kullanım amacına uygun olarak düzenlenmiş
veriler topluluğunun,
• Mantıksal ve fiziksel olarak tanımlarının
bulunduğu
• Bilgi depolarıdır.
Veri Tabanı Örnekleri
• Üniversite- Öğrenci İşleri Bilgi Sistemi
• Hastane-Hasta, doktor, tedavi, araç-gereç, mali
bilgiler
• Ticari bir şirket- Müsteri, Ürün, Satış, Ödeme,
Teslimat bilgileri
• Banka-Müşteri, mevduat, kredi kartı, kredi
bilgileri
Veri tabanı
• Veri tabanı kavramı ilk olarak 1980’li yıllar
• Basit bir web uygulamasından
• uluslararası kuruluşların büyük ve karışık
verilerine kadar
• pek çok alanda veri tabanı uygulamalarına
ihtiyaç durulmaktadır.
Veri Tabanı Yönetim Sistemi Nedir?
•
•
•
•
•
•
Yeni bir veritabanı oluşturmak,
Veri tabanını düzenlemek
Kullanmak,
Geliştirmek
Bakımını yapmak için
Çeşitli karmaşık işlemlerin gerçekleştirildiği bir
yazılım sistemidir.
Veri Tabanı Yönetim Sistemlerinin
Sınıflandırılması
• Veri Modeline Göre
– Hiyerarşik
– Ağ
– İlişkisel
– Nesneye Yönelik
• Kullanıcı Sayısına Göre
– Tek kullanıcılı
– Çok kullanıcılı
Hiyerarşik veritabanları
• Veri tabanları için kullanılan ilk modeldir
• Hiyerarşik veritabanları bilgileri bir ağaç
yağısında saklarlar.
Ağ veritabanları
• Hiyerarşik veritabanları yetersiz kalınca
1960’ların sonunda verilerin ağaçların daha
gelişmiş hali olan graflar şeklinde saklandığı
yapı ortaya çıkmıştır.
İlişkisel veritabanları
• 1970’lerin başında geliştirilmiştir.
• Bu sistemde veriler tablo şeklinde saklanır.
• Tablolar arasındaki bağlantılar matematiksel
ilişkilerle gösterilir.
• Günümüzdeki hemen hemen tüm veri tabanı
programları bu yapıdadır.
İlişkisel veritabanları
Nesneye Yönelik veritabanları
• Günümüzdeki pek çok kelime işlemci ve hesap
tablosu programında kullanılan nesneler artık
veritabanlarında da kullanılmaktadır.
• Nesneye yönelik veritabanı C++ gibi nesneye
yönelik bir dille oluşturulan ve yine bu tarz bir
dille kulanılan veri tabanı anlamına gelir.
Neden veri tabanı kullanılır?
• Verilerin tutulması, saklanması ve
erişilmesinde geleneksel yaklaşım verilerin ayrı
ayrı dosyalarda gruplanması yaklaşımını
kullanmaktadır.
• Verilerin artması, verilere aynı anda erişme ve
düzenlenme ihtiyacı ile geleneksel yakaşım
yetersiz kalmıştır.
Veri Tabanı Yaklaşımının Avantajları
• Ortak verilerin tekrarını önIenmesi;
• Verilerin merkezi denetiminin ve tutarlılığının
sağlanması
• Veri payIaşımının sağlanması
• Fiziksel yapı ve erişim yöntemi
karmaşıklıklarının, çok katmanlı mimarilerle
kullanıcıdan gizlenmesi,
• Her kullanıcıya yalnız ilgilendiği verilerin, alışık
olduğu kolay, anlaşılır yapılarda sunulması
Veri Tabanı Yaklaşımının Avantajları
• Sunulan çözümleme, tasarım ve geliştirme
araçları ile uygulama yazılımı geliştirmenin
kolaylaşması.
• Veri bütünlüğünün gerekli olanakların
sağlanması,
• Güvenlik ve gizliliğin istenilen düzeyde
sağlanması
• Yedekleme, yeniden başlatma, onarma gibi
işletim sorunlarına çözüm getirilmesi
Veri Tabanı Yönetim Sistemleri
Oracle database
IBM DB/2
Adaptive Server Enterprise
Informix
Microsoft Access
Microsoft SQL Server
Microsoft Visual FoxPro
MySQL
PostgreSQL
Progress
SQLite
Teradata
CSQL
OpenLink Virtuoso
Veri Tabanı Yapısı
Veri tabanı
Tablo
Tablo
Tablo
Alan 1
1
2
3
Alan 2
Tablo
Alan3
Alan4
Tablo
Tablo
• Bir veritabanı tablolarda saklanan verilerden
oluşur.
• Tablolar verilerin satırlar ve sütunlar halinde
düzenlenmesiyle oluşan veri grubudur.
• Örneğin ders içeriği ve öğrenci bilgilerini
veritabanında saklamak için 2 tablo
oluşturulur:
– Ogrenci_bilgileri
– icerik
Tablo
• Tablo içindeki her bir bilgi kayıt,
• Sütunlar ise alan olarak isimlendirilir.
• Örneğin öğrenci bilgileri tablosunda
– Öğrenci numarası,
– adı soyadı,
– doğum tarihi,
– doğum yeri,
– e-mail adresi
bilgileri yer alacaksa
Tablo
Alan
Ogr_no
Ad_soyad
d_tarih
1
Ayşe Öztürk
01.11.1979 Konya
[email protected]
2
Sema Özdemir
24.05.1975 Ankara
[email protected]
3
Serdar Gülpınar
06.06.1983 Adana
Alan
[email protected]
4
Mehmet Efe
11.02.1978 Niğde
[email protected]
5
Zerrin Polat
22.08.1980 Antalya
[email protected]
6
Ulviye Kubalı
12.12.1984 İstanbul
[email protected]
Kayıt
d_yeri
e-mail
Veri Türleri
• Veri tabanında tutulan kayıtların yapısı
hakkında bilgi sahibi olmak için
• Alanların bazı özelliklerinin önceden
tanımlanması gerekir.
• Örneğin personel sicil numarası mutlaka tam
sayı, ad soyad harflerden oluşması gibi
Anahtar (Key)
• Anahtar bir veya birden fazla alanın bir satır
için niteleyici olarak girilmesi için zorlanan bir
çeşit zorlayıcıdır.
• 2 çeşit anahtar vardır:
– Birincil Anahtar (Primary Key)
– Yabancı Anahtar (Foreign Key)
Birincil anahtar
• Bir kayıta ulaşmayı sağlayacak anahtar veridir.
• Örneği öğrenciler arasında iki Ahmet var. Arama
yaparken istediğimiz Ahmet’i bulmak için her bir
öğrenciye özel bir numara olmalıdır.
• Örneğin öğrenci numarası
• Birden fazla alanda birlikte birincil anahtar olabilir
Yabancı anahtar
• Bir tabloya girilebilecek kayıtları başka bir
tablonun belli alanındaki verilerle
– sınırlandırmaya ve
– ilişkilendirmeye yarar.
• Örneğin öğrencilerin not verilerinin girildikleri
tablodaki her satıra öğrenci bilgileri
tablosundaki öğrenci no ile eşleşen bir değer
girilmesi gibi.
Veri tabanı Tasarlama
1. Nesneler tanımlanır
Kütüphane sistemi: kitap, üyeler, türler, ödünç
hareketleri
Veri tabanı Tasarlama
2. Her nesne için bir tablo oluşturulur.
kitap,
uyeler,
turler,
odunc_hareketleri
Veri tabanı Tasarlama
3. Her tablo için bir anahtar alan seçilir
Kitap tablosu: kitapno
Üyeler tablosu: uyeno
Veri tabanı Tasarlama
4. Nesnelerin her bir özelliği için tabloya sütun
eklenir
Kitap tablosu: kitapno, yılı, yazarı, adı, ilgili
olduğu alan
Veri tabanı Tasarlama
5. Tekrarlayan nesne özellikleri için ek tablolar
oluşturulur.
İstek tablosu
uyeno
İstek _tarihi
Kitap_adi
Kitap_yili
Kitap_yazari
ilgili _alan
Veri tabanı Tasarlama
6. Tablo ile doğrudan ilişkili olmayan alanlar
belirlenir.
Ödünç hareketleri tablosunda kitabı ödünç alan
üyenin adresi doğrudan bu tablo ile ilişkili
değildir.
Bu veri üye bilgilerinin tutulduğu uyeler
tablosunda yer almalıdır.
Veri tabanı Tasarlama
7. Tablolar arasındaki ilişkiler tanımlanmalıdır.
Tanımlanan tablodaki alanların birbiri ile ilişkisi
tanımlanır.
Örneğin uyeler tablosundaki uyeno ile
odunç_tablosundaki uyeno alanı
ilişkilendirilmelidir.
Kaynaklar
• Köseoğlu, K. (2005). Veri Tabanı Mantığı. Şefik
Matbaası. İstanbul
• Alokoç Burma, Z. (2005). Veritabanı Yönetim
Sistemleri ve SQL / PL - SQL / T – SQL. Seçkin
Yayıncılık. Ankara
Veritabanı/ Temel Kavramlar
Hafta 2
Veritabanı neden kullanılır?
• Veritabanının amacı;
– insanların ve
– organizasyonların birşeyleri takip edebilmesine
yardımcı olmaktır.
Veritabanı neden kullanılır?
• Veritabanını kullanmaksızın birşeylerin kaydını
tutmak için listeler kullanılır.
– Alışveriş listesi,
– Yapılacak işler listesi,
– Ödenen faturaların listesi
Veritabanı neden kullanılır?
• Listeler;
Müsteri
adı
Mesleği
Firma
Adres
Fiyat
Ahmet
mimar
A
Çanakkale Cad. 43/5
1000 YTL
Sema
öğretmen
B
Kayabaşı mah. A Blok 250 YTL
8/4
Serdar
mühendis
C
Gazi Mah 6/7
Zerrin
emekli
B
Kayabaşı mah. A Blok 700 YTL
8/4
Mehmet Öğretim
elemanı
B
Kayabaşı mah. A Blok 1200 YTL
8/4
Defne
Doktor
D
Gazi Mah 6/7
100 YTL
Elif
avukat
A
Çanakkale Cad. 43/5
150 YTL
350 YTL
Veritabanı neden kullanılır?
• Listelerle ilgili problemler;
– Örneğin B firmasının adresi değişti
– 3 satırdaki adres bilgisi de değişmeli
– Eksik kalırsa bilgi tutarsızlığı oluşur
– Hem zaman kaybına hem de hataya neden olabilir.
Veritabanı neden kullanılır?
• Listelerle ilgili problemler;
– Örneğin A firması artık sizin şirketinizle çalışmıyor,
– Listeden firmayla ilgili kaydı silerseniz ürün satışı
yapılan müşteri bilgisini ve firma adresi gibi
bilgileri kaybedersiniz.
Veritabanı neden kullanılır?
• Paylaşılan verilerle ilgili problemler;
– Örneğin şirketinizin farklı departmanlarının firma
bilgisini görüntülemesi gerekiyor;
• İletişim departmanı: firma, adresi
• Pazarlama departmanı: firma, fiyat
• Müşteri hizmetleri: müşteri adı, mesleği, firma
Veritabanı neden kullanılır?
• Paylaşılan verilerle ilgili problemler;
– Bu bilgilerin tamamının tüm departmanlarla
paylaşılması ise farklı nedenlerden dolayı
sakıncalıdır
• Güvenlik
• Müşteri gizliliği
• vb.
Veritabanı neden kullanılır?
• Listeler oluşturmanın en büyük sakıncası farklı
temalarla ilgili bilgileri bir arada
bulundurmasıyla ilgilidir.
• Örneğin bir yazılı doküman oluşturulurken
farklı temalar için farklı paragraflar oluşturulur,
Veritabanı neden kullanılır?
• Benzer şekilde farklı temalardaki bilgilerin
farklı tablolara yerleştirilmesi süreci
normalizasyon olarak adlandırılır.
• Biraz önceki liste için;
– Müşteriler
– Çalışılan firmalar
– Satış bilgileri gibi
Veritabanı neden kullanılır?
– Müşteriler
Müsteri adı
Mesleği
Ahmet
mimar
Sema
öğretmen
Serdar
mühendis
Zerrin
emekli
Mehmet
Öğretim
elemanı
Defne
Doktor
Elif
avukat
Veritabanı neden kullanılır?
– Çalışılan firmalar
Firma
Adres
A
Çanakkale Cad. 43/5
B
Kayabaşı mah. A Blok
8/4
C
Gazi Mah 6/7
D
Gazi Mah 6/7
Veritabanı neden kullanılır?
– Satış bilgileri
Fiyat
1000 YTL
250 YTL
350 YTL
700 YTL
1200 YTL
100 YTL
150 YTL
Veritabanı neden kullanılır?
• Farklı temalar farklı tablolara yerleştirildiğinde,
– Değişen bilgiler,
– Silinen bilgiler ve
– Paylaşılan bilgilerle ilgili problemlerin çoğu
ortadan kalkar.
Veritabanı neden kullanılır?
• Farklı temalar farklı tablolarda yer aldığında;
– Hangi müşteri hangi firmadan ürünü almış gibi
soruları cevaplamak için ilişkilerin kurulması
gereklidir.
Veritabanı neden kullanılır?
• İlişkiler
Müşteri
No
Firma
No
Fiyat
1
1
1000 YTL
2
2
250 YTL
Firma
No
Firma
1
A
Çanakkale Cad.
43/5
700 YTL
2
B
Kayabaşı mah. A
Blok 8/4
2
1200 YTL
3
C
Gazi Mah 6/7
6
4
100 YTL
4
D
Gazi Mah 6/7
7
1
150 YTL
Müşteri
No
Müsteri
adı
Mesleği
1
Ahmet
mimar
3
3
350 YTL
2
Sema
öğretmen
4
2
3
Serdar
mühendis
5
4
Zerrin
emekli
5
Mehmet
Öğretim
elemanı
6
Defne
Doktor
7
Elif
avukat
Adres
Veritabanı neden kullanılır?
• İlişkiler
Müşteri
No
Firma
No
Fiyat
1
1
1000 YTL
2
2
250 YTL
Firma
No
Firma
1
A
Çanakkale Cad.
43/5
700 YTL
2
B
Kayabaşı mah. A
Blok 8/4
2
1200 YTL
3
C
Gazi Mah 6/7
6
4
100 YTL
4
D
Gazi Mah 6/7
7
1
150 YTL
Müşteri
No
Müsteri
adı
Mesleği
1
Ahmet
mimar
3
3
350 YTL
2
Sema
öğretmen
4
2
3
Serdar
mühendis
5
4
Zerrin
emekli
5
Mehmet
Öğretim
elemanı
6
Defne
Doktor
7
Elif
avukat
Adres
Veritabanı neden kullanılır?
• Tabloları birleştirmek
– Peki baştaki bütüncül listeyi elde etmek için ne
yapılır?
– SQL dilinden faydalanılır.
Veritabanı yönetim sistemi nedir?
• Veri tabanı sisteminin bileşenleri;
Veritabanı
Uygulaması
Kullanıcı
Veritabanı
Yönetim
Sistemi
Veritabanı
Veritabanı yönetim sistemi nedir?
• Kullanıcı:
– İşlerini gerçekleştirmek için veritabanını kullanır,
– Yeni veri ekler,
– Mevcut verileri değiştir,
– Verileri siler,
– Formlar, sorgular ya da raporlar yoluyla verileri
okur
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
Veri tabanı yönetim sistemi ile kullanıcı arasında
iletişimi sağlayan bir ya da birden fazla bilgisayar
programıdır.
Formlar , sorgular ve raporlar oluşturur,
Kullanıcıdan verileri alır ya da kullanıcıya verileri
gönderir,
Kullanıcı davranışlarını veri tabanı yönetim
sisteminden veri yönetim etkinliği için isteklere
dönüştürür.
Veritabanı yönetim sistemi nedir?
• Veri Tabanı Yönetim Sistemi:
– Uygulamadan gelen istekleri alarak bunları veri
tabanı dosyaları üzerinde verileri okuyarak ya da
veri yazarak gerçekleştirir,
– SQL cümlelerini okur ve bu ifadeleri bilgisayarın
işletim sisteminin veritabanı dosyaları üzerinde
verileri okuyacağı ya da yazacağı yönergelere
dönüştürür.
Veritabanı yönetim sistemi nedir?
• İşlevler
– Veri Tabanı Uygulaması
– Veri Tabanı Yönetim Sistemi
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
1.
2.
3.
4.
5.
Formlar oluşturur ve formları işler,
Sorgular oluşturur ve sorgular iletilir,
Raporlar oluşturur ve raporları işletir,
Uygulama mantığını gerçekleştirir,
Uygulamayı kontrol eder.
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
1. Formlar oluşturur ve formları işler,
▪ Örneğin web temelli bir uygulamada;
▪ Kullanıcının bilgisayarında görüntülenecek HTML ve diğer
web biçimlerini oluşturur,
▪ Kullanıcı formları doldurarak verileri geri yolladığında
VTYS’ne gerekli düzenlemelerle ilgili istekleri gönderir.
▪ Süreçte bir hata meydana gelirse, hatalara ulaşır ve
kullanıcıya gerekli mesajı gösterir ve/veya gerekli
işlemleri gerçekleştirir.
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
2. Sorgular oluşturur ve sorgular iletilir,
▪
▪
▪
VTYS’ne iletilecek sorguyu üretir,
Bu istekler genellikle SQLile ifade edilir,
Sorgu işletilince, sonuçlar biçimlendirilir ve kullanıcıya
iletilir,
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
3. Raporlar oluşturur ve raporları işletir,
▪
VTYS’den sorgular aracılığıyla veri istenir ve sorgu
sonuçları raporlar biçiminde sunulur,
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
4. Uygulama mantığını gerçekleştirir,
▪
▪
▪
Örneğin kullanıcı 10 birimlik bir istekte bulundu ancak
stokta 8 birim bulundu,
Ne olacağı programın mantığına bağlıdır,
Uygun mantığın gerçekleştirilmesi uygulama
programının görevidir.
Veritabanı yönetim sistemi nedir?
Veri Tabanı Uygulaması:
5. Uygulamayı kontrol eder
Veritabanı yönetim sistemi nedir?
Veri Tabanı Yönetim Sistemi:
1.
2.
3.
4.
Veritabanını oluşturmak, tabloları oluşturmak,
Veritabanından veri okumak ve verileri güncellemek,
Veri değerlerine ilişkin sınırlamaları gerçekleştirmek,
Bir kullanıcının işleminin diğer kullanıcıyı
engellemesini önlemek,
5. Kullanıcıların yetkileri ölçüsünde etkinlikte
bulunmalarına izin vermek,
6. Veri tabanındaki verileri yedekleme.
Veritabanı
Veri Tabanı:
İlişkili kayıtlardan oluşan veri depolarıdır.
▪
▪
▪
▪
▪
Üst veri (metadata)
indeks
saklı yordam (stored procedure)
tetikleyici (trigger)
veri tutarlılığı (referential integrity)
Veritabanı
Veri tabanının yapısı hakkındaki verilere metadata
adı verilir.
▪ Tablo isimleri
▪ Sütun isimleri
▪ Tablo ve sütunların özellikleri vb.
Veritabanı
Metadata örneği:
Tablo
no
Tablo adı
Sütun sayısı
Satır sayısı
1
Müşteriler
3
7
2
Firmalar
3
4
3
Satışlar
3
7
Sütun
no
Sütun
adı
Veri türü
Uzunluğu
Tablo
no
1
id
int
4
1
2
Mus_adi
char
50
1
3
meslegi
char
50
1
Veritabanı
Bazı veritabanları uygulama üst verisi içerir.
Bu üst veriler, formlar ve raporlar gibi uygulama
bileşenlerini tanımlar.
VTYS’inin veritabanının yapısını göstermek için
çeşitli araçları vardır.
Veritabanı
Aynı zamanda veritabanlarında veritabanının
performansını artırmak için kullanılan indeksler
vardır.
Indeksler hangi kayıtların hangi tablolarda
bulunduğunu gösteren kitapların başındakine
benzer bir mantığı olan araçlardır.
Veritabanı
Saklı yordamlar derlenmiş sql cümlecikleridir.
Birer veritabanı nesnesi oldukları için, doğrudan
veritabanı yöneticisi olan programda yer alırlar.
Örneğin bir tablodaki verilerin yedeğini alan ya da
1 yıldan fazla zaman geçen verilerin yedeğini
kaldıran saklı yordamlar oluşturulabilir.
Veritabanı
Saklı yordamlar bir tabloya bağlı olmaksızın
veritabanı içinde tanımlanan belirli bir işi yapmaya
yönelik kodlardır.
Bu kodlar yazıldığı zaman aynı zamanda
derlendikleri için optimize edilmiştir ve en hızlı
şekilde çalışmaya hazır kodlardır.
Veritabanı
Bir tablo üzerinde belirli bir olaya bağlı olarak
tetiklenip çalışan SQL kodlarına tetikleyici (trigger)
denir.
Tablo üzerindeki triggerları tetikleyen olaylar
insert, update, delete olaylarıdır.
Veritabanı
– Örneğin stok hareketleri sonucunda stok
miktarlarının azalması veya artması işlemlerinin
yapılması tipik bir trigger kullanım yeridir.
Veritabanı
– Hem tetikleyici hem de saklı yordamlar veritabanı
üzerindeki kodlar olmaları sebebi ile veritabanını
sunan sunucu üzerinde çalışırlar.
– İstemci&Sunucu mimarinin güçlü
bileşenlerindendir.
– İstemci&Sunucu mimarideki SQL veritabanları
tarafından desteklenmektedir.
• Oracle, Sybase, MS SQL, Interbase, FireBird vb.
Veritabanı
– Verilerin bulunduğu sunucu üzerinde
çalışmalarından dolayı veriler istemci ile sunucu
arasında gidip gelmezler ve de sunucudan istemci
tarafına minimum veri çekilmiş olur.
Veritabanı
– İlişkisel bir veritabanında
• PERSONEL tablosundaki kişinin bölüm bilgisinin
BOLUM_NO değişkeninde tutulduğunu ve
• bölümün adının da BOLUM tablosunda bulunduğunu
düşünelim.
Veritabanı
– Eğer 1 numaralı bolum herhangi bir personelde
kullanıldıysa BOLUM tablosundan BOLUM_NO
değeri 1 olan kaydın kesinlikle silinememesi
gerekmektedir.
– Bu tür kontrollerin yapılarak veri bütünlüğünün
korunmasına veri tutarlılığı (referential integrity)
denir.
Veritabanı
– Veri tutarlılığını sağlamak amacı ile trigger
kullanımı çok tercih edilir.
Veri Tabanı Sistemleri
• 3 tür veri tabanı sistemi olabilir:
– Tek bir kişi tarafından kullanılan,
– Küçük çaplı işletmeler tarafından kullanılan,
– Büyük uluslar arası şirketler tarafından kullanılan
Veri Tabanı Sistemleri
• Tek bir kişi tarafından kullanılan,
– Boyacı
– Kimlerin evi, ne zaman, ne kadar boyandı?
– Boyamada nereler boyandı, hangi renk ve stiller
kullanıldı?
– Kimler başkalarına referans oldu? Referansla gelen
kimler?
Veri Tabanı Sistemleri
• Tek bir kişi tarafından kullanılan,
Veri Tabanı Sistemleri
• Tek bir kişi tarafından kullanılan,
Veri Tabanı Sistemleri
• Tek bir kişi tarafından kullanılan,
Veri Tabanı Sistemleri
• Küçük çaplı işletmeler tarafından kullanılan,
– Kiralanan müzik enstrümanları neler?Kaça
kiralandı?
– En çok hangi müzik enstrümanları kiralanıyor?
– Kiralamayı kim yaptı? (çok kullanıcılı veritabanı)
– Aynı anda aynı enstrüman iki farklı satıcı
tarafından seçilememeli!
Veri Tabanı Sistemleri
• Küçük çaplı işletmeler tarafından kullanılan,
Veri Tabanı Sistemleri
• Küçük çaplı işletmeler tarafından kullanılan,
Veri Tabanı Sistemleri
• Küçük çaplı işletmeler tarafından kullanılan,
Veri Tabanı Sistemleri
• Küçük çaplı işletmeler tarafından kullanılan,
Veri Tabanı Sistemleri
Büyük uluslar arası şirketler tarafından kullanılan,
Sürücü lisansı veren ve otomatik kayıt bürosu
52 farklı merkezi var
Kişilerin kazaları, trafik ihlalleri tutuluyor,
Lisans yenilenebilir mi, herhangi bir sınırlama var mı?
100’lerce kişi tarafından veritabanı kullanılıyor
▪ Lisans ve kayıt personeli
▪ Kanun yaptırımlarını takip edenler
▪ Maliye departmanı personeli
Haftada 7 gün 24 saat ulaşılabilmeli
Veri Tabanı Sistemleri
• Büyük uluslar arası şirketler tarafından
kullanılan,
Sql Server ile Çalışma
Hafta 3
SQL Server Authentication ile
veritabanına bağlanma
• Server Type ile
veritabanı dışında,
analiz, raporlama ve
entegrasyon
servislerine de
bağlanabilirsiniz.
• Başka bir bilgisayardaki
veritabanı motoruna
veya servislere
bağlanmak için Server
Name seçeneği
kullanılır.
• SQL Server Management Studio, Visual Studio ile benzer bir
arayüz sunmaktadır. Sol taraftaki Nesne Gezgini penceresi ile
veritabanı nesnelerine erişilebilir ve değişiklik yapılabilir.
• "Databases" altında "System Databases" ve onun altında ise 4
tane sistem veritabanı yer alır. Bu veritabanları üzerinde de tablo
yaratılabilse de genellikle bu tercih edilmez.
• Kendi tablolarımızı saklamak üzere yeni bir veritabanı oluşturmak
için "Databases" üzerine sağ tıklanıp açılan menüden "New
Database" seçilir.
NOT: Bu menüdeki "Attach" daha
önce yaratılmış olan bir SQL Server
veritabanına bağlanmak için,
"Restore Database" ise yedeği
(backup) alınmış veritabanını geri
getirmek için kullanılır.
Veritabanının Genel Özellikleri
Veritabanı ismi girildikten
sonra bu veritabanı için bir
sahip belirlenmek istenirse
"owner" kısmına yazılabilir.
• 2 tane veritabanı dosyası bu listeye varsayılan
olarak eklenir: 5 MB büyüklüğünde ve "ROWS
Data" türünde olan ilk dosya tabloları, 1 MB
büyüklüğünde ve "LOG" türünde olan ikincisi
ise günlük bilgilerini saklayacaktır.
• İstenirse aşağıdaki "Add" düğmesi ile yeni
dosyalar eklenebilir. Dosyaların başlangıç
boyutu ise liste üzerinden değiştirilebilir.
Seçenekler
Seçenekler (Options) altında veritabanının dil
ayarlarını, önceki sürümler ile uyumluluğunu,
otomatik olarak yapılması gereken işlemleri,
vs. ayarlayabileceğiniz seçenekler yer alır.
Son kullanıcı da çıkınca otomatik kapansın mı?
Veritabanından büyük miktarda veri
silindiğinde dosya boyutu küçülsün mü?
(başlangıç boyutunun altına inemez)
Ayrıntılı bilgi için: http://msdn.microsoft.com/enus/library/ms188124.aspx
Bir tablo yaratmak için seçilen veritabanı altında "Tables" üzerine
sağ tıklanarak açılan menüden "New" + "Table" seçilirse tablo
tasarımı (table design) görünümüne geçilir (bak. sonraki slayt)
Tablo Tasarımı Görünümü
ve Birincil Anahtar Belirleme
• Tablonun alan isimleri ve veri tiplerinin belirlendiği
tasarım görünümünde birincil anahtar oluşturmak için,
ilgili alan veya alanlar seçilip üzerlerine sağ tıklanarak,
çıkan menüden (bu menü tasarım görünümüne
geçildiğinde beliren Table Designer menüsünün
aynısıdır) "Set Primary Key" seçilebilir.
• Kaydetme ikonu tıklanıp (veya Ctrl+S) açılan pencereye
tablonun ismi (Öğrenciler) yazılarak kaydedilir.
• Tabloyu kaydettikten sonra bir değişiklik yapmak
istediğinizde aşağıdaki uyarı mesajı ile karşılaşabilirsiniz:
• Tools / Options menüsü, Designers altında yer alan
aşağıdaki seçeneğin kaldırılması ile bu durum düzeltilebilir:
Dış anahtar belirleme
• Dış anahtar belirlemek için "Table Designer" altındaki
"Relationships" menüsü kullanılabilir.
Notlar ve Dersler tabloları da oluşturulduktan sonra, Notlar tablosunun tasarım
görünümünde iken "Relationships" tıklanırsa aşağıdaki pencere gelir:
Add tıklanarak dış anahtar ilişkisi
oluşturulur ve bağlanacağı tabloyu
belirlemek için" Tables And
Columns Sepecification" kullanılır.
Dış anahtar belirleme (devam)
• İlişkinin PK tarafı için ilgili tablo (Dersler) ve o tablodaki ilgili
sütun (DersKodu) seçimleri yapılarak, FK tarafı için de Notlar
tablosundan bağlantılı olacak sütun (Ders) seçilir:
Daha önce FK_Notlar_Notlar
olan ilişki ismi Dersler
tablosu seçilince
FK_Notlar_Dersler olarak
değişir (Öğrenciler seçilirse
FK_Notlar_Öğrenciler olur)
Bilgi tutarlılığını sağlamak için:
• Access'teki Bilgi Tutarlılığına Zorla altında yer alan İlişkili Alanları Art
Arda Sil/Güncelleştir seçeneklerini kullanarak yaptığımız işlemin
benzeri INSERT And UPDATE Specification seçeneğinin Delete Rule ve
Update Rule alanları Cascade seçilerek yapılabilir.
PK tarafında silinen bir kaydın FK
tarafındaki ilişkili olduğu kayıtlar
silinmeyip, "Set Null" ile ilgili alan
boş bırakılabilir veya "Set Default"
ile varsayılan değer ile doldurulabilir.
Nesne Gezginini Kullanma
• Nesne gezgini üzerinde her tablonun altında
Columns, Keys, Constraints, Triggers, Indexes ve
Statistics adında düğümler bulunur.
• Bir tablonun üzerine sağ tıklayıp açılan menüden
"Design" seçilirse (veya herhangi bir sütun
isminin üzerine sağ tıklayıp "New Column" veya
"Modify" seçilirse) tasarım görünümüne geçilir.
• Keys düğümüne sağ tıklayıp açılan menüden
"New Foreign Key" seçilirse önce tasarım
görünümü açılır, sonra önceki slaytlarda
gördüğümüz "Foreign Key Realationships"
penceresi gelir.
• Constraints sağ tıklanıp "New Constraint"
seçilirse "Check Constraints" adında bir pencere
gelir (bak sonraki slayt)
• Triggers, Indexes ve Statistics hakkında sonraki
derslerde bilgi verilecektir.
Check Constraint
• Check constraints penceresinin Expression alanına
gireceğimiz koşul ile bir alana girilecek veriye
sınırlama (constraint) getirebiliriz.
NOT: Aslında PK, FK ve
Not Null da sınırlamadır.
Haftaya değineceğiz.
Sorgu Penceresi
• Araç çubuğundaki "New Query" simgesi (veya bir
veritabanı sağ tıklanıp menüden "New Query") ile
sorgu penceresi açılabilir.
Eğer DML ifadeleri yazıldı ise Execute tıklandıktan sonra her
ifade için etkilenen satır sayısı "Messages" sekmesinde belirtilir.
Eğer bir sorgu yazıldı ise Execute tıklandıktan sonra "Results"
sekmesinde sorgunun sonucu gösterilir.
Select Top 1000 Rows
Edit Top 200 Rows
• Bir tablonun üzerine sağ tıklayıp
"Select Top 1000 Rows" seçilirse,
yanda görüldüğü gibi bir sorgu
otomatik olarak yazılıp çalıştırılır.
• Bir tablonun üzerine sağ tıklayıp
"Edit Top 200 Rows" seçilirse,
aşağıda görüldüğü gibi veri girişi
için ekleme, silme ve değiştirme
yapılabilen bir tablo gelir.
Diagram
• Diagram nesneleri Access'teki İlişkiler görünümü gibi
tablolar arası ilişkilerin gösterildiği bir çizelgedir.
• Dış anahtar ilişkileri Access'te olduğu gibi buradaki
tablolar arasında sürükle bırak yöntemi ile yapılabilir.
Sql Server Veri Tipleri
•
•
•
•
•
•
•
•
•
•
•
Tam Sayı ve Kesirli Sayı Veri Tipleri;
BigInt - 8 bayt yer kaplar ve en geniş aralığı olan sayısal veri tipidir.
Int - 4 bayt yer kaplar ve en çok kullanılan sayısal veri tipidir.
Smallint - 2 bayt yer kaplar.
Tinyint - 0-255 arasında 1 bayt yer kaplar.
Bit - 0 veya 1 değerini alır True yada False olarak kullanılır.
Decimal - Ondalık veya tam sayıları tutar. Genelde ondalık sayı olduğunda kullanılır.
Money - Bellekte 8 byte yer kaplar ve parasal değerleri tutmak için kullanılır.
SmallMoney - 4 bayt yer kaplar ve küçük miktardaki parasal değerleri tutmak için
kullanılır.
Real - Hassas değerli ondalıklı sayıları tutar. Boyutu en büyük olan kesirli sayı tipidir.
Float - Bu veri tipi de real gibi hassas ondalıklı veri tiplerini tutar. Ancak boyutu
Real’in yarısı kadardır.
Sql Server Veri Tipleri
•
•
•
•
•
•
•
Tarih Veri Tipleri;
DateTime - 1 Ocak 1753 ile 31 Aralık 9999 tarihleri arasında veri alır. Bellekte 8
byte yer kaplar.
DateTime2 - 1 Ocak 0001 ile 31 Aralık 9999 tarihleri arasında veri alır. Bellekte 8
byte yer kaplar ve 100 nano saniye hassasiyetinde tarih tutabilir.
SmallDateTime - 1 Ocak 1900 ile 6 Haziran 2079 tarihleri arasındaki verileri alır.
Date - 1 Ocak 0001 ile 31 Aralık 9999 tarihleri arasında veri alır. Ancak sadece tarih
verisini tutar.
Time - 100 nano saniye hassasiyetinde saat verilerini tutar.
DateTimeOffset - Normal datetime aralığında veri alır ek olarak bölgeye bağlı olan
saat farkını da tutar.
Sql Server Veri Tipleri
• Unicode Desteği Olmayan Karakter Veri Tipleri ;
• Char - En fazla 8000 karakter alabilen ve girilecek verinin uzunluğu belli
olduğunda kullanılır. Unicode desteği yoktur.
• VarChar - Bu da char gibi en fazla 8000 karakter alabilen ancak girilecek
verinin uzunluğu belli olmadığında kullanılır. Unicode desteği yoktur.
• VarChar(Max) - En fazla 2 GB boyutuna kadar karakter verisi alır. (Max)
bölümüne sayısal değer yazarsak VarChar veri tipinin maksimum uzunluğu
o sayı kadar olur. Unicode desteği yoktur.
• Text - En fazla 2,147,483,647 karakter uzunluğunda değer alabilen veri
türüdür. Unicode desteği yoktur.
Sql Server Veri Tipleri
•
•
•
•
•
Unicode Desteği Olan Karakter Veri Tipleri ;Unicode nedir ? Bilgi İçin
(http://www.unicode.org/standard/translations/turkish.html)
NChar - En fazla 4000 karakter tutan ve Unicode desteği olan veri türüdür ve
gireceğimiz karakter sayısı belli ise bu kullanılır.
NVarChar - En fazla 4000 karakter alır ve Unicode desteği olan veri türüdür ayrıca
gireceğimiz karakter sayısı belli olmadığında kullanılır.
NVarChar(Max) - En fazla 2 GB boyutuna kadar karakter verisi alır. (Max) bölümüne
sayısal değer yazarsak VarChar veri tipinin maksimum uzunluğu o sayı kadar olur.
Unicode desteği vardır.
NText - En fazla 2,147,483,647 karakter uzunluğunda değer alabilen veri türüdür.
Unicode desteği vardır.
Sql Server Veri Tipleri
•
•
•
•
•
•
•
•
•
•
•
•
Binary Veri Tipleri ;Sql’de dosyaları saklamak için kullanılır.Türleri şunlardır;
Binary - En fazla 8000 bytelık veri saklar.
VarBinary - En fazla 8000 bytelık veri saklar ve girilecek byte miktarı değişken olduğunda
kullanılır.
VarBinary(MAX) - En fazla 2 gb boyutunda veri alabilir. (MAX) değerine 2 GB’dan az olmak
şartı ile boyut belirtebiliriz.
Image - Grafik nesneleri için kullanılmaktadır.
Diğer Veri Tipi Çeşitleri ;
Sql_Variant - Girilecek olan verinin tipi belli olmadığında kullanılır. Kısacası tüm türleri
kapsayan genel veri türüdür.
XML - Xml verilerini saklamak için kullandığımız veri türüdür.
Hierarchyid - Bir hiyerarşi içerisinde olan yapıları saklamak için kullanılılır.
Geometry - X ve Y eksenindeki koordinat bilgilerini tutar.
Genel hali ile kullandığımız veri tipleri bunlardır. Veri tiplerini gösterdikten sonra tablo
oluştururken kullandığımız özel ifadelere değinelim.
Sql Server Veri Tipleri
•
•
•
•
•
•
Özel İfadeler;
Primary key; Oluşturulacak olan sütunun içindeki verinin o sütun içerisinde
benzersiz olmasını sağlar.
Identity; Belirli bir sayıdan başlayıp, belirlediğimiz aralığa göre artan veya azalan bir
şekilde sayısal değer üretir. Genellikle primary key ile birlikte kullanıp kimlik
numarası (id) oluşturulur.
Default; Kullanıcı tarafından sütunda veri belirtilmeden SQL Server tarafından
otomatik olarak verilen değerlerdir. Örneğin eleman tablosunda şirket sütunu
olsun ve herkes aynı şirkette olduğundan bu bilgi default ile otomatik verilebilir.
NULL / NOT NULL ; Null kavramı boş anlamına gelmektedir. Eğer bir sütunda null
olarak belirlemişsek içeriğine bir şey yazmadan dahi tablomuza kayıt ekleyebiliriz.
Ancak Not Null olarak belirlersek içeriğine aldığı veri tipinden kayıt girilmesi
zorunludur. Yoksa verileri kaydetmez ve hata alırız.
Unique ; Primary key mantığındadır. Bir tablodaki sütuna sadece tekil bilgi
girilmesini sağlar. Primary key ve Unique birlikte kullanılmaz.
Sql (Structured Query Language)
Hafta 5_6
Neden SQL?
• SQL yüksek seviyeli bir dildir.
– İngilizce bilen herkes bu dili kolayca öğrenebilir.
Programlama dillerine göre öğrenilmesi çok daha
kolaydır. Çünkü programlama dillerindeki gibi
işlemin “nasıl yapılacağı” değil, işlemde “ne
yapılacağı” yazılır.
DML, DDL ve DCL
• Sorgulama için sadece SELECT komutu kullanılsa
da; SQL içinde başka komutlar da yer alır. Bu
komutlar işlevlerine göre sınıflandırılmış ve başka
alt-diller oluşturulmuştur:
– DML (Data Manipulation Language): Tablolara veri
girme, var olan veriyi güncelleme ve veri silme
işlemleri için kullanılan komutları içerir.
– DDL (Data Definition Language): Tablo, Kullanıcı gibi
nesneleri yaratmak için kullanılan komutları içerir.
– DCL (Data Control Language): Kullanıcılara çeşitli
yetkiler verme, yetkileri geri alma gibi işlemleri
gerçekleştirmek için kullanılan komutları içerir.
SQL Data Definition Language
(DDL)
Veritabanı nesneleri yaratmak, güncellemek ve silmek için
kullanılır.
En çok kullanılanlar:
•CREATE TABLE – yeni bir tablo yaratır.
•ALTER TABLE – Tabloda güncelleme yapar.
•DROP TABLE – Tabloyu siler.
Create database
Create table
Create table
Create Table Örnek
Alter ve Drop
Tabloya alan ekleme, silme, değiştirme işlemleri için kullanılır.
Kayıt ekleme
SELECT ifadesi
SELECT sütun [yada sütunlar]
FROM tablo [yada tablolar]
WHERE seçim kriteri
• SELECT ifadesinden sonra * kullanılırsa tüm
nitelikler (sütunlar) seçilir.
• Kriter verilmezse “WHERE” sözcüğü de yazılmaz.
Bu durumda tüm kayıtlar (satırlar) seçilir.
• Personel tablosundaki tüm kayıtların tüm
nitelikleri aşağıdaki SQL cümlesi ile gösterilir:
SELECT * FROM PERSONEL
WHERE ile kriter verme
• Eğer tüm kayıtların değil de sadece belirli
kayıtların görüntülenmesi istenirse WHERE ile
kriter verilir.
• Aşağıdaki SQL cümlesi maaşı 1800 TL’nin
üzerinde olan personelin adı ve soyadını
ekranda gösterir:
SELECT AD, SOYAD
FROM PERSONEL
WHERE MAAS > 1800
Kriterlerde kullanılan işleçler
• Programlama dillerinde kullanılan aritmetiksel
karşılaştırma işleçleri (<, <=, >, >=, =, <>) ve
mantıksal işleçler (AND, OR, NOT) SQL dilinde
de kriter verirken kullanılır.
• Aşağıdaki SQL cümlesi görevi müdür olan ve
maaşı 5000 TL’den fazla olan personeli
gösterir:
SELECT * FROM PERSONEL
WHERE GOREV = ‘Müdür’ AND MAAS > 5000
Programlama dillerinde olduğu gibi SQL’de de karakter türü veriler ile işlem yapılacaksa
tek tırnak yada çift tırnak kullanılır.
Karakter türü verilerin karşılaştırılması
• Karakter türü veriler ile de büyüklük-küçüklük
kıyaslamaları yapılabilir.
• Aşağıdaki SQL cümlesi adı N-Z arasında bir harf ile
başlayan personeli gösterir:
SELECT * FROM PERSONEL WHERE AD > ‘N’
• Aşağıdaki SQL cümlesi adı E harfi ile başlayan
personeli gösterir:
SELECT * FROM PERSONEL
WHERE AD > ‘E’ AND AD < ‘F’
LIKE işleci
• Belirli bir karakter katarını barındıran verileri
aramak için LIKE kullanılır.
• Önceki slaytta yer alan, adı E harfi ile başlayan
personeli gösteren sorgu LIKE ile de yazılabilir:
SELECT * FROM PERSONEL WHERE AD LIKE ‘E%’
• Adresler şehir adı ile bitiyorsa, Edirne ilinde
ikamet eden öğrencileri görmek için aşağıdaki
sorgu kullanılabilir:
SELECT * FROM ÖĞRENCİLER
WHERE ADRES LIKE ‘%Edirne’
BETWEEN … AND … işleci
• İki değer arasında karşılaştırma yapmak için Between …
And … işleci (… ile … arasında) kullanılabilir.
• Aşağıdaki SQL cümlesi maaşı 1000 ile 2000 TL arasında
olan işçileri görüntüler:
SELECT * FROM PERSONEL
WHERE MAAS BETWEEN 1000 AND 2000
AND GOREVI = ‘İşçi’
• Bu sorgu Between işleci kullanılmadan da yazılabilirdi:
SELECT * FROM PERSONEL
WHERE MAAS >= 1000 AND MAAS <= 2000
AND GOREVI = ‘İşçi’
IN işleci
• Bir listedeki değerler ile karşılaştırma yapmak
için IN işleci kullanılır.
• 1000 ile 2000 TL arasında değil de sadece
1000, 1500 ve 2000 TL maaş alanları
listelemek için aşağıdaki SQL cümlesi
kullanılabilir:
SELECT * FROM PERSONEL WHERE MAAS IN
(1000, 1500, 2000)
Tarihsel türü verilerin karşılaştırılması
• Belirli bir tarihe eşit olan veya o tarihten
büyük yada küçük olan verilerin aranması
istenirse, tarih ay/gün/yıl biçiminde ve ‘ ’
karakterleri arasında yazılmalıdır:
SELECT * FROM OGRENCILER
WHERE DOGUM_TARIHI BETWEEN
‘1/1/1989’ AND ‘12/31/1989’
DISTINCT ifadesi
• Eğer tablonun bir alanında yer alan veriler
içinde aynı olan veriler varsa SELECT
ifadesinden sonra kullanılan DISTINCT ile bu
tekrar eden verilerin sadece 1 defa
görüntülenmesi sağlanabilir.
• Aşağıdaki SQL cümlesi farklı kayıtlardaki aynı
adları her kayıt için tekrar göstermek yerine 1
defa gösterilmesini sağlar:
SELECT DISTINCT AD FROM PERSONEL
AS ifadesi ve sütun içeriklerini
birleştirme
• Sütunların kendi ismi yerine AS ifadesi ile takma
isim almaları sağlanabilir.
• İki yada daha fazla sayıda sütunun içeriğini
birleştirmek için sütun isimleri arasında Sql Server
ve Access’te &, Oracle’da ise || işleçleri kullanılır.
• Aşağıdaki SQL cümlesi AD ve SOYAD sütunlarının
içeriklerini araya bir boşluk karakteri ekleyerek
birleştirir ve ISIM adlı bir sütun şeklinde gösterir.
SELECT AD & ' ' & SOYAD AS ISIM FROM OGRENCILER
Matematiksel İşlemler
• SELECT ifadesinden sonra bir sütunun bir
matematiksel işleme tabi tutulması ve bu
işlemin sonucunun gösterilmesi sağlanabilir.
• Tabloda aylık maaşları saklanan personelin
yıllık maaşlarının görüntülenmesi istenirse,
aşağıdaki SQL cümlesi kullanılabilir:
SELECT AD, SOYAD, MAAS * 12 AS YıllıkÜcret
FROM PERSONEL
NULL (boş) değerler ile ilgili işlemler
• Eğer bir kayıt, bazı alanları boş bırakılarak
eklendiyse, matematiksel işlemlerde sorun
çıkabilir (NULL, sıfır değeri ile aynı değildir).
1500 * 12 + 0 işleminin sonucu 1800 iken,
1500 * 12 + NULL işleminin sonucu NULL olacaktır.
• Karşılaştırma işlemlerinde de NULL ile = işleci
kullanılmaz, IS kullanılır.
SELECT * FROM PERSONEL WHERE TC_NO IS NULL
Büyük/Küçük Harf Duyarlılığı
• SQL dili büyük/küçük harf ayrımı yapmaz
(case-sensitive değildir).
• Aşağıdaki yazımların hepsi aynı işi yapar
(Personel tablosundaki tüm personelin sadece
adı ve soyadı görüntülenir):
– SELECT AD, SOYAD FROM PERSONEL
– SELECT Ad, Soyad FROM Personel
– Select Ad, Soyad From Personel
– select ad, soyad from personel
Türkçe karakter kullanma
• Birçok VTYS, tablo ve nitelik isimlerinde Türkçe
karakter kullanımına izin verir. Fakat sorgularda
bazı sıkıntılara neden olabileceği için kullanılması
tavsiye edilmez.
• Örneğin PERSONEL tablosundaki nitelik isimleri
ADI ve SOYADI şeklinde büyük harfler ile
verildiyse, bazı VTYS’ler “SELECT Adi, Soyadi
FROM Personel” ifadesini, bazıları ise “SELECT
Adı, Soyadı FROM Personel” ifadesini doğru kabul
eder.
Alan ismi olarak kullanılmaması
gereken kelimeler
• Bir öğrencinin not bilgilerini saklamak için “NOT”
isminde bir alan yaratılırsa sorgularda bu alana
göre kriter verilmek istendiğinde, İngilizcede
“değil” anlamına geldiği için hata verecektir.
“NOT” yerine “NOTU”, “VIZE”, “FINAL” gibi
ifadeler tercih edilmelidir:
– SELECT * FROM NOTLAR WHERE NOT >= 60
– SELECT * FROM NOTLAR WHERE NOTU >= 60
Hatalı
Doğru
• Benzer şekilde SQL’e ait olan “SELECT”, “FROM”,
“WHERE”, “ORDER”, … gibi ifadeler de alan ismi
olarak kullanılmamalıdır.
ORDER BY ile sıralama
• Eğer görüntülenecek olan kayıtların belirli bir
sütuna göre sıralı olarak görüntülenmesi
isteniyorsa ORDER BY kullanılır.
• Sıralama yukarıdan aşağıya doğru artan sırada
olacaksa ASC, azalan sırada olacaksa DESC
kullanılır. Varsayılan sıralama şekli artan olduğu
için ASC yazılmasa bile artan sıralama kullanılmış
olur.
• Aşağıdaki SQL cümlesi PERSONEL tablosundaki
kayıtları maaşa göre azalan sırada gösterir:
SELECT * FROM PERSONEL ORDER BY MAAS DESC
SQL Fonksiyonları
• Programlama dillerinde olduğu gibi, SQL’de de
bazı aritmetik işlemler için yada tip dönüşümü
yapmak için hazır olarak sunulan fonksiyonlar
mevcuttur.
• Bu fonksiyonların bazıları (SUM, AVG, MIN,
MAX, …) birçok kayıt üzerinde işlem yapıp tek
bir sonuç üretirken, bazıları ise (Örneğin; tip
dönüşümü ile ilgili olanlar) üzerinde işlem
yaptığı her kayıt için ayrı sonuç üretir.
SUM ve AVG
• Belirli bir sütundaki sayısal verilerin toplanarak
sonucun gösterilmesi istenirse SUM, aritmetik
ortalamasının gösterilmesi istenirse AVG kullanılır.
• Aşağıdaki SQL cümlelerinden ilki tüm personelin
maaşlarının toplamını, ikincisi ise maaşların
aritmetik ortalamasını gösterir:
1. SELECT SUM(MAAS) AS TOPLAM_MAAS FROM
PERSONEL
2. SELECT AVG(MAAS) AS [MAASLARIN ORTALAMASI]
FROM PERSONEL
NOT: _ karakteri yerine boşluk karakteri
kullanılması istenirse [] içinde yazılmalıdır.
MIN ve MAX
• Belirli bir sütundaki en büyük veriyi görüntülemek
için MAX, en küçük veriyi görüntülemek için ise
MIN fonksiyonları kullanılır.
• Aşağıdaki SQL cümlesi, “2009-2010” öğretim
yılında “BM 316” dersinden en yüksek başarı
notunu gösterir:
SELECT MAX(VIZE*0.3 + FINAL*0.7)
FROM NOTLAR
WHERE DERS = “BM 316” AND DERS_YILI = “2009-2010”
COUNT
• Sorgunun ürettiği satır sayısını döndürür.
• Aşağıdaki SQL cümlesi PERSONEL tablosundaki
toplam kayıt sayısını döndürür:
SELECT COUNT(*) FROM PERSONEL
• Eğer COUNT içinde * yerine belirli bir sütun
ismi verilirse o sütundaki NULL olmayan değer
sayısını döndürür:
SELECT COUNT(ADRES) FROM OGRENCILER
TOP
• Önceki örnekte en yüksek başarı notunu alan öğrencinin
numarasını da göstermek istersek aşağıdaki kullanım hata
verecektir:
SELECT OGRENCI, MAX(VIZE*0.3 + FINAL*0.7)
FROM NOTLAR
WHERE DERS = “BM 316” AND DERS_YILI = “2009-2010”
• SELECT sonrasında “TOP n” kullanımı en üstteki n kaydı
gösterir. Örneğimizde başarı notuna göre azalan sıralama
yapıp en üstteki kaydı almak için “TOP 1” deyimini
kullanmak en uygun çözümdür:
SELECT TOP 1 OGRENCI, VIZE*0.3 + FINAL*0.7 AS Başarı_Notu
FROM NOTLAR
WHERE DERS = “BM 316” AND DERS_YILI = “2009-2010”
ORDER BY VIZE*0.3 + FINAL*0.7
NOT: Bu ifade yerine takma ismi olan
Başarı_Notu kullanılması hata verir
LCASE, UCASE ve LEN
• Lower: Tüm karakterleri küçük harfe dönüştürür.
• Upper: Tüm karakterleri büyük harfe dönüştürür.
• LEN: Sütun yada ifade içindeki karakter sayısını
döndürür
• Aşağıdaki SQL cümlesi SOYAD bilgileri küçük harfli
bile girilmiş olsa tüm karakterleri büyük harf
olarak görüntüler:
SELECT AD, Upper(Soyad) FROM PERSONEL
Tarihsel Fonksiyonlar (Access)
• GETDATE: Sistem tarihini ve saatini döndürür.
• DATEDIFF: İki tarih arasındaki farkı verir.
• Select Datediff(year,'1984','1982')
• DATEADD: Aldığı tarihin üzerine aldığı değeri (gün,
ay, yıl) ekleyerek yeni bir tarih değeri üretir.
• select DATEADD(year, 4,'1/1/1984')
• DAY: Aldığı tarihin gün kısmını döndürür.
• MONTH: Aldığı tarihin gün kısmını döndürür.
• YEAR: Aldığı tarihin gün kısmını döndürür.
GROUP BY
• SUM, AVG gibi bazı fonksiyonların tablonun
tamamı için değil de, belirli bir alana (yada
alanlara) göre gruplandırılarak çalıştırılması
GROUP BY deyimi ile sağlanabilir.
• Aşağıdaki SQL cümlesi personelin ortalama
maaşlarını her bölüm için ayrı ayrı listeler:
SELECT AVG(MAAS) FROM PERSONEL
GROUP BY BOLUM
Çok tablolu sorgulamalar
• Eğer birden fazla tabloda yer alan verilerin tek
bir sorgu ile görüntülenmesi istenirse FROM
kısmında ilgili tablolar araya virgül konularak
yazılmalı, WHERE kısmında ise o tabloları
birbirine bağlayan alanların birbirine eşit
olması kriteri verilmelidir. WHERE kısmında
böyle bir kriter verilmezse, iki tablonun tüm
kayıtları birbiri ile eşleştirilecek (kartezyen
çarpım) ve ortaya istenilenden daha çok sayıda
kayıt çıkacaktır.
2 tablolu sorgulama örneği
• PERSONEL tablosundaki BOLUM (FK) alanı ile
BOLUMLER tablosundaki BOLUM_NO (PK) alanı
birbirine bağlıdır. Eğer personel bilgileri
görüntülenirken personelin çalıştığı bölümün
numarasını değil de adını göstermek istersek bu
adı BOLUMLER tablosundan elde etmeliyiz. Bu
nedenle iki tablonun ismini de FROM kısmında
kullanmalıyız:
SELECT AD, SOYAD, GOREV, BOLUM_ADI
FROM PERSONEL, BOLUMLER
WHERE BOLUM = BOLUM_NO
Alan isimlerinin aynı olması durumu
• Eğer bir çok tablolu sorgulamada ilişkinin her iki
tarafındaki alanlar aynı isimde ise; alan
isimlerinden önce, o alanın ait olduğu tablo ismi
de yer almalıdır.
• Örneğin PERSONEL tablosundaki alan ismi de
BOLUM_NO olsaydı sorgu şu şekilde yazılmalıydı:
SELECT AD, SOYAD, GOREV, BOLUM_ADI
FROM PERSONEL, BOLUMLER
WHERE PERSONEL.BOLUM_NO =
BOLUMLER.BOLUM_NO SELECT AD, SOYAD, GOREV, BOLUM_ADI
Aynı sorgu şu şekilde de yazılabilirdi: FROM PERSONEL P, BOLUMLER B
WHERE P.BOLUM_NO = B.BOLUM_NO
3 tablolu sorgulama örneği
• Öğrencilerin adı, soyadı, aldıkları derslerin adı
ve bu derslerden başarı notları görüntülenmek
istenirse:
SELECT AD, SOYAD, DERS_ADI, VIZE*0.3 +
FINAL*0.7 AS BN
FROM OGRENCILER, NOTLAR, DERSLER
WHERE OGR_NO = OGRENCI AND
DERS = DERS_KODU
İç içe SELECT ifadeleri
• Eğer SELECT sonrasında yazılan alanların hepsi aynı
tabloda, fakat kriter olarak kullanılan alanlar onlardan
farklı bir tabloda ise iç içe SELECT ifadeleri kullanılabilir.
• Aşağıdaki SQL cümlesi ‘Fizik’ dersini alan öğrencilerin
bilgilerini gösterir:
SELECT OGR_NO, AD, SOYAD FROM OGRENCILER
WHERE OGR_NO IN (
SELECT OGRENCI FROM NOTLAR
WHERE DERS IN (
Fizik dersinin bir ders SELECT DERS_KODU FROM DERSLER
kodu olacağı için bu
WHERE DERS_ADI = ‘Fizik’))
satırdaki IN yerine =
kullanılabilirdi.
İç içe SELECT ifadeleri
• Önceki örneği çok tablolu sorgulama türünde de
yapabilirdik:
SELECT OGR_NO, AD, SOYAD
FROM OGRENCILER, NOTLAR, DERSLER
WHERE OGR_NO = OGRENCI AND
DERS_NO = DERS AND DERS_ADI = ‘Fizik’
• Fakat bu sorgu tabloların kartezyen çarpımına
neden olacağı için muhtemelen daha yavaş
çalışacaktır.
INSERT
• Bir tabloya kayıt eklerken kullanılan komut.
• Aşağıdaki ifade HOCALAR tablosuna kayıt ekler:
INSERT INTO HOCALAR VALUES (15, ‘Ahmet’, ‘Çalışkan’,
‘Prof. Dr.’) Veri türü karakter değilse tırnak kullanılmaz
• Eğer eklenecek kaydın sadece belirli alanlarına veri
girilecekse (Ör. HOCA_NO alanı ‘otomatik sayı’ veri
türünde ise o alana veri giremeyiz), tablo adından
sonra bu alanlar belirtilmelidir:
INSERT INTO HOCALAR (AD, SOYAD, UNVAN) VALUES
(‘Ahmet’, ‘Çalışkan’, ‘Prof. Dr.’)
DELETE
• Bir tablodaki bir yada daha çok kaydı silmek
amacıyla kullanılan DML komutudur. Hangi kayıt
yada kayıtların silineceği WHERE sözcüğünden
sonra verilen kriter ile belirlenir.
• Aşağıdaki DML ifadesi NOTLAR tablosundan
‘2007-2008’ öğretim yılına ait tüm kayıtları siler:
DELETE FROM NOTLAR WHERE DERS_YILI =
‘2007-2008’
• Eğer WHERE sözcüğü hiç kullanılmaz ise tablodaki
tüm kayıtlar silinir:
DELETE FROM NOTLAR
UPDATE
• Bir tablodaki kayıtların güncellenmesi amacıyla
kullanılan DML komutudur. Hangi kayıt yada kayıtların
güncelleneceği WHERE sözcüğü ile verilen kriter ile,
kayıtlardaki güncellenecek alanlar ise SET sözcüğü
sonrasında yeni değerlerinin atanması ile belirtilir.
• Aşağıdaki DML ifadesi PERSONEL tablosundaki
Pazarlama bölümünde çalışanların maaşlarını %10
oranında arttırır.
UPDATE PERSONEL SET MAAS = MAAS * 1.1 WHERE
BOLUM = (SELECT BOLUM_NO FROM BOLUMLER
WHERE BOLUM_ADI = ‘Pazarlama’)
Sorgu sonucunu tablo yapma
• Bir sorgu sonucunun yeni bir tablo olarak
saklanması isteniyorsa FROM öncesinde INTO
TABLO_ADI kullanılır.
• Aşağıdaki SQL cümlesi PERSONEL tablosundaki
tüm verileri yeni yaratacağı PERS_YEDEK
tablosuna kopyalar:
SELECT * INTO PERS_YEDEK FROM PERSONEL
• Eğer PERS_YEDEK tablosu önceden varsa,
yukarıdaki komut önce tabloyu siler, sonra tekrar
yaratarak verileri kopyalar.
Sorgu sonucunu INSERT ile
kullanma
• Bir tabloya veri eklerken INSERT ifadesinde VALUES
yazılmayıp bir sorgu da yazılabilir.
• Aşağıdaki ifade PERSONEL tablosundaki tüm verileri
önceden yaratılmış olan PERS_YEDEK tablosuna ekler:
INSERT INTO PERS_YEDEK SELECT * FROM PERSONEL
• Bu komut çalıştırılmadan önce PERS_YEDEK tablosu boş
değilse anahtar alan olan PERSONEL_NO alanında veri
tekrarına neden olabilir (dolayısı ile hata verebilir).
• Aşağıdaki ifade sadece 2010 yılından sonra işe
başlayanları ekler:
INSERT INTO PERS_YEDEK SELECT * FROM PERSONEL
WHERE GIRIS_TARIHI > ‘1/1/2010’
Download