Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
İSTANBUL ÜNİVERSİTESİ
AÇIK VE UZAKTAN EĞİTİM FAKÜLTESİ
VERİTABANLARINA GİRİŞ
COĞRAFİ BİLGİ SİSTEMLERİ
ÖĞR. GÖR. GÖKHAN TURAN
İSTANBUL ÜNİVERSİTESİ
AÇIK VE UZAKTAN EĞİTİM FAKÜLTESİ
İSTANBUL ÜNİVERSİTESİ
AÇIK VE UZAKTAN EĞİTİM FAKÜLTESİ
COĞRAFİ BİLGİ SİSTEMLERİ ÖN LİSANS PROGRAMI
VERİTABANLARINA GİRİŞ
Öğr. Gör. Gökhan TURAN
I
ÖNSÖZ
Bilgi ve teknolojisinin gelişimi ile birlikte uygulanmaya başlanan Coğrafi Bilgi Sistemleri
(CBS), birçok alanda, takip ve planlama için kullanılmaktadır. CBS en genel tanımıyla, her türlü
veriyi birbirleriyle ve coğrafi konumları ile ilişkilendirerek bilgisayar ortamında toplamak ve bunları
grafik ya da basılı olarak izlemektir.
Coğrafi bilgi sistemleri ilişkisel veritabanı yönetim sistemleri üzerinde kurulur. Bu sayede
mekânsal olmayan verileri de mekânsal veriler ile ilişkilendirerek yönetebilirler. CBS projelerinin
veritabanı yönetim sistemleri üzerinde yönetilmesi sayesinde; merkezi kontrol, veri tekrarının
azaltılması ve her ortamdan problemsiz veri paylaşımı mümkün hale gelir.
CBS projeleri için veritabanı tasarımı ve bu tasarım içerisindeki ilişkiler önemlidir. Her
projenin amacına, büyüklüğüne ve projeden beklentilere göre farklı veritabanı tasarım gereksinimleri
vardır. CBS proje veritabanı tasarımı yapılırken amaca uygun tasarımın gerçekleştirilmesi büyük
önem taşır, proje ihtiyaçlarını karşılayamayan bir tasarım sonuçta verimsiz bir veri çöplüğüne
dönüşecek, çok büyük geri dönüş maliyetleri oluşturabilecektir.
İstanbul Üniversitesi, Açık ve Uzaktan Eğitim Fakültesi, Coğrafi Bilgi Sistemleri Ön Lisans
Programı öğrencilerine yararlanabilecekleri ve her zaman başvurabilecekleri “Veritabanlarına Giriş” dersi
için ders notu kaynağı olmuştur. Bu kaynaktan öğrencilik hayatınızda faydalanabilmeniz ve bu bilgileri
meslek hayatınızda da kullanmanız dileklerimle...
Öğr. Gör. Gökhan TURAN 1 Temmuz 2019
II
İÇİNDEKİLER
ÖNSÖZ ...................................................................................................................... I
İÇİNDEKİLER ....................................................................................................... II
KISALTMALAR......................................................................................................X
YAZAR NOTU ....................................................................................................... XI
1. VERİTABANI NEDİR? ....................................................................................... 1
Bu Bölümde Neler Öğreneceğiz? ............................................................................ 2
Bölüm Hakkında İlgi Oluşturan Sorular .................................................................. 3
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................... 4
Anahtar Kavramlar ................................................................................................. 5
Giriş ....................................................................................................................... 6
1.1. Veritabanının Faydaları Nelerdir? .................................................................... 7
1.2. Veritabanının Riskli Yönleri Nelerdir?............................................................. 7
1.3. Veritabanı Örnekleri ........................................................................................ 8
1.4. Veritabanı Uygulama Türleri Nelerdir? ............................................................ 8
1.5. Veritabanı Bileşenleri Nelerdir? ....................................................................... 9
1.5. Veritabanı Yöneticiliği Nedir? ....................................................................... 10
1.6. Bir Veritabanı Yöneticisinin Görevleri Nelerdir? ........................................... 10
Uygulamalar ......................................................................................................... 11
Uygulama Soruları ............................................................................................... 12
Bu Bölümde Ne Öğrendik Özeti ........................................................................... 13
Bölüm Soruları ..................................................................................................... 14
2. İLİŞKİSEL VERİTABANI TASARIMI VE NORMALİZASYON ................. 17
Bu Bölümde Neler Öğreneceğiz? .......................................................................... 18
Bölüm Hakkında İlgi Oluşturan Sorular ................................................................ 19
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ................................... 20
III
Anahtar Kavramlar ............................................................................................... 21
Giriş ..................................................................................................................... 22
2.1. İlişkisel Veritabanı Sistemleri Nelerdir? ......................................................... 23
2.2. Bazı Veritabanı Yönetim Sistemlerinin Karşılaştırmaları ............................ 23
2.3. İhtiyaca Göre Veritabanı Seçimi ................................................................. 25
2.4. Veritabanı dilleri nelerdir? .......................................................................... 25
2.5. Veritabanı Yönetim Sistemlerinin Avantajları Nelerdir? ............................. 25
2.6 Normalizasyon ............................................................................................ 26
Uygulamalar ......................................................................................................... 27
Uygulama Soruları ............................................................................................... 28
Bu Bölümde Ne Öğrendik Özeti ........................................................................... 29
Bölüm Soruları ..................................................................................................... 30
3. VERİTABANI KAVRAMLARI ........................................................................ 33
Bu Bölümde Neler Öğreneceğiz? .......................................................................... 34
Bölüm Hakkında İlgi Oluşturan Sorular ................................................................ 35
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ................................... 36
Anahtar Kavramlar ............................................................................................... 37
Giriş ..................................................................................................................... 38
3.1. Tablo (Table) ................................................................................................. 39
3.2. Satır (Rows) .................................................................................................. 39
3.3. Sütun (Column) ............................................................................................. 39
3.4. Primary Key (Birincil Anahtar) ...................................................................... 40
3.5. Unique Key (Tekil Anahtar) .......................................................................... 40
3.6. Foreing Key (Yabancı Anahtar) ..................................................................... 41
3.7. Zorlayıcı (Constraint) .................................................................................... 41
3.8. Indeks (Index)................................................................................................ 42
3.9. View (Görüntü) ............................................................................................. 43
IV
3.10. İlişkilendirme (Joining) ................................................................................ 44
3.11. Veritabanı İlişki Türleri ............................................................................... 45
Uygulamalar ......................................................................................................... 48
Uygulama Soruları ............................................................................................... 49
Bu Bölümde Ne Öğrendik Özeti ........................................................................... 50
Bölüm Soruları ..................................................................................................... 51
4. ACCESS VERİTABANINDA ALAN VE ÖZELLİKLERİ ............................. 53
Bu Bölümde Neler Öğreneceğiz? .......................................................................... 54
Bölüm Hakkında İlgi Oluşturan Sorular ................................................................ 55
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ................................... 56
Anahtar Kavramlar ............................................................................................... 57
Giriş ..................................................................................................................... 58
4.1. Access Veritabanı Veri Türleri....................................................................... 59
4.2. İlişkilerde Ve Birleştirmelerde Alan Türleri ................................................... 62
4.3. Veri Türlerini Karşılaştırma ........................................................................... 62
Uygulamalar ......................................................................................................... 64
Uygulama Soruları ............................................................................................... 65
Bu Bölümde Ne Öğrendik Özeti ........................................................................... 66
Bölüm Soruları ..................................................................................................... 67
5. ACCESS VERİTABANINDA TABLO VE TABLO İLİŞKİLENDİRMELERİ
............................................................................................................................................ 69
Bu Bölümde Neler Öğreneceğiz? .......................................................................... 70
Bölüm Hakkında İlgi Oluşturan Sorular ................................................................ 71
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ................................... 72
Anahtar Kavramlar ............................................................................................... 73
Giriş ..................................................................................................................... 74
5.1. Yeni Bir Veritabanında Yeni Bir Tablo Oluşturmak....................................... 74
V
5.2. Önceden Oluşturulmuş Veritabanında Yeni Bir Tablo Oluşturmak .............. 77
5.3. Dış Verileri Alarak Yeni Bir Tablo Oluşturmak .......................................... 78
5.4. Tabloda Alan Ekleme Alan Çıkarma .............................................................. 78
5.5. Oluştur Sekmesi Altındaki Bölümler.............................................................. 80
5.6. Dış Veri Sekmesi Altındaki Bölümler ............................................................ 81
5.7. Veritabanında Tablo ve Tablo İlişkilendirmeleri ............................................ 81
5.8. İlişki Türleri .................................................................................................. 82
Uygulamalar ......................................................................................................... 85
Uygulama Soruları ............................................................................................... 86
Bu Bölümde Ne Öğrendik Özeti ........................................................................... 87
Bölüm Soruları ..................................................................................................... 88
6. SQL - YAPISAL SORGULAMA DİLİ ............................................................. 90
Bu Bölümde Neler Öğreneceğiz? .......................................................................... 91
Bölüm Hakkında İlgi Oluşturan Sorular ................................................................ 92
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ................................... 93
Anahtar Kavramlar ............................................................................................... 94
Giriş ..................................................................................................................... 95
6.1. SQL Dilinin Yapısı ........................................................................................ 96
6.2. SQL Deyimleri .............................................................................................. 96
6.2.1. DDL (Data Definition Language) Veri Tanımlama Dili .............................. 97
6.2.2. DML (Data Manuplation Language) Veri Düzenleme Dili .......................... 99
Uygulamalar ........................................................................................................106
Uygulama Soruları ..............................................................................................107
Bu Bölümde Ne Öğrendik Özeti ..........................................................................108
Bölüm Soruları ....................................................................................................109
7. ACCESS'TE SQL FONKSİYONLARI ............................................................111
Bu Bölümde Neler Öğreneceğiz? .........................................................................112
VI
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................113
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................114
Anahtar Kavramlar ..............................................................................................115
Giriş ....................................................................................................................116
7.1. SQL’de Kullanılan İşaretler ..........................................................................117
7.2. SQL’de Kullanılan Komutlar ........................................................................119
7.3. SQL Fonksiyonları .......................................................................................127
7.4. Access Veritabanında Kullanılan Fonksiyonlar .............................................134
Uygulamalar ........................................................................................................138
Uygulama Soruları ..............................................................................................139
Bu Bölümde Ne Öğrendik Özeti ..........................................................................140
Bölüm Soruları ....................................................................................................141
8. ACCESS'TE SORGU TASARIMI UYGULAMASI .......................................143
Bu Bölümde Neler Öğreneceğiz? .........................................................................144
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................145
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................146
Anahtar Kavramlar ..............................................................................................147
Giriş ....................................................................................................................148
8.1. Access Veritabanı İle SQL Uygulaması ........................................................149
Uygulamalar ........................................................................................................154
Uygulama Soruları ..............................................................................................155
Bu Bölümde Ne Öğrendik Özeti ..........................................................................156
Bölüm Soruları ....................................................................................................157
9. MSSQL SERVER VERİTABANINDA ALAN VE ÖZELLİKLERİ ..............159
Bu Bölümde Neler Öğreneceğiz? .........................................................................160
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................161
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................162
VII
Anahtar Kavramlar ..............................................................................................163
Giriş ....................................................................................................................164
9.1. MSSQL Server Veritabanı Veri Türleri .........................................................165
9.2. Veri Türlerini Karşılaştırma ..........................................................................168
Uygulamalar ........................................................................................................170
Uygulama Soruları ..............................................................................................171
Bu Bölümde Ne Öğrendik Özeti ..........................................................................172
Bölüm Soruları ....................................................................................................173
10. MSSQL SERVER VERİTABANINDA TABLO VE TABLO
İLİŞKİLENDİRMELERİ ................................................................................................175
Bu Bölümde Neler Öğreneceğiz? .........................................................................176
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................177
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................178
Anahtar Kavramlar ..............................................................................................179
Giriş ....................................................................................................................180
10.1. Yeni Bir Veritabanında Kod İle Yeni Bir Tablo Oluşturmak .......................181
10.2. Veritabanında Arayüz İle Yeni Bir Tablo Oluşturmak .................................182
10.3. Tablo İle İlgili Bazı Özellikler ....................................................................183
Uygulamalar ........................................................................................................189
Uygulama Soruları ..............................................................................................190
Bu Bölümde Ne Öğrendik Özeti ..........................................................................191
Bölüm Soruları ....................................................................................................192
11. MSSQL SERVER'DA FONKSİYONLAR .....................................................194
Bu Bölümde Neler Öğreneceğiz? .........................................................................195
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................196
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................197
Anahtar Kavramlar ..............................................................................................198
VIII
Giriş ....................................................................................................................199
11.1. SQL’de Kullanılan İşaretler ........................................................................200
11.2. SQL’de Kullanılan Komutlar ......................................................................201
11.3. SQL Fonksiyonları......................................................................................209
Uygulamalar ........................................................................................................216
Uygulama Soruları ..............................................................................................217
Bu Bölümde Ne Öğrendik Özeti ..........................................................................218
Bölüm Soruları ....................................................................................................219
12. MSSQL SERVER VERİ İŞLEMLERİ ..........................................................221
Bu Bölümde Neler Öğreneceğiz? .........................................................................222
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................223
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................224
Anahtar Kavramlar ..............................................................................................225
Giriş ....................................................................................................................226
12.1. View ...........................................................................................................227
12.2. Stored Procedure.........................................................................................228
12.3. Trigger Kullanımı .......................................................................................233
12.3.1. Trigger Ne Zaman Kullanılır? ..................................................................233
12.3.2. Trigger Türleri .........................................................................................233
12.3.3. Trigger Oluşturmak ..................................................................................234
12.3.4. Trigger Yönetimi .....................................................................................236
12.3.5. Trigger Uygulamaları ...............................................................................237
Uygulamalar ........................................................................................................240
Uygulama Soruları ..............................................................................................241
Bu Bölümde Ne Öğrendik Özeti ..........................................................................242
Bölüm Soruları ....................................................................................................243
13.MSSQL SERVER'DA SORGU TASARIMI UYGULAMASI .......................246
IX
Bu Bölümde Neler Öğreneceğiz? .........................................................................247
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................248
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................249
Anahtar Kavramlar ..............................................................................................250
Giriş ....................................................................................................................251
13.1. MSSQL Server Veritabanı İle SQL Uygulaması .........................................252
Uygulamalar ........................................................................................................256
Uygulama Soruları ..............................................................................................257
Bu Bölümde Ne Öğrendik Özeti ..........................................................................258
Bölüm Soruları ....................................................................................................259
14. VERİTABANI TASARIMI VE YÖNETİMİ UYGULAMASI .....................261
Bu Bölümde Neler Öğreneceğiz? .........................................................................262
Bölüm Hakkında İlgi Oluşturan Sorular ...............................................................263
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri ..................................264
Anahtar Kavramlar ..............................................................................................265
Giriş ....................................................................................................................266
14.1. MSSQL Server Üzerinde Veritabanı Tasarımı ve SQL Sorgu Uygulaması ..267
14.2. Access Veritabanına Alan Ekleme ve Toplu Veri Girişi ..............................270
14.3. Access Veritabanında Çeşitli Uygulamalar .............................................273
Uygulamalar ........................................................................................................274
Uygulama Soruları ..............................................................................................275
Bu Bölümde Ne Öğrendik Özeti ..........................................................................276
Bölüm Soruları ....................................................................................................277
KAYNAKÇA .........................................................................................................279
X
KISALTMALAR
CBS: Coğrafi Bilgi Sistemleri
VTYS: Veritabanı Yönetim Sistemleri
VT: Veritabanı
SQL: Structered Query Language (Yapısal Sorgulama Dili)
DDL (Data Definition Language): Veri tanımlama deyimleri.
DML (Data Manuplation Language) : Veri işleme dili.
DCL (Data Control Language): Veri kontrol dili.
XI
YAZAR NOTU
Veritabanlarına Giriş dersi veritabanı konularını içerdiği gibi bu konuların daha iyi
anlaşılması için bol bol uygulamalar içermektedir. Bu dersin iyi anlaşılması için uygulamaları
bilgisayarınızda tekrarlamanız iyi olacaktır. Teorik konularda ya da uygulamalarda anlaşılmayan
konu olursa [email protected] eposta adresi üzerinden bana ulaşıp sorularınızı
yöneltebilirsiniz.
Öğr. Gör. Gökhan TURAN
1 Temmuz 2019
1
1. VERİTABANI NEDİR?
2
Bu Bölümde Neler Öğreneceğiz?
1.1. Veritabanı Tanımı
1.2. Veritabanının Faydaları
1.3. Veritabanının Riskli Yönleri
1.4. Veritabanına Örnek Projeler
1.5. Veritabanı Uygulama Türleri
1.6. Veritabanı Bileşenleri
1.7. Veritabanı Yöneticisinin Görevleri
3
Bölüm Hakkında İlgi Oluşturan Sorular
1. Veritabanı Nedir?
2. Veritabanının Faydaları Nelerdir?
3. Veritabanının Riskli Yönleri Nelerdir?
4. Veritabanına Örnek Projeler Neler Olabilir?
5. Veritabanı Uygulama Türleri Nelerdir?
6. Veritabanı Bileşenleri Nelerdir?
7. Veritabanı Yöneticisinin Görevlerini Sıralayınız.
4
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Veritabanı Veritabanını kavrayarak tarif
eder ve örneklendirebilir.
Ders notları, Sunumlar,
Kaynaklar
Veritabanının Faydaları Kavrama Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
Veritabanı Yöneticisinin
Görevleri
Veritabanının Yöneticisinin
Görevlerini Kavrar ve Bilir
Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
5
Anahtar Kavramlar
Veritabanı, Veritabanının Faydaları, Veritabanı Uygulama Türleri
6
Giriş
Veritabanı (Database); bilgilerin tutulduğu, saklandığı ve gerektiğinde kullanılmak
üzere çağrıldığı düzenli bilgi topluluğudur. Bilgisayar terminolojinde ise sistematik erişim
imkânı olan, yönetilebilir, güncellenebilir, taşınabilir, birbirleri arasında tanımlı ilişkiler
bulunabilen veriler kümesi anlamına gelmektedir.
Şekil 1: Veritabanı ve istemciler
Veritabanı, en geniş anlamıyla; birbiriyle ilişkili verilerin tekrara yer vermeden, çok
amaçlı kullanımına olanak sağlayacak şekilde depolanması olarak tanımlanabilir. Yine
veritabanı 1 , herhangi bir konuda birbiriyle ilişkili ve düzenli bilgiler topluluğu olarakta
tanımlanabilir.
1 Veri Tabanı Yönetim Sistemleri I, Turgut ÖZSEVEN, Murathan Yayınevi, 2010, Trabzon.
7
1.1. Veritabanının Faydaları Nelerdir?
1. Veri tekrarları ortadan kaldırılır ya da en aza indirilir.
2. Bellek alanı israfı önlenir.
3. Standart bir sorgu dili kullanmak mümkündür.
4. Veri bütünlüğünün bozulması önlenir.
5. Yanlışlıkların giderilmesi ve tutarsız (hatalı) bilgilerin girişi engellenir.
6. Verinin paylaşımı sağlanır. Aynı veri tüm kolaylığıyla diğer kullanıcılar tarafından da
kullanılması sağlanır.
7. Bilgilerin standartlaşması sağlanır. Belli standartlar varsa bu standartlara uyulması gerekir.
Ayrıca yeni standartlaşmalara doğru adımların atılması sağlanmış olunur.
Veritabanının faydalarını madde halinde anlatmak gerekirse:
• Veri Tekrarı: Veri tekrarlarını ortadan kaldırılır ya da en aza indirilir.
• Veri Tutarlılığı: Veri değişikliklerinin doğrudan veritabanında yapılması, farklı
ortamlarda farklı verilerin yer almamasını engeller aynı veriyi tekrar kaydetmeden
istenildiği kadar kullanılır.
• Veri Paylaşımı: İstediğiniz veriyi istediğiniz zaman paylaşımda bulunabilirsiniz.
• Veri Bağımsızlığı: Veritabanı yönetim sistemi verilerin yapısı, yönetimi ile ilgilenir,
kullanıcı bunlarla ilgilenmez.
• Veri Bütünlüğü: Bir tabloda işlem yapıldığında, bu tablo ile ilişkili diğer tablolarda da
işlem yapılır.
• Veri Güvenliği: Verilerin değişimini herkes yapamaz yetkisi olan kimseler yapabilir.
Bundan dolayı verilerin silinmesi ve kaybolma riski azalır.
1.2. Veritabanının Riskli Yönleri Nelerdir?
1. Veritabanı sistemi iyi tasarlanmadığı taktirde bazı bileşenler iyi bir şekilde oluşturulmamışsa
sistem, dosya sistemine göre çok daha kötü çalışabilir.
2. Veritabanı sisteminin kurulumu ve bakımı klasik dosya sistemine göre pahalı olabilir.
8
1.3. Veritabanı Örnekleri
1. Kütüphane – Kitap Bilgileri, Personel Bilgileri
2. Hastane – Hasta, Doktor, Tedavi, Araç-Gereç, Mali Bilgiler
3. Şirket – Müşteri, Ürün, Satış, Ödeme, Teslimat Bilgileri
4. Banka – Müşteri, Mevduat, Kredi Kartı, Kredi Bilgileri
5. Üniversite – Öğrenci İşleri Bilgi Sistemi (Öğrenci Kişisel Bilgileri Ve Ders, Not Bilgileri)
Şekil 2: Veritabanı ve Bağlantılar
1.4. Veritabanı Uygulama Türleri Nelerdir?
Veritabanı uygulamaları iki temel türe ayrılabilir. Bunlar:
1. Düz Dosya Veritabanı: Bu tür programlarda tüm veritabanı tek bir tabloya sığdırılmalıdır.
Bu birkaç kayıtta ortak olan herhangi bir bilginin her kayıtta tekrarlanacağı anlamına gelir.
Word, Excel bu tür programlara örnektir.
Şekil 3: Düz Dosya Veritabanı Gösterimi
9
2. İlişkisel Veritabanı: Bu tür veritabanında birçok tablo kullanılır ve tablolar arasında
ilişkiler oluşturulur. Bir ilişki, bir tabloya, başka bir tablodaki kaydı bağlamamızı sağlar. Bu
şekilde veriler daha az yer kaplar ve işlemlerimizi kolaylaştırır.
Şekil 4: İlişkisel Veritabanı Gösterimi
1.5. Veritabanı Bileşenleri Nelerdir?
• Tablolar
• Sorgular
• Formlar
• Raporlar
• Veri Erişim Sayfaları
Şekil 5: Veritabanı Bileşenleri
10
1.5. Veritabanı Yöneticiliği Nedir?
Günümüzde veritabanı sistemleri, bankacılıktan otomotiv sanayisine, sağlık bilgi
sistemlerinden şirket yönetimine, iletişim sistemlerinden hava taşımacılığına kadar geniş bir
yelpazede kullanılan bilgisayar sistemlerinin veri alt yapısını oluşturmaktadır.
Veritabanı fiziksel olarak bilgileri tutarken mantıksal bir hiyerarşiye de sahiptir.
Veritabanı sistemlerinin kurulması, konfigürasyonun yapılması, tasarlanması, sorgulanması ve
güvenliğinin sağlanması karmaşık bir hal almıştır. Bu karmaşıklık, veritabanı sistemlerinin alt
parçalarının oluşturulması ile çözülmeye çalışılmıştır. Bu bağlamda veritabanı yöneticiliği ve
veritabanı programcılığı kavramları ortaya çıkmıştır.
Veritabanı yöneticiliği, veritabanı sistemlerinin kurulması, konfigürasyonu ve güvenliği
ile ilgili işleri yaparken; veritabanı programcıları ise veritabanının mantıksal tasarımı ve
sorgulanması işlerini üstlenmiştir.
1.6. Bir Veritabanı Yöneticisinin Görevleri Nelerdir?
1. Veritabanı yazılımının kurulması ve güncellemeler.
2. Veritabanı oluşturulması.
3. Veritabanı başlatma/durdurma.
4. Kullanıcıları ekleme ve yetkilendirme.
5. Veritabanı yedekleme ve yedekten geri dönme.
6. Veritabanı performans ayarları.
Şekil 6: Veritabanı Yöneticisi ve Tablolar
11
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
12
Uygulama Soruları
1. Veritabanının tanımını yapınız.
2. Veritabanının faydalaları nelerdir? Açıklayınız.
3. Veritabanının Riskli Yönleri Nelerdir? Açıklayınız.
4. Bir kütüphane veritabanında hangi veriler saklanabilir? Açıklayınız.
5. Veritabanı bileşenleri nelerdir? Açıklayınız.
13
Bu Bölümde Ne Öğrendik Özeti
Teknoloji çağında veritabanlarının hemen her yerde ve her kurumda olduğunu, bu
sayede verileri düzenli saklayabildiğimizi, daha sonra istediğimizde bu bilgilere rahat bir
şekilde erişebildiğimizi, Veritabanının faydalarını, veritabanı bileşenlerini öğrenmiş olduk.
14
Bölüm Soruları
1. Veritabanı ile ilgili aşağıdaki kavramlardan hangisi yanlıştır?
A. Sistematik olarak verilere erişilebilir
B. Veriler yönetilebilir
C. Veriler güncellenebilir
D. Veriler taşınabilir
E. Veriler silinemez
2. Aşağıdakilerden hangisi veritabanı faydalarından değildir?
A. Veri tekrarları ortadan kaldırılır ya da en aza indirilir
B. Bellek alanı israfı önlenir
C. Veri paylaşmaya, diğer kullanıcılara veritabanını paylaşıma açmaya izin vermez
D. Veri bütünlüğünün bozulması önlenir
E. Standart bir sorgu dili kullanmak mümkündür.
3. Aşağıdakilerden hangisi bir kurumun veritabanında saklanması gereken bilgiler olamaz?
A. Kütüphane – Kitap Bilgileri, Personel Bilgileri
B. Hastane – Hastanın Sınav Notları, Başarı Durumu
C. Şirket – Müşteri, Ürün, Satış, Ödeme, Teslimat Bilgileri
D. Banka – Müşteri, Mevduat, Kredi Kartı, Kredi Bilgileri
E. Üniversite – Öğrenci İşleri Bilgi Sistemi (Öğrenci Kişisel Bilgileri Ve Ders, Not Bilgileri)
4. Bir kişiye, nesneye ya da ürüne ait detaylı verilerin bir düzen çerçevesinde saklandığı ortamlara ne denir?
A. Veritabanı
B. Dosya
C. Klasör
D. Grafik Programı
E. Kelime İşlemci Programı
15
5. Aşağıdakilerden hangisi veritabanının riskli yönlerindendir?
A. Verilerin güncelleştirilebilir olması
B. Veritabanına yeni veri eklenebilmesi
C. Verilerin düzenli saklanması
D. Verilerin silinebilir olması
E. Veritabanının yedeği alınmadığında veritabanının silinmesi halinde tüm verilerin kaybolabilmesi
6. “İlişkisel veritabanına” aşağıdaki programlardan hangisi örnek olarak verilemez?
A. Word
B. Informix
C. MS SQL
D. MY SQL
E. Oracle
7. Aşağıdakilerden hangisi veritabanı bileşenlerinden değildir?
A. Tablolar
B. Sorgular
C. Formlar
D. Raporlar
E. Slaytlar
8. Aşağıdakilerden hangisi veritabanı yöneticisinin görevlerinden değildir?
A. Veritabanı oluşturulması
B. Veritabanı başlatma/durdurma
C. Veritabanında sorgu çalıştırma
D. Veritabanı performans ayarları
E. Veritabanı yedekleme ve yedekten geri dönme
16
9. Aşağıdakilerden hangisi veritabanı programı ile oluşturulamaz?
A. Tablo
B. Sorgu
C. Form
D. Sunum
E. Rapor
10. Aşağıdakilerden hangisi veritabanı için yanlıştır?
A. Düzenli bilgi topluluğudur
B. Veri tekrarına yer vermez
C. Birbiriyle ilişkili verileri barındırır
D. Veri tekrarına yer verir
E. Veriler Güncellenebilir
Cevaplar
1)E 2)C 3)B 4)A 5)E 6)A 7)E 8)C 9)D 10)D
17
2. İLİŞKİSEL VERİTABANI TASARIMI VE NORMALİZASYON
18
Bu Bölümde Neler Öğreneceğiz?
2.1. İlişkisel Veritabanı
2.2. İlişkisel Veritabanı Yönetim Sistemleri
2.3 Bazı Veritabanı Yönetim Sistemlerinin Karşılaştırmaları
2.4. Veritabanı Dilleri
2.5. Veritabanı Yönetim Sistemlerinin Avantajları
2.6 Normalizasyon
19
Bölüm Hakkında İlgi Oluşturan Sorular
1. İlişkisel Veritabanı Nedir?
2. İlişkisel Veritabanı Yönetim Sistemleri Nelerdir?
3. Veritabanı Dilleri Nelerdir?
4. Veritabanı Yönetim Sistemlerinin Avantajları Nelerdir?
5. Normalizasyon Nedir?
20
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
İlişkisel Veritabanı İlişkisel Veritabanını
kavrayarak tarif eder ve
örneklendirebilir
Ders notları, Sunumlar,
Kaynaklar
İlişkisel Veritabanı Yönetim
Sistemleri
Kavrama Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
İlişkisel Veritabanı Yönetim
Sistemlerinin Faydaları
İlişkisel veritabanı yönetim
sistemlerinin faydalarını
kavrar
Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
Normalizasyon Normalizasyonu
Gerçekleştirme
Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
21
Anahtar Kavramlar
İlişkisel Veritabanı, Access, MS SQL, Oracle, My SQL, PostgreSQL, SQL,
Normalizasyon
22
Giriş
İlişkisel veritabanı; organize edilmiş verilerin tablolarda saklanması ve bu tablolar
arasında kurulan bağ ile oluşan veritabanı çeşididir. Tablolar satır ve sütunlardan oluşur,
üzerinde verileri saklayabilir, ekleyebilir, silebilir ve güncelleyebiliriz. Her satır aynı sütunlara
yani alanlara sahiptir. Her bir sütun o tabloda bulunması gereken ortak özellikleri yansıtır.
Tablo üzerindeki her bir satıra ise “Kayıt” denir. Örneğin aşağıdaki tabloda “Plaka” alanında
her kayıt için araçların plakaları bulunmaktadır. Her bir satırda bir araca yönelik bilgileri
tutmaktadır.
Şekil 7: Tablo ve Kayıtlar
Tablolar arasında kurulan ilişkiler ile verileri organize bir şekilde işlemek mümkündür.
İlişkiler, bir sorgu oluşturduğumuzda bir çok bilgiye aynı anda ulaşmamızı sağlar. Aşağıdaki
resimde birçok tablo arasında bir veya birden çok ilişki olduğu görülmektedir.
Şekil 8: İlişkili Tablolar
23
2.1. İlişkisel Veritabanı Sistemleri Nelerdir?
1. MS Access (Microsoft Access)
2. MS SQL Server (Microsoft SQL Server)
3. My SQL
4. PostgreSQL
5. Oracle
6. Sybase
7. Berkeley
8. Firebird
9. IBM DB/2
10. Informix
11. Progress
Şekil 9: İlişkisel Veritabanı Sistemleri
2.2. Bazı Veritabanı Yönetim Sistemlerinin Karşılaştırmaları
MS Access
• Microsoft Office ürünüdür.
• Küçük ölçekli uygulamalar içindir.
• Tablo başına 2 GB’ a kadar veri depolayabilir.
• Aynı anda 255 bağlantıya izin verebilir.
• Windows işletim sistemleri dışında kullanılamaz.
24
MS SQL Server
• Microsoft firmasına ait veritabanı sunucu yazılımıdır.
• Orta ve büyük ölçekli işlemler için kullanılır.
• Kullanım kolaylığı, güvenilirliği, işlem gücü yüksektir.
• Tablo başına 4 TB veri depolama.
• “Transaction logging”, “trigger” ve “stored procedure” özelliklerine sahiptir.
• Sadece Windows üzerinde çalışır (platform bağımlı).
MySQL
• Açık kaynak kodludur.
• Windows/Unix/Linux işletim sistemlerinde çalışır. (Platform bağımsız)
• Tablo başına 4 TB veri depolayabilir.
• Web uygulamalarında PHP ile çok sık kullanılır.
Oracle
• Oracle firması tarafından geliştirildi.
• Dünyanın en güçlü ve en güvenilir veritabanı olarak gösterilir.
• Birçok işletim sistemi üzerinde kullanılabilir.
• Çok yüksek ölçekli uygulamalar için tercih edilir.
• Oluşturulabilecek tablo sayısı sınırsızdır.
• Çok yüksek maliyet...!
IBM DB2
• IBM tarafından geliştirilmiştir.
• Windows/Unix/Linux işletim sistemlerinde çalışır.
• “Transaction logging”, “trigger”ve “stored procedure” özelliklerine sahiptir.
Informix
• Illustra firması tarafından geliştirildi.
• 2001 yılında IBM Informix’ i satın aldı.
• Ücretli ve güçlü bir veritabanı.
• Orta ölçekli işletmelerin yükünü kaldırabilecek kapasitedir.
25
PostgreSQL
• UNIX, Linux ve Windows platformlarının hepsinde çalışır.
• Ücretsiz, açık kaynak kodlu.
• Çok güçlü işlem yapısı.
• Tablo başına 64 TB veri depolama.
• “Transaction”, “trigger” ve “stored procedure” özelliklerine sahiptir.
2.3. İhtiyaca Göre Veritabanı Seçimi
• Basit Ölçekli İşlemlerde: MS Access
• Orta Ölçekli İşlemlerde: MS SQL Server
• Büyük Ölçekli İşlemlerde: Oracle
2.4. Veritabanı dilleri nelerdir?
• Sql
• Pl/Sql
• Oql
Veritabanı Dilleri (SQL gibi) yapısal sorgulama dilleridir. Veritabanları için geliştirilmiştir.
Programcının gerek veri üzerinde işlem gerekse veri tanımlamasını kolaylaştıran bir dildir. Tüm
yazılım geliştiriciler SQL öğrenmek zorundadır. SQL bir programlama dili değil, sorgulama
dilidir.
2.5. Veritabanı Yönetim Sistemlerinin Avantajları Nelerdir?
1. Veri Tekrarı (“Data Redundancy”): Azaltılır ya da yok edilir.
2. Veri Tutarlılığı (“Data Consistency”): Aynı verinin değişik yerlerde birkaç kopyasının
bulunması “bakım” zorluluğu getirir. Bir yerde güncellenen bir adres bilgisi başka yerde
güncellenmeden kalabilir ve bu durum veri tutarsızlığına (“data inconsistency”) yol açar.
3. Veri Paylaşımı / Eşzamanlılık (“Concurrency”): Veritabanı yönetim sistemi (VTYS)
kullanılmadığı durumlarda veriye sıralı erişim yapılır. Yani birden çok kullanıcı aynı anda
veriye erişemez. Bir VTYS’de ise verinin tutarlılığını ve bütünlüğünü bozmadan aynı
veritabanlarına çok kısa zaman dilimlerinde yüzlerce, binlerce erişim yapılabilir.
26
4. Veri Bütünlüğü (“Data Integrity”): Bir tablodan bir kayıt silinirse diğer tüm tablolardan
da silinmelidir.
5. Veri Güvenliği (“Data Securiy”): Verinin isteyerek ya da yanlış kullanım sonucu
bozulmasının önlenmesini sağlayan mekanizmalar mevcuttur. Veritabanına girmek için
kullanıcı adı ve şifreyle korumanın yanı sıra kişiler sadece kendilerini ilgilendiren tabloları
ya da tablo içinde belirli kolonları görebilir.
6. Veri Bağımsızlığı (“Data Independence”): Kullanıcı kullandığı verilerin yapısı ve
organizasyonu ile ilgilenmek durumunda değildir. Veri bağımsızlığı, VTYS’lerin en temel
özellikleridir.
2.6 Normalizasyon
İlişkisel veritabanları tasarlanırken verilerin gereksiz tekrarını, bilgilerin kaybını
önlemek amacıyla normalizasyon işlemi uygulanması gerekir. Normalizasyon işlemi
uygulanarak da ilişkilerin normal forma getirilmesi sağlanır.
Normalizasyon, taslak veritabanı üzerinde birtakım işlemler yapılarak taslağı son haline
yaklaştırma yöntemidir.
İyi tasarlanmamış olan bir veritabanında güncelleme, ekleme veya silmeden
kaynaklanan sapmalar nedeniyle birtakım kullanım zorlukları meydana gelmektedir.
Normalizasyon, veritabanı tasarımında bu tür sapmaların da ortadan kaldırılmasını sağlayan bir
süreç olarak da adlandırılabilir.
27
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
28
Uygulama Soruları
1. İlişkisel veritabanı kavramının tanımını yapınız.
2. İlişkisel veritabanı sitemlerine 5 örnek veriniz.
3. Veritabanı dili nedir? Açıklayınız.
4. İhtiyaca göre hangi veritabanı yönetim sistemleriniz seçerdiniz? Açıklayınız.
5. Veritabanı yönetim sistemlerinin avantajları nelerdir? Açıklayınız.
6. Normalizasyon Nedir? Açıklayınız.
29
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde ilişkisel veritabanının organize edilmiş verilerin tablolarda saklanması ve
bu tablolar arasında kurulan bağ ile oluşan veritabanı çeşidi olduğunu öğrendik. İlişkisel
veritabanı sistemlerinin neler olduğunu, ihtiyaca göre hagi veritabanını seçeceğimizi öğrendik.
Ayrıca SQL’in yapısal sorgulama dili olduğunu ve veritabanı yönetim sistemlerinin
avantajlarını öğrendik.
30
Bölüm Soruları
1. Tablo üzerindeki her bir satır ne olarak adlandırılır?
A. Kayıt
B. Sorgu
C. İlişkili veri
D. Sütun
E. Hiçbiri
2. Aşağıdakilerden hangisi ilişkisel veritabanına örnek olarak verilemez?
A. MS SQL
B. My SQL
C. Oracle
D. MS Excel
E. MS Access
3. Microsoft firması tarafından geliştirilmiş olan ve aynı anda en fazla 255 kullanıcının
erişmesine imkân sağlayan veritabanı yönetim sistemi aşağıdakilerden hangisidir?
A. Oracle
B. My SQL
C. MS SQL
D. MS Access
E. Informix
4. Açık kaynak kodlu olan veritabanı yönetim sistemi aşağıdakilerden hangisidir?
A. My SQL
B. MS SQL
C. MS Access
D. Oracle
E. IBM DB2
31
5. Basit ölçekli işlemlerde aşağıdaki hangi veritabanı yönetim sistemi kullanılabilir?
A. MS SQL
B. My SQL
C. MS Access
D. Oracle
E. PostgreSQL
6. Aşağıdakilerden hangisi ilişkisel veritabanı sitemleri için yanlıştır?
A. İlişkiler, bir sorgu oluşturduğumuzda birçok bilgiye aynı anda ulaşmamızı sağlar.
B. Her satır aynı sütunlara yani alanlara sahiptir.
C. Her bir sütun o tabloda bulunması gereken ortak özellikleri yansıtır.
D. Tablo üzerindeki her bir sütuna “kayıt” denir.
E. Tablolar arasında kurulan ilişkiler ile verileri organize bir şekilde işlemek
mümkündür.
7. Aşağıdakilerden hangisi Microsoft firmasına ait veritabanı yönetim sistemleridir?
I. Oracle
II. My SQL
III. MS SQL
IV. MS Access
A. I ve II
B. III ve IV
C. II ve III
D. II ve IV
E. I, II, III
8. Aşağıdakilerden hangisi Oracle veritabanı yönetim sistemi için yanlıştır?
A. Oracle firması tarafından geliştirildi.
B. Dünyanın en güçlü ve en güvenilir veritabanı olarak gösterilir.
C. Sadece Windows işletim sistemi üzerinde kullanılabilir.
D. Çok yüksek ölçekli uygulamalar için tercih edilir.
E. Oluşturulabilecek tablo sayısı sınırsızdır.
32
9. Aşağıdakilerden hangisi My SQL veritabanı yönetim sistemi için yanlıştır?
A. Açık kaynak kodludur.
B. Windows/Unix/Linux işletim sistemlerinde çalışır. (Platform bağımsız)
C. Tablo başına 4 TB veri depolayabilir.
D. Web uygulamalarında PHP ile çok sık kullanılır.
E. Sadece açık kaynak kod olan Linux işletim sistemi üzerinde çalışır.
10. Verinin isteyerek ya da yanlış kullanım sonucu bozulmasının önlenmesini sağlayan
mekanizmalar veritabanı yönetim sisteminin hangi özelliği olarak nitelendirilir?
A. Veri Tutarlılığı (Data Consistency)
B. Veri Bütünlüğü (Data Integrity)
C. Veri Güvenliği (Data Securiy)
D. Veri Tekrarı (Data Redundancy)
E. Veri Bağımsızlığı (Data Independence)
Cevaplar
1)A 2)D 3)D 4)A 5)C 6)D 7)B 8)C 9)E 10)C
33
3. VERİTABANI KAVRAMLARI
34
Bu Bölümde Neler Öğreneceğiz?
3.1. Tablo
3.2. Satır
3.3. Sütun
3.4. Primary Key
3.5. Unique Key
3.6. Foreing Key
3.7. Zorlayıcı
3.8. Indeks
3.9. View
3.10. İlişkilendirme
3.11. Veritabanı ilişki türleri
35
Bölüm Hakkında İlgi Oluşturan Sorular
1. Tablo Nedir?
2. Satır Satır?
3. Sütun Nedir?
4. Primary Key Nedir?
5. Unique Key Nedir?
6. Foreing Key Nedir?
7. Zorlayıcı Nedir?
8. Indeks Nedir?
9. View Nedir?
10. İlişkilendirme Nedir?
11. Veritabanı İlişki Türleri Nelerdir?
36
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Tablo, Satır, Sütun, Primary
Key, Foreing Key
Tablo, Satır, Sütun, Primary
Key’i tarif eder ve
örneklendirebilir
Ders notları, Sunumlar,
Kaynaklar
İlişkilendirme, Veritabanı
ilişki türleri
Kavrama Ders notları, Sunumlar,
Kaynaklar
37
Anahtar Kavramlar
Tablo, Satır, Sütun, Primary Key, Foreing Key, İlişkilendirme
38
Giriş
“Veritabanı yazılımı” veritabanının bilgiyi verimli bir şekilde düzenleyebilmesini,
gerektiği zaman bilgiye ulaşılabilmesini sağlayan, birden çok kullanıcıya bilgiye aynı anda
erişme olanağı tanıyan, verilerin düzenli bir şekilde saklanmasına imkan sağlayan yazılımlardır.
Veritabanı yazılımları kullanırken sıkça karşı karşıya geleceğimiz bazı kavramlar
vardır. Bu kavramların ne olduğunu bilmek gerekir. Bu bölümde bu kavramlar işlenecektir.
39
3.1. Tablo (Table)
Tablolar verilerin saklandığı alanlardır. Tabloları Excel dosyalarına benzetebiliriz.
Hücrelerden oluşur ve hücrede veriler mantıksal olarak saklanır.
Şekil 10: Tablo, Satır ve Sütunlar
• Veritabanı içerisinde verilerin tutulduğu kısımdır.
• Tablolar satır ve sütunlardan oluşur.
• Her satır tablo içinde tekil bir değere sahip olmalıdır.
• Her tabloda bir PRIMARY KEY (Birincil Anahtar) tanımlanmalıdır.
• Tablolar arası gerekli ilişkiler kurulmalıdır.
• Veriler hücrelerde saklanır.
• Tablo içerisinde her satır bir kaydı ifade ederken , her sütun her bir kayıta ait bir
özelliği ifade eder aynı zamanda her bir sütuna “field” ya da “alan” denir.
3.2. Satır (Rows)
Satırlar tablolarda bulunan belirli bir kayda ait veriler bütünüdür. Satır sütuna ait veri
gurubudur. Örneğin bir aracın Plaka, Marka, Model, Renk bilgilerinin tamamı satırı ifade
etmektedir.
3.3. Sütun (Column)
Satırlara ait farklı bilgileri tutar. Örneğin bir araca ait plaka, marka, model, renk gibi
özelliklerin her biri ayrı sütunlardadır.
40
3.4. Primary Key (Birincil Anahtar)
Her satırı tekil bir şekilde tanımlayan benzersiz anahtardır. Primary Key sayesinde tablolarda
bulunan satırlar birbirinden farklı olur ver her satırın Primary Key değeri farklı atanır.
1. Benzersizdir. Yani tekrar eden kayıtlar olamaz.
2. Boş geçilemez. Mutlaka değer almak zorundadır. Bir tabloda Primary Key olmak
zorunda değil. Fakat bazı veritabanı yönetim sistemlerinde bulunan satırlar birbirinden
faklı olur ve her satırın Primary Key değeri farklı atanır.
Şekil 11: Primary Key
Primary Key Seçerken Dikkat Edilmesi Gereken Hususlar
• Primary Key olacak olan sütun asla boş değer olmamalıdır.
• Primary Key mümkün olduğunca az sütunlardan oluşmalıdır.
• Primary Key sütunu mümkün olduğunca en küçük ve basit veri tipinde tanımlanmalıdır.
Integer idealdir.
• Primary Key olacak olan sütun tekrar etmeyen kayıtlardan oluşmalıdır. Örneğin T.C.
Kimlik No, Plaka, Öğrenci No vb.
3.5. Unique Key (Tekil Anahtar)
Unique Key olarak tanımlanan alan için bir değer sadece bir kere girilebilir. Bir başka
satıra daha aynı verinin girilmesine izin verilmez. Primary Key ’den farklı olarak Unique Key,
NULL (boşluk) değerini alabilir. Örneğin programda her personele ait bir sicil numarası olacağı
41
için bu alan Unique key olarak tanımlanabilir. Ama isim alanı birden fazla aynı isme sahip
personel olabileceği için bir Unique key olarak tanımlanamaz. Ali isimli birden fazla personel
olabileceği gibi.
3.6. Foreing Key (Yabancı Anahtar)
Foreing Key, birbiri ile ilişkili olan tablolardan ilişki sütununu belirler. Bir tablodaki
sütundan başka tablodaki anahtara olan referansı belirler. Primary Key’den farklı olarak bir
tabloda birden fazla Foreing Key olabilir. Bir tablodaki Foreing Key tekrar edebilir. Çünkü aynı
kayda referans eden birden fazla kayıt olması doğaldır.
Şekil 12: Foreing Key
3.7. Zorlayıcı (Constraint)
Herhangi bir alan için girilebilecek verileri kısıtlayıcı kurallara zorlayıcılar denir. İlgili
alana girilebilecek değerleri sınırlayan bir deyim yazılır. Kullanımı bazen çok faydalıdır2 .
Özellikle yanlış bilgi girişini engeller ve verilerin doğru girilmesini zorunlu hale getirir.
Kullanıcı, zorlayıcıda belirtilen kural dışında bir veriyi tabloya yazmaya çalıştığında VTYS
hata verir. Böylelikle veritabanına kullanıcının keyfi değerler girmesi önlenmiş olunur ve
veritabanında tutarlılık sağlanmış olunur.
Örneğin, bir öğrencinin sınıf bilgisine ait değerler yazılırken bu alan için rakamsal 1 ile
6 arasında bir zorlayıcı değer tanımlanırsa; veri girişi sırasında 1 ile 6 arasındaki değer dışında
2 Veri Tabanı Yönetim Sistemleri, Yrd. Doç. Dr. Zehra ALAKIÇ BURMA, Seçkin Yayıncılık, 2009,
Ankara.
42
bir değerin sınıf bilgisi alanına yazılması engellenmiş olunur. Dolayısı ile sınıf için yazılmaması
gereken bir değer; bilgi girişi başlangıcında kontrol edilmiş olunur.
Şekil 13: Zorlayıcı
Yukarıdaki resimde mavi çizgilerle çevrelenmiş alanda MS Access veritabanı
programında bir kısıtlayıcının tanımlanması yapılmış ve özellikle kullanıcı tarafından yanlış
bilgi girişi engellenmiş ve verilerin doğru yazılması zorunlu hale getirilmiştir.
3.8. Indeks (Index)
Kütüphanelerdeki kitapların raflardaki dizilişlerini ele alalım. Bir kitap arandığında,
kitaplar bir kurala göre dizilmemişlerse, her bir kitaba teker teker bakılması gerekir. Kitaplar
raflara alfabetik dizilirse, her bir kitap tek tek gözden geçirilmek zorunda kalınmaz. Aranılan
kitap ile bakılmakta olunan kitabın isimleri karşılaştırılır, sağa ya da sola yönelip aramaya
devam edilir. Aynı şekilde yazarlarına ya da kütüphane numarasına göre sıralanmış birer liste
olursa, bu kriterlere göre de aranılan kitap kolayca bulunur. Veritabanlarında indeks
oluşturularak, veriler veritabanındaki kayıtlı oldukları sıradan başka bir sırada gösterilebilir ve
tıpkı kütüphanedeki bir kitaba ulaşmada olduğu gibi istenilen veriye daha kısa sürede ve
kolayca ulaşılabilir.
43
Şekil 14: Indeks
Temelde indekslerin ilişkisel veritabanında şu üç işlevi vardır:
1. Tekil indeksler, veri ilişkilerini ve veri bütünlüğünü sağlayan birincil anahtar alanlar oluşturmada kullanılır.
2. Indeks olan alanın değerine göre bir kaydın kayıtlar arasındaki sırasını gösterirler.
3. Index, veritabanı sorgularını hızlandırır.
Constraint’ler (zorlayıcılar) aslında index’lere benzerler ama indekslerden farklı olarak
bir tek tablo üstünde etkili olmayabilirler. Özellikle yabancı anahtar zorlayıcısı ilişkisel veri
girişi için oldukça etkili bir zorlayıcıdır. Ancak bir Foreign Key tanımı yapabilmek için,
FOREIGN KEY yabancı anahtarının asıl tablosunda birincil anahtar olması gerekir.
Özetle; Index sorguları hızlandırmak için kullanılan bir özelliktir.
3.9. View (Görüntü)
Bazen tabloları olduklarından farklı gösterecek filtrelere ihtiyaç duyulur. Bu türden
işlevler için VIEW kullanılır. VIEW’ler, saklanmış sorgulardan ibarettirler. Aslında tablo gibi
kullanılsa da halihazırda böyle bir tablo veritabanında bulunmaz, sadece view (görüntüsü)
bulunur.
VIEW’ler şu görevler için kullanılır:
• Kullanıcıların bazı kritik tabloların sadece belli sütunlarını veya satırlarını görmesi istenildiğinde
• Veri ulaşım performansını arttırmak
44
• Halihazırdaki tablolarda var olan verilerin başka bir tablo formatında sunulması gerektiğinde
• Çok kompleks sorguları basitleştirmek için
• Birden çok tablo ile çalışırken gereksiz karmaşadan kurtulmak
Şekil 15: View
Özetle, View'ler bir veya birden fazla tablodan istenilen verilerin bir arada sunulmasını sağlayan tanımlanmış sorgulardır. Sanal bir tablo olarak da düşünülebilir.
3.10. İlişkilendirme (Joining)
Tek sorgu ile birden fazla tablodan bilgi alma işlemine ilişkilendirme denilir.
Şekil 16: İlişkilendirme
• Bazı veritabanı yazılımlarında sorgu kullanmadan ilişkilendirme yapılabilir. (MS
Access veritabanı gibi)
• Hazırlanan projede programlama dili kullanılıyorsa ilişkilendirme işlemi sorgu ile
yapılmalıdır.
45
• Öğrenci ve bölüm bilgilerinin ayrı ayrı tablolarda tutulduğu bir veritabanında öğrenci
bilgileri ve öğrencinin kayıtlı olduğu bölümün adını öğrenmek için ilişki kurulması
gerekmektedir.
• İlişkilendirme ayrıca veri tutarlılığını sağlamak için de kullanılır. Örneğin, bölüm
tablosunda olmayan bölüm kodunu öğrenci tablosunda kullanılmasının engellenmesi, öğrenci
tablosundan öğrenci silindiğinde diğer tablolarda o öğrenciye ait tüm bilgilerin silinmesi veya
değiştirilmesi için kullanılabilir.
Şekil 17: Tablolar Arası İlişkilendirme
3.11. Veritabanı İlişki Türleri
Microsoft Access gibi ilişkili bir veritabanı sisteminin gücü, ayrı tablolarda saklanan
bilgileri hızla bulması ve bunları Sorgular, Formlar ve Raporlar kullanarak bir araya
getirmesidir. Bunu yapabilmek için her tablo, tabloda saklanan her kaydı tek olarak tanımlayan
bir alan veya alanlar kümesi içermelidir. Bu bilgi, tablonun Birincil Anahtarı olarak adlandırılır.
Bir tabloya birincil anahtar atadığınızda, Access yinelenmeyi veya birincil anahtar alanlara Null
(Boş) değerler girilmesini önleyecektir.
Access'te tanımlanabilecek üç tür Birincil Anahtar vardır;
• Otomatik Sayı Birincil Anahtarı
• Tek Alan Birincil Anahtarı
• Birden Fazla Alan Birincil Anahtarı
46
Otomatik Sayı Birincil Anahtarı
Otomatik Sayı alanı, tabloya her kayıt eklenirken, otomatik olarak sırayı belirten sayının
girilmesi için ayarlanabilir. Tabloya böyle bir alanı birincil anahtar olarak atamak, birincil
anahtar oluşturmanın en kolay yoludur. Yeni oluşturulmuş bir tabloyu kaydetmeden önce
birincil anahtar ayarlamazsanız, Microsoft Access sizin için birincil anahtar oluşturmasını
isteyip istemediğinizi soracaktır. Yanıtınız Evet ise, Microsoft Access sizin için bir Otomatik
Sayı birincil anahtarı oluşturur.
Tabloya eklenen her kayıt için otomatik olarak benzersiz bir sayı depolayan Otomatik
Sayı alanı;
Uzun Tamsayı (Artan, Rasgele) ve (1,2,3 veya 1385153365, -1727810574)
Yineleme Kimliği ( {BD960141-3DDB-4A7E-9CFB-74A722B1885B} ) olarak iki
şekilde oluşturulabilir.
Tek Alan Birincil Anahtarı
Kimlik numaraları ve parça numaraları gibi benzersiz değerler içeren bir alanınız varsa, o alanı,
birincil anahtar olarak atayabilirsiniz.
Yinelenen veya Null değerler içermedikçe, önceden veri içeren bir alan için birincil anahtar
belirtebilirsiniz.
Şekil 18: Tek Alan Birincil Anahtarı
47
Birden Fazla Alan Birincil Anahtarı
Herhangi bir alanın benzersizliğini garanti edemediğiniz durumlarda, birincil anahtar
olarak iki veya daha çok alan atayabilirsiniz. Bu sorunun ortaya çıktığı en yaygın durum Çok-
Çok ilişkideki diğer iki tablo ile ilgili kullanılan tablodur.
Örneğin; Notlar tablosu, Öğrenciler ve Dersler tablolarını ilişkilendirebilir. Bu tablonun
Birincil Anahtarı iki alan içermektedir: Öğrenci Numarası ve Ders Kodu. Notlar tablosu pek
çok Öğrenci ve Ders içerebilir, ancak her Ders her Öğrenci için yalnız bir kez listelenir, bu
nedenle Öğrenci Numarası ve Ders Kodu alanlarını birleştirmek, uygun bir birincil anahtar
oluşturur.
Şekil 19: Birden Fazla Alan Birincil Anahtarı
48
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
49
Uygulama Soruları
1. Tablo Nedir? Açıklayınız.
2. Satır, Sütun Nedir? Açıklayınız.
3. Primary Key, Foreing Key Nedir? Açıklayınız.
4. İlişkilendirme Nedir? Örnekle Açıklayınız.
5. Veritabanı ilişki türleri nedir? Açıklayınız.
50
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde veritabanında yapacağımız uygulamalar öncesinde bilmemiz gereken temel
kavramları öğrendik. Tablonun verilerin saklandığı alan olduğunu, tablonundsa satır ve
sütunlardan oluştuğunu, satırın tablolarda bulunan belirli bir kayda ait veriler olduğunu,
sütunun ise satırlara ait farklı bilgileri tutuğunu öğrenmiş olduk. Ayrıca bir tabloda olması
gereken Primark Key ve diğer kavramların önemini öğrenmiş olduk.
51
Bölüm Soruları
1. Aşağıdakilerden hangisi tablo için yanlıştır? A. Tablolar satır ve sütunlardan oluşur B. Her satır tablo içinde tekil bir değere sahip olmalıdır C. Tablolar arası gerekli ilişkiler kurulmalıdır D. Veriler hücrelerde saklanır E. Her tabloda bir Foreing Key (Yabancı Anahtar) tanımlanmalıdır
2. Tabloda satırlara ait farklı bilgileri tutan alana ne ad verilir? A. Form B. Sütun (Column) C. Satır (Rows) D. Primary Key (Birincil Anahtar) E. Foreing Key (Yabancı Anahtar)
3. Tabloda her satırı tekil bir şekilde tanımlayan benzersiz anahtara ne ad verilir? A. Unique Key (Tekil Anahtar) B. Sütun (Column) C. Satır (Rows) D. Primary Key (Birincil Anahtar) E. Foreing Key (Yabancı Anahtar)
4. Bir tabloda herhangi bir alan için girilebilecek verileri kısıtlayıcı kurallara ne ad verilir?
A. Unique Key (Tekil Anahtar) B. Primary Key (Birincil Anahtar) C. Foreing Key (Yabancı Anahtar) D. Zorlayıcı (Constraint) E. Indeks (Index)
5. Aşağıdakilerden hangisi veritabanı ilişki türleri yanlıştır?
A. Otomatik Sayı alanı, tabloya her kayıt eklenirken, otomatik olarak sırayı belirten sayının girilmesi için ayarlanabilir
B. Herhangi bir alanın benzersizliğini garanti edemediğiniz durumlarda, birincil anahtar olarak iki veya daha çok alan atanabilir
C. Birincil anahtar oluşturmanın en kolay yolu Tek Alan Birincil Anahtarı Kullanmaktır
D. Access'te tanımlanabilecek üç tür Birincil Anahtar vardır; Otomatik Sayı Birincil Anahtarı, Tek Alan Birincil Anahtarı, Birden Fazla Alan Birincil Anahtarı
E. Bir tabloya birincil anahtar atadığında, Access yinelenmeyi veya birincil anahtar alanlara Null (Boş) değerler girilmesini önler
52
6. Aşağıdakilerden hangisi veritabanı tablosundaki sütunlarla ilgili olarak doğrudur? A. Tabloya girilen her bir kayıttır B. Sütunlar oluşturulan tablonun konusuyla ilgilidir C. Yeni kayıt girildiğinde sütun sayısı da artar D. Bir tabloda sütunlar, satırlara ait aynı bilgileri tutar E. Hiçbiri
7. Aşağıdakilerden hangisi veritabanındaki tablo için doğrudur?
A. Tabloda en fazla iki tane birincil anahtar olmalıdır B. Tabloda birden fazla birincil anahtar olabilir C. Tabloda sadece bir tane birincil anahtar olur D. Tabloda sadece bir tane yabancı anahtar olur E. Hepsi
8. Aşağıdakilerden hangisi veritabanı oluşturmadan önce yapmanız gereken adımlardan
biri değildir? A. İhtiyaç duyulan tabloları belirleme B. Tablolar arasındaki ilişkileri belirleme C. Veritabanının amacını belirleme D. Veritabanı adını ve tablo adlarını belirleme E. İhtiyaç duyulan sorguları belirleme
9. Aşağıdakilerden hangisi veritabanındaki tabloda birincil anahtar alanı olarak uygun
değildir? A. TC Kimlik No B. Öğrenci No C. Araç Plaka No D. Kitap ISBN No E. Öğrenci Adı
10. Bir tablodaki bir sütuna ait verilerin başka bir tablonun sütunundan getirilmesini sağlayan anahtar aşağıdakilerden hangisidir?
A. Birincil Anahtar B. Yabancı Anahtar C. Sütunlar D. Unique Kısıtlaması E. Unique kısıtlaması
Cevaplar
1)E 2)B 3)D 4)D 5)C 6)D 7)C 8)E 9)E 10)B
53
4. ACCESS VERİTABANINDA ALAN VE ÖZELLİKLERİ
54
Bu Bölümde Neler Öğreneceğiz?
4.1. Veri Türü
4.2. Access Veritabanı Veri Türleri
4.3. İlişkilerde Ve Birleştirmelerde Alan Türleri
55
Bölüm Hakkında İlgi Oluşturan Sorular
1. Veri Türü Nedir?
2. Kısa Metin ve Uzun Metin Veri Tipinin Farkı Nedir?
3. Access’teki En Önemli ve Sıkça Kullanılabileceğini Düşündüğünüz Veri Tiplerini
Örnekle Açıklayınız.
56
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Veri Türü Veri türünü tarif eder ve
örneklendirebilir
Ders notları, Sunumlar,
Kaynaklar
Access Veritabanı Veri
Türleri
Access’teki tüm veri türlerini
kavrar ve uygulama sırasında
kullanabilir
Ders notları, Sunumlar,
Kaynaklar, Uygulama
İlişkilerde Ve
Birleştirmelerde Alan Türleri
Access’te tablolar arası
ilişkilendirme yaparken
alanların aynı veri türüne
sahip olmasına
farkındalığına varır.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
57
Anahtar Kavramlar
Veri Türü, Metin, Sayı, Para Birimi, Tarih/Saat, Evet/Hayır, Otomatik Sayı
58
Giriş
Access’teki her tablo alanlardan oluşur. Bir alanın özellikleri, o alana eklenen verilerin
özelliklerini ve davranışını açıklar. Alanın veri türü en önemli özelliktir, çünkü alanda ne tür
verilerin depolanabileceğini belirler. Bu bölümde, Access’te sağlanan veri türleri ve diğer alan
özellikleri açıklanmaktadır.
59
4.1. Access Veritabanı Veri Türleri
Veri türü, bir değişken için ayrılacak bölgenin hangi formatta olacağını belirlemek için
kullanılır. Örneğin; sayısal bir değeri saklayacağımız değişken için sayısal bir veri tipi seçeriz
ya da metin tabanlı (adı, soyadı gibi) kavramları saklamak için metin tabanlı veri tipleri seçeriz.
Veri tipi (türü) belirlemede bir önemli nokta ise veri tipini seçmeden önce değişkene girilecek
değerin sınırlarını belirlemektir. Örneğin; sayısal bir değişken için girilecek verinin tam sayı ya
da ondalık sayı olduğuna karar vermek.
Veri türleri kafa karıştırıcı görünebilir, örneğin alanın veri türü Metin olduğunda, metin
veya sayısal karakterlerden oluşan verileri depolayabilir. Ama veri türü Sayı olan alanlarda
yalnızca sayısal veriler depolanabilir. Dolayısıyla, her veri türüyle hangi özelliklerin
kullanıldığını bilmeniz gerekir.
Şekil 20: Access Veritabanı Veri Türleri
60
Veri türü, alanın aşağıdakiler gibi diğer birçok önemli niteliğini de belirler:
• Alanda hangi biçimlerin kullanılabileceği.
• Alan değerinin boyut üst sınırı.
• Alanın ifadelerde nasıl kullanılabileceği.
• Alanın dizine alınıp alınamayacağı.
Kısa Metin: Girilecek olan verilerin sadece metin veya hem metin hem de sayı olduğu
durumlarda kullanılan veri türüdür. Bu alana girilen veriler üzerinde aritmetik işlem
yapılmayacak olan sayılardan da oluşabilir. (Örneğin Telefon numarası, T.C. Kimlik gibi)
Girilecek olan metnin uzunluğu boşluklar da dahil olmak üzere en fazla 255 karakter olabilir.
Not: Ofis 2013-2016’dan önceki versiyonlardaki adı “Metin”dir.
Uzun Metin: Çok miktarda alfasayısal veri: tümceler ve paragraflar için kullanılır.
Girilecek olan metnin uzunluğu boşluklar da dahil olmak üzere en fazla 65.535 karakter olabilir.
Not: Ofis 2013-2016’dan önceki versiyonlardaki adı “Not”tur.
Sayı: Üzerinde aritmetik işlemler yapılabilen ve içinde parasal bilgi bulunmayan alanlar
için kullanılan sayısal veri türüdür. Bu alana girilecek olan sayıların boyutu ve türünün ne
olacağı (Bayt, tam sayı, uzun tam sayı, tek, çift, ondalık, yineleme kimliği) Genel sekmesinde
bulunan alan boyutları ile belirlenir.
• Bayt: 0 ile 255 arasındaki tam sayıları depolar.
• Tam Sayı: -32,768 ile 32,767 arasındaki tam sayıları depolar.
• Uzun Tam Sayı: -2,147, 483,648 ile +2,147, 483,648 arasındaki tam sayıların depolanmasını sağlar. Örnek: 60000
• Tek: -3.402823x1038 ile +3.402823x1038 arasındaki ondalıklı sayıların depolanmasını sağlar.
• Çift: -1.79769313486232x10308 ile +1.79769313486232x10308 arasındaki ondalıklı sayıların depolanması için kullanılır. Örnek: 50000,389
• Ondalık: -10^28–1 ile 10^28–1 arasındaki ondalıklı sayıların depolanması için kullanılır.
61
• Çoğaltma Kimliği: Yineleme için gerekli olan genel benzersiz bir tanımlayıcıdır. 16 baytlık veri depolar.
Büyük Sayı: Bu veri türü, para olmayan sayısal değerleri depolar ve ODBC'deki
SQL_BIGINT veri türüyle uyumludur. Büyük sayıları verimli bir şekilde hesaplamak için bu
veri türü kullanılır.
Tarih/Saat: Tarih ve saat bilgisini tutmak için kullanılan veri türüdür. 100 ile 9999
arasındaki yıllar için bilgileri tutar.
Para Birimi: Parasal değerleri saklamak için kullanılan veri türüdür.
Otomatik Sayı: Tabloya yeni bir kayıt eklendiği zaman Veritabanı hazırlama programı
tarafından ardışık veya rastgele atanan benzersiz sayılardır. Otomatik sayı alanları kullanıcı
tarafından güncellenemez.
Evet/Hayır: İki değerden sadece bir tanesinin (Evet/Hayır, Doğru/Yanlış, Açık/Kapalı)
seçilmesi gerektiği durumlarda kullanılan veri türüdür.
OLE nesnesi: Veritabanındaki alanlara resim, ses, animasyon gibi nesneler eklenmesi
gerektiği durumlarda kullanılır. .accdb uzantılı dosyalarda, OLE Nesnesi alanları yerine Ek
alanları kullanılır.
Köprü: Tıklandığı zaman kullanıcıyı belirtilen adrese yönlendirmek için kullanılır.
İnternet adresleri veya farklı bir dosya gibi bağlantı kurulan bilgiler bu veri türünde tanımlanır.
Hesaplanmış (Hesaplanan Alan): Hesaplama sonuçlarını tutar. Hesaplama, aynı
tablonun başka alanlarına başvuru içermelidir. Örneğin [Miktar] * [Birim Fiyat] şeklinde
hesaplama yapılarak sonuç bu alandan saklanabilmektedir.
Not: Hesaplanmış (Hesaplanan Alan) ilk kez Access 2010'da kullanıma sunulmuştur.
Arama Sihirbazı: Birbirleri ile ilişkili alanlarda eğer tablodaki bilgi başka bir tablodan
alınacaksa kullanılan veri türüdür.
Ek: E-posta iletilerine eklenen dosyalara benzer biçimde, veritabanınızda kayıtlara
eklenen resimler, elektronik tablo dosyaları, grafikler ve desteklenen diğer dosya türleri.
62
4.2. İlişkilerde Ve Birleştirmelerde Alan Türleri
Tablo ilişkisi, iki tablodaki ortak alanlar arasındaki ilişkidir. İlişki bire bir, bire çok veya
çoka çok olabilir. Birleştirme, iki kaynaktan verileri, belirtilen alanda yer alan ve kaynakları
ortak olan değerler temelinde sorgunun kayıt kümesindeki tek bir kayıtta birleştiren bir SQL
işlemidir. Birleştirme iç birleşim, sol dış birleşim veya sağ dış birleşim olabilir.
Tablo ilişkisi oluştururken veya sorguya birleştirme eklerken, birbirine bağladığınız
alanlar aynı veya uyumlu veri türlerinde olmalıdır. Örneğin, Sayı alanıyla Metin alanı arasında
(söz konusu alanların değerleri eşleşse bile) birleştirme oluşturamazsınız.
İlişki veya birleştirmelerde Otomatik Sayı veri türüne ayarlanmış alanlar, Alan Boyutu
özelliği Uzun Tamsayı olarak ayarlanmış Sayı veri türüne ayarlanmış alanlarla uyumludur.
4.3. Veri Türlerini Karşılaştırma
Access veri türleri, MS SQL Server veri türlerinden farklı adlandırılır. Örneğin, bit veri
türündeki bir MS SQL Server sütunu Access'e Evet/Hayır veri türünde bağlanır veya içeri
aktarılır. Aşağıdaki tabloda, MS SQL Server ve Access veri türleri karşılaştırılmıştır.
SQL Server veri türü Access veri türü Access alan boyutu bigint Büyük Sayı
binary (alan boyutu) İkili SQL Server alan boyutuyla aynı bit Evet/Hayır
char (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
char (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
datetime Tarih/Saat
decimal (duyarlık, ölçek) Sayı Ondalık (Access Duyarlık ve Ölçek özellikleri, SQL Server'ın duyarlık ve ölçeğiyle eşleşir.)
float Sayı Çift image OLE Nesnesi
int Sayı Uzun Tamsayı money Para Birimi
nchar (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
63
nchar (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
ntext Not
numeric (duyarlık, ölçek) Sayı Ondalık (Access Duyarlık ve Ölçek özellikleri, SQL Server'ın duyarlık ve ölçeğiyle eşleşir.)
nvarchar (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
nvarchar (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
nvarchar(MAX) Not
real Sayı Tek smalldatetime Tarih/Saat
smallint Sayı Tamsayı smallmoney Para Birimi
sql_variant Metin 255 text Not
timestamp İkili 8 tinyint Sayı Bayt uniqueidentifier Sayı Çoğaltma Kimliği varbinary İkili SQL Server alan boyutuyla aynı varbinary (MAX) OLE Nesnesi
varchar (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
varchar (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
varchar(MAX) Not
xml Not
Tablo 1: Veri Türlerini Karşılaştırma
64
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
Access veritabanı üzerinde veri türleri incelenmeli
65
Uygulama Soruları
1. Veri Türü Nedir?
2. Access üzerinde bir tablo oluşturarak alanları ve bu alanlara uygun veri türü
belirleyiniz.
3. Access’teki veri türlerini program üzerinde inceleyiniz.
66
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde veri türünün ne olduğunu, Access veritabanında hangi veri türlerinin
olduğunu ve tablolar arasında ilişkilendirme yaparken ilişkilendirme yapılacak alanların veri
türlerininaynı ya da uyumlu olması gerektiğini öğrendik.
67
Bölüm Soruları
1. Veri Türü için aşağıdakilerden hangisi yanlıştır? A. Veri türü, bir değişken için ayrılacak bölgenin hangi formatta olacağını
belirlemek için kullanılır B. Alan değerinin üst sınırı belirler C. Alanının ifadelerde nasıl kullanılacağını belirler D. Alan değeri sayısal bir ifadeyse Tam Sayı ya da Ondalıklı Sayı olacağını
belirler E. Hiçbiri
2. Veritabanında bir alana nasıl veri girileceğinin denetlenmesi gerektiği durumlarda kullanılan veri tipi alan özelliği aşağıdakilerden hangisidir?
A. Biçim B. Giriş Maskesi C. Resim Yazısı D. Varsayılan Değer E. Alan Boyutu
3. Aşağıdakilerden hangisi veritabanında tablolarda kullanılan veri türlerinden değildir?
A. Kısa Metin B. Sayı C. OLE Nesnesi D. Biçim E. Ek
4. Veritabanında tablonun bir alanında resim, ses veya grafik gibi nesnelerin saklanması söz konusu ise veri tipi olarak aşağıdakilerden hangisi kullanılmalıdır?
A. Uzun Metin B. Sayı C. OLE Nesnesi D. Köprü E. Arama Sihirbazı
5. Access veritabanında Uzun Metin veri türü en fazla kaç karakteri saklayabilir?
A. 255 B. 65535 C. 45000 D. 1000 E. 955
68
6. Access veritabanında zaman bilgilerini saklamak için hangi veri türü kullanılır? A. Para Birimi B. Evet / Hayır C. Ole Nesnesi D. Tarih / Saat E. Köprü
7. Access veritabanında 0 ile 255 arasındaki tam sayıları saklamak için hangi veri türünü kullanmak gerekir?
A. Tam Sayı B. Uzun Tam Sayı C. Bayt D. Tek E. Ondalık
8. Access veritabanında ondalıklı sayıların saklanması kullanılması gereken veri türü
aşağıdakilerden hangisidir? A. Tam Sayı B. Uzun Tam Sayı C. Ondalık D. Çoğaltma Kimliği E. Büyük Sayı
9. Access veritabanında iki değerden sadece bir tanesinin (Doğru/Yanlış, Açık/Kapalı)
seçilmesi gerektiği durumlarda kullanılan veri türü aşağıdakilerden hangisidir? A. Arama Sihirbazı B. Ek C. Evet/Hayır D. Tarih/Saat E. Kısa Metin
10. Access veritabanında tıklandığı zaman kullanıcıyı belirtilen adrese yönlendirmek için
kullanılan veri türü aşağıdakilerden hangisidir? A. Arama Sihirbazı B. Köprü C. Ek D. Kısa Metin E. Ole Nesnesi
Cevaplar
1)E 2)B 3)D 4)C 5)B 6)D 7)C 8)C 9)C 10)B
69
5. ACCESS VERİTABANINDA TABLO VE TABLO
İLİŞKİLENDİRMELERİ
70
Bu Bölümde Neler Öğreneceğiz?
5.1. Veritabanı programında veritabanı ve yeni bir tablo oluşturmak
5.2. Önceden oluşturulmuş veritabanına tablo ve alan eklemek
5.3. Dış veri alarak tablo oluşturmak
5.4. Tabloda alan ekleme alan çıkarma
5.5. Access veritabanındaki oluştur menüsü altındaki bölümler
5.6. Access veritabanındaki Dış Veri sekmesi altındaki bölümler
5.7. Veritabanında tablo ve tablo ilişkilendirmeleri
5.8. İlişki türleri
71
Bölüm Hakkında İlgi Oluşturan Sorular
1. Veritabanı programında veritabanı ve yeni bir tablo nasıl oluşturulur?
2. Önceden oluşturulmuş veritabanına tablo ve alan nasıl eklenir?
3. Access veritabanında dış ortamdan veri alarak tablo nasıl oluşturulur?
4. Tabloda alan ekleme yada alan çıkarma işlemi nasıl yapılır?
7. Veritabanında tablo ilişki türleri nelerdir? Açıklayınız.
72
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Veritabanı oluşturma Access’te veritabanı
oluşturabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
Tablo oluşturma Access’te tablo oluşturur,
alan ekleyebilir, alan
çıkartabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
Access Oluştur Sekmesi ve
Dış Veri Sekmesi
Access veritabanındaki
Oluştur sekmesi ve Dış Veri
Sekmesi altındaki bölümleri
kavrar, uygulama sırasında
kullanabilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
Access Veritabanı Veri
Türleri
Access’teki tüm veri türlerini
kavrar ve uygulama sırasında
kullanabilir
Ders notları, Sunumlar,
Kaynaklar, Uygulama
Veritabanında tablo ve tablo
ilişkilendirmeleri
İlişki türlerini kavrar,
tablolar arası ilişkilendirme
yapmaya hazır konuma gelir
Ders notları, Sunumlar,
Kaynaklar, Uygulama
73
Anahtar Kavramlar
Veritabanı oluşturma, tablo oluşturma, alan oluşturma, alan çıkarma, ilişki türleri
74
Giriş
Tablolar, veritabanlarında bilgilerin tutulduğu veri gruplarıdır. Tablo içerisinde yer alan
her bilgi kayıt, sütunlar ise alan olarak adlandırılır. Kayıtlar adı, soyadı, adresi gibi alanlardan
oluşmaktadır.
Şekil 21: Veritabanı, tablo ve alanlar
Bir veritabanı tasarlanırken diğer veritabanı nesnelerini oluşturmadan önce yapılması
gereken ilk işlemin tablo oluşturma olması gerekmektedir.
Tablo oluşturmaya başlamadan önce hangi tablolara ihtiyaç olduğunu belirlemek için
veritabanı ihtiyaç analizini yapmış olmak gerekir.
Access veritabanının dosya uzandısı .mdb’dir. Ofis 2007 ve sonraki yıllarda piyasaya
sürülen paket içindeki Access veritabanı .accdb dosya uzantısını kullanmaktadır. Yeni alan
türlerini kullanmak için veritabanının .accdb olarak kaydetmek gerekir.
5.1. Yeni Bir Veritabanında Yeni Bir Tablo Oluşturmak
İlk olarak bir veritabanı oluşturmamız gerekiyor. Bunun için Microsoft Ofis Access’te
Yeni > Boş Veritabanı tıklanır. Gelen pencerede “Dosya Adı” kutusuna hazırlayacağınız
veritabanınızın ismi yazılır. Kaydetmek istediğiniz konum belirlendikten sonra Oluştur
düğmesine tıklanır.
75
Şekil 22: Veritabanı Oluşturma
Oluştur düğmesine tıklandıktan sonra yeni bir veritabanı açılır ve Veri sayfası
görünümünde Tablo1 isimli tablo otomatik olarak oluşturulur.
Şekil 23: Access Veritabanından Otomatik Oluşan Tablo1 Adındaki Tablo
Veri Sayfası görünümünden Tasarım görünümüne geçmek için “Tablo 1” sağ tıklanıp
“Tasarım Görünüm”e tıklanır. Veri Sayfası görünümünden Tasarım görünümüne geçildiği
zaman tablo ismini kaydetmemizi isteyen aşağıdaki pencere ekrana gelecektir.
76
Şekil 24: Tablo1 Adındaki Tabloyu Kaydetme
Tablo ismi yazılıp Tamam düğmesine tıklandıktan sonra Tasarım Görünümünde tablo
oluşturma penceresi ekranda görünecektir.
Şekil 25: Tablo1 Adındaki Tabloda Alan Oluşturma Arayüzü
Tasarım Görünümündeyken Ad, Soyad ve Adres Alanlarını ekleyip veri türlerini
belirleyelim.
77
Şekil 26: Tablo1 Adındaki Tabloda Oluşturulan Alanlar
Böylelikle Tablo1 adında bir tablo ve Kimlik, Adı, Soyadı, Adres alanlarının olduğu bir
veritabanı oluşturmuş olduk.
5.2. Önceden Oluşturulmuş Veritabanında Yeni Bir Tablo
Oluşturmak
Daha önceden oluşturulmuş olan Veritabanında yeni bir tablo oluşturmak için
• Dosya > Aç menüleri kullanılarak var olan veritabanı dosyası açılır.
• Oluştur sekmesindeki Tablolar grubundan seçeneği seçilip yeni boş bir tablo
oluşturulur.
Şekil 27: Yeni Bir Tablo Oluşturma
• Tablo oluşturduktan sonra tablo alanlarınızı veri sayfası görünümünde
tanımlayabileceğiniz gibi tasarım görünümüne geçiş yaparak da bu işlemi
gerçekleştirebilirsiniz.
78
5.3. Dış Verileri Alarak Yeni Bir Tablo Oluşturmak
Başka bir yerde depolanmış (Örneğin bir hesaplama tablosu programında, bir XML
dosyasında, başka bir veritabanında) bilgileri alarak veya bunlara bağlantı kurarak tablo
oluşturabilirsiniz. Bunu yaparken geçerli veritabanındaki yeni bir tabloda bilgilerin bir
kopyasını oluşturabiliriz. Bunun için;
• Yeni bir veritabanı oluşturulur veya mevcut veritabanlarından birisi açılır.
• Dış veri sekmesindeki Al grubundan nereden veri alınacaksa seçilerek işlem
gerçekleştirilir.
Şekil 28: Access Veritabanı Dış Veri Sekmesi
• Nereden veri alınacaksa seçildikten sonra açılan pencerelerdeki adımları
izleyerek tablo oluşturulmuş olunur.
5.4. Tabloda Alan Ekleme Alan Çıkarma
Bazı durumlarda tablonuza yeni bir sütun (alan) eklemeniz veya istemediğiniz bir
alanı silmeniz gereken durumlar olabilir.
Alan Ekleme
• Herhangi bir tabloya yeni bir alan eklemek için Tablo Veri Sayfası görünümünde iken
imleci tabloda sütun eklemek istediğimiz yere konumlandırıp Veri Sayfası sekmesi altında yer
alan Alanlar grubundan ne tür bir alan ekleyeceksek o seçilir.
Şekil 29: Alanlar Sekmesi
79
• Sütun eklemek için kullanılan diğer yol ise tabloda sütun eklemek istediğiniz alan
seçilir. Farenin sağ tuşuna tıklanır ve açılan menüden seçeneği seçilir. Bu
işlem yapıldıktan sonra seçmiş olduğunuz alanın sol tarafına yeni bir sütun eklenmiş
olacaktır.
Şekil 30: Tabloya Yeni Bir Alan Ekleme
Alan Çıkarma (Silme)
• Silmek istediğiniz sütun seçildikten sonra farenin sağ tuşuna basılır. Açılan menüden
düğmesine tıklanır.
Şekil 31: Tablodan Alan Çıkarma
80
• Diğer yöntem ise silmek istenilen sütun seçildikten sonra Tablo Araçları sekmesi
altında yer Alanlar grubundan simgesine tıklanılır.
Tablo tasarım görünümünde iken de tabloya yeni bir alan eklenip çıkartılabilir. Bunun için tablo
tasarım görünümündeyken yeni bir alan adı yazıp veri türünü belirlediğimizde yeni bir sütun
ekleme işlemi gerçekleştirmiş oluruz.
Tablo tasarım görünümündeyken bir alanı silmek istediğimizde silmek istediğimiz alanın
bulunduğu satırı seçtikten sonra Tasarım sekmesindeki Araçlar grubunda yer alan
düğmesine tıklanır. Diğer bir yol ise silmek istediğimiz alanın bulunduğu satırı seçip farenin
sağ tuşuna bastığımızda açılan menüden komutunu seçmek olacaktır.
Şekil 32: Tablo Tasarım Arayüzünden Alan Çıkarma
5.5. Oluştur Sekmesi Altındaki Bölümler
Şekil 33: Access Veritabanı Oluştur Sekmesi
Tablo: Veritabanında yeni bir tablo oluşturmak için kullanılır.
81
Tablo Tasarımı: Tasarım görünümde tablo oluşturmak için kullanılır.
SharePoint Listeleri: SharePoint listelerinden veri alan veya verileri bu listelere ekleyen tablolar oluşturulur.
Şekil 34: Access Veritabanı Oluştur Sekmesindeki Nesneler
Form: Bir tabloya veri girmek, güncellemek veya görüntülemek için bir form ekler.
Form Tasarımı: Tasarım görünümünde bir form oluşturmak için kullanılır.
5.6. Dış Veri Sekmesi Altındaki Bölümler
Şekil 35: Access Veritabanı Dış Veri Sekmesi
Dış ortamdaki kaynaklardan veritabanımıza veri aktarmak için Dış Veri bölümü kullanılır.
5.7. Veritabanında Tablo ve Tablo İlişkilendirmeleri
İyi bir veritabanı tasarımı hedeflerinden biri veri fazlalığını (yinelenen verileri) ortadan
kaldırmaktır. Bu hedefe ulaşmak için, verilerinizi konu temelinde tablolara ayırarak her
konunun yalnızca bir kez temsil edilmesini sağlamak gerekir.
82
5.8. İlişki Türleri
Bir-Bir İlişkisi (1-1)
Bir-Bir İlişkisinde, Tablo A'da Tablo B'deki her kayıtla eşleşen yalnızca BİR kayıt ve
Tablo B'de Tablo A'daki her kayıtla eşleşen sadece BİR kayıt olabilir.
Bu şekilde ilişkili olan çoğu bilgi tek bir tabloda olacağından, bu tür ilişki yaygın
değildir. Güvenlik nedenleriyle tablonun bir bölümünü yalıtmak veya ana tablonun yalnızca bir
alt kümesiyle ilgili bilgileri saklamak üzere, birçok alan içeren bir tabloyu bölmek için Bir-Bir
İlişkisi kullanılabilir.
Şekil 36: Bir-Bir İlişkisi
Bir-Çok İlişkisi (1 - n)
İlişkisel veritabanlarında en çok kullanılan ilişki türü, Bir–Çok İlişkisi’dir. Bir–Çok
İlişkisinde, “A” Tablosundaki bir kayıt, “B” tablosunda pek ÇOK eşleşen kayda sahiptir. Ancak
“B” Tablosundaki kayıt, “A” Tablosunda yalnızca BİR eşleşen kayda sahiptir.
Örneğin; bir yazar, birden ÇOK kitap yazabilir ancak her kitabın yalnızca BİR Yazarı
vardır. Birden çoğa ilişkide bir tablodaki anahtar ilişkili olduğu tabloda birden çok kez olabilir.
Şekil 37: Bir-Çok İlişkisi
83
Yukarıdaki şekilde bir karikatürcünün birden fazla karikatüre sahip olabileceğini çıkartabiliriz.
Çünkü Karikatür tablosunda ilişkili olduğu tablonun anahtarı bulunuyor (Foreign Key). Bu
ilişki türü en çok kullanılan ilişki türüdür.
Çok – Çok İlişkisi (n-m)
Çok–Çok İlişkisinde, “A” Tablosundaki bir kayıt, “B” tablosunda bulunan pek ÇOK
kayıtla eşleşebilir ve “B” Tablosundaki bir kayıt, “A” Tablosunda bulunan pek ÇOK kayıtla
eşleşebilir.
Bu tür bir ilişki, birincil anahtarın birden fazla alanı içerdiği, birleşme tablosu olarak
adlandırılan, A ve B Tablolarından gelen yabancı anahtarların yer aldığı üçüncü bir tablonun
tanımlanması koşuluyla mümkündür.
Çoktan çoğa ilişkiler karmaşıklığı nedeniyle veritabanında birçok soruna neden olur. Soruna
neden temek olarak şudur; bir tablodaki anahtar ilişkili olduğu tabloda birden çok kez
olabilirken karşıtı da doğrudur. Bu yüzden istenilen ilişkiselliği sağlamak için ilişkiyi birden
çoğa indirgemek gerekir. Yani araya fazladan bir tablo koyarak karmaşıklıktan kurtulmuş
oluruz.
Örneğin; bir futbolcu birden fazla takımda oynayabilirken aynı takım birden fazla oyuncu
oynatabilir olduğunu varsayalım. Öncelikle Futbolcular ve Takımlar adında aşağıdaki şekildeki
gibi iki tane tablo oluşturalım:
Şekil 38: Çok – Çok İlişkisi
Anahtarı ilişkisel olduğu tabloya Foreign Key (Komşu Anahtar) ekleyerek çoktan çoğa ilişkiyi
sağlamak düşünürseniz mümkün değil. Bu yüzden araya aşağıdaki gibi bir tablo ekleyelim:
84
Şekil 39: Çok – Çok İlişkiye Foreing Key Ekleme
Böylece ilişkisel veritabanı tasarımını yapmış olduk. Çoktan çoğa ilişkiyi birden çoğa
indirgediğimiz için iki tane birden çoğa ilişki elde ettik yine bu sebepten iki tane FK (Foreign
Key) ortaya çıktı. Dolayısıyla SQL sorgusu iki adet olacak. Birincisi bir futbolcunun oynadığı
takımlar, ikicisi ise bir takımda oynayan futbolcular olacak.
85
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
Access veritabanı üzerinde veritabanı oluşturma uygulaması yapılmalı
Access veritabanı üzerinde tablo oluşturma uygulaması yapılmalı
Access veritabanı üzerinde tabloya alan ekleme ve alan çıkarma uygulaması yapılmalı
86
Uygulama Soruları
1. Access veritabanı üzerinde veritabanı oluşturunuz.
2. Access veritabanı üzerinde tablo oluşturarak uygun alanlar ekleyiniz.
3. Access veritabanı üzerinde varolan tabloda alan veri türünü değiştiriniz, yeni alan
ekleyip alan çıkartınız.
87
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde Access veritabanı programı üzerinde veritabanı oluşturmayı, tablo
oluşturmayı, tabloda alan oluşturmayı, alanların veri türünü belirlemeyi öğrendik. Bunların
yanında Access veritabanında önemli işlevlere sahip olan Oluştur sekmesi ve Dış veri
sekmesindeki menülerin ne işe yaradığını öğrendik. Ayrıca ilişki türlerinin bir-bir, bir-çok ve
çok-çok olduğunu öğrenmiş olduk.
88
Bölüm Soruları
1. Access veritabanı programında yeni bir veritabanı oluşturma adımları aşağıdakilerden hangisidir? A. Giriş -> Yeni -> Boş Veritabanı B. Oluştur -> Yeni -> Boş Veritabanı C. Dosya -> Yeni -> Boş Veritabanı D. Dış Veri -> Yeni -> Boş Veritabanı E. Veritabanı Araçları -> Yeni -> Boş Veritabanı
2. Access veritabanı programında yeni bir tablo oluşturma adımları aşağıdakilerden hangisidir? A. Dosya -> Tablo B. Giriş -> Tablo C. Dış Veri -> Tablo D. Oluştur -> Tablo E. Veritabanı Araçları -> Tablo
3. A tablosundaki bir kaydın B tablosundan bir kayda karşılık geldiği ilişki türü aşağıdakilerden hangisidir? A. Bir – Bir B. Bir – Çok C. Çok – Çok D. Bir - Üç E. Hiçbiri
4. A tablosundaki bir çok kaydın B tablosundan bir çok kayda karşılık geldiği ilişki türü aşağıdakilerden hangisidir? A. Bir – Bir B. Bir – Çok C. Çok – Çok D. Bir – Üç E. Hiçbiri
5. Access veritabanı dosya uzantısı aşağıdakilerden hangisidir? A. .mdf B. .mdb C. .doc D. .xls E. .ppt
89
6. Access veritabanında bir tabloya veri girmek, güncellemek veya görüntülemek için aşağıdakilerden hangisi kullanılır? A. Tablo B. Sorgu C. Form D. Rapor E. Makro
7. Access veritabanında var olan veritabanını açmak için aşağıdaki yollardan hangisini kullanmak gerekir? A. Dosya -> Bilgi B. Dosya -> Aç C. Dosya ->Yeni D. Veritabanı Araçları -> Aç E. Dış Veri -> Aç
8. Access veritabanı programında Oluştur sekmesi altında hangi bölümler yoktur? A. Tablo Tasarımı B. Sorgu Tasarımı C. Form Tasarımı D. Rapor Tasarımı E. Plan Tasarımı
9. Access veritabanı programında Tablolar grubu hangi sekmede yer alır? A. Giriş B. Oluştur C. Dış Veri D. Veritabanı Araçları E. Dosya
10. Access veritabanında basit sorgu, çapraz sorgu, yinelenenleri bulma sorgusu veya eşleşmeyenleri bulma sorgusu oluşturmamızı sağlayan A. Sorgu Tasarımı B. Sorgu Sihirbazı C. Tablo Tasarımı D. Form Sihirbazı E. Rapor Sihirbazı
Cevaplar
1)C 2)D 3)A 4)C 5)B 6)C 7)B 8)E 9)B 10)B
90
6. SQL - YAPISAL SORGULAMA DİLİ
91
Bu Bölümde Neler Öğreneceğiz?
6.1. SQL Dilinin Yapısı
6.2. SQL Deyimleri
6.3. Sorgu Oluşturma
92
Bölüm Hakkında İlgi Oluşturan Sorular
1. SQL Nedir? Açıklayınız.
2. Sorgu Niçin Oluşturulur? Açıklayınız.
3. Sorgu Türleri Nelerdir?Açıklayınız.
4. SQL Deyimleri Nelerdir? Açıklayınız.
93
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Sorgu Access veritabanında sorgu
oluşturabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
SQL Dilinin Yapısı SQL Dilinin yapısını kavrar,
Access’te uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
SQL Deyimleri SQL Deyimlerini kavrar,
Access veritabanında bu
deyimlerin uygulamasını
yapabilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
94
Anahtar Kavramlar
SQL, DDL, DML, Create, Alter, Drop, Insert Into, Delete, Update, Select
95
Giriş
Veritabanında tablo oluşturma işleminden sonra önemli işlem “Sorgular”
oluşturmaktır. Tablolardaki kayıtlarda silme, ekleme, sıralama, seçme, değiştirme gibi
işlemlere ihtiyaç duyulduğunda sorguları kullanmak gerekir. Ayrıca, yapılan bir takım işlemleri
otomatikleştirmek ve verilerde yapılan değişiklikleri kaydetmeden önce gözden geçirmek
istendiği zaman da sorgular oluşturulur.
Tablonun yapısına ve verileri görüntüleme yöntemine göre değişik özelliklerde sorgular
hazırlanmaktadır. Seçme sorguları, parametre sorguları, çapraz sorgular, eylem sorguları ve
SQL sorguları kullanılan sorgu türleridir.
Ø Seçme Sorguları: En sık kullanılan sorgu türüdür. Seçme sorguları, bilgileri
“veri sayfası görünümü”nde gösteren veritabanı nesnesi türüdür. Sorgu, verileri
bir veya birden fazla tablodan, mevcut sorgulardan veya bunların her ikisinden
alabilmektedir.
Ø Parametre Sorguları: Parametre sorguları, çalıştırıldığı zaman bir ölçüt
girilmesini sağlayan iletişim kutusunu açan sorgulardır. Örneğin bir okuldaki
personelin ocak ayında sevk aldığı günleri görmek istiyorsak, açılan iletişim
kutusuna ölçüt olarak istenilen tarih aralıkları girilir ve bu tarihler arasındaki
veriler listelenir.
Ø Çapraz Sorgular: Bir tablodaki bilgileri analiz etmek, karşılaştırmak ve
tablonun özetini hazırlamak için kullanılan sorgu türüdür. Belirtilen iki alana
göre istenilen işlemi (toplama, ortalama, vs.) tablo şeklinde göstermekte
kullanılır.
Ø Eylem Sorguları: Tek işlemle birçok kayıtta değişiklik yapan sorgulardır. Silme
sorgusu, güncelleştirme sorgusu, ekleme sorgusu ve tablo yapma sorgusu olmak
üzere dört çeşit eylem sorgusu vardır.
Ø SQL Sorguları: SQL deyimlerini kullanarak veritabanını güncelleştirme ve
yönetme ile ilgili oluşturulan sorgulardır.
96
6.1. SQL Dilinin Yapısı
SQL (Structured Query Language), veritabanındaki verileri okumak, güncellemek, yeni
veri eklemek, verileri silmek vb. gibi işlemleri yapan, program yazarken kolaylıklar sağlayan,
satırlarca kodun yaptığı işlemi tek bir sorguda yapabilen, yapısal bir sorgulama dilidir.
• Yapısal sorgulama dilidir.
• Veritabanları için geliştirilmiştir.
• Programcının gerek veri üzerinde işlem gerekse veri tanımlamasını kolaylaştıran
bir dildir.
• Tüm yazılım geliştiriciler SQL öğrenmek zorundadır.
• SQL bir programlama dili değil, sorgulama dilidir.
6.2. SQL Deyimleri
SQL komutları işlevlerine göre 3'e ayrılır:
1. DDL (Data Definition Language) Veri Tanımlama Dili:
Yeni tablo oluşturma, var olan tablo üzerinde değişiklik yapma ve tablo silme
işlemlerini yerine getirirler. (CREATE, ALTER, DROP)
2. DML (Data Manuplation Language) Veri Düzenleme Dili:
Bir tablo içerisinde bulunan veriler üzerinde sorgulama, ekleme, güncelleme ve silme
işlemlerini gerçekleştirir. (INSERT, DELETE, UPDATE, SELECT)
3. DCL (Data Control Language) Veri Kontrol Dili:
Bu gruptaki komutlar, kullanıcılara veritabanı üzerinde bazı haklar verme veya verilen
hakları geri alma gibi işlemlere olanak tanıyan komutlardır. (GRANT, DENY, REVOKE vb.)
97
6.2.1. DDL (Data Definition Language) Veri Tanımlama Dili
CREATE (Nesne Oluşturmak)
Veritabanındaki nesnelerin oluşturulabilmesi için CREATE komutu kullanılır.
Oluşturulacak nesnenin özellikleri dikkate alınarak farklı parametreler kullanılmalıdır.
Örnek:
Create Table Ogrenci(
OgrNo int,
AD varchar(10),
SOYAD varchar(10))
/*Ogrenci adında tablo oluşturur. Tablo sütunları OgrNo, AD, SOYAD’dır. */
Şekil 40: Access Veritabanında Tablo Oluşturma
Çalıştır düğmesine basıldığında aşağıdaki sonuç elde edilir.
Şekil 41: Access Veritabanında Sorguyla Oluşturulan Tablo ve Alanlar
98
ALTER (Nesnelerde Değişiklik Yapmak)
Mevcut veritabanı tablosunda alan ekler veya alan siler.
Örnek:
Alter Table Ogrenci add TCNo int /* Ogrenci tablosuna TCNo isimli alan ekler. */
Şekil 42: Mevcut Veritabanına Sorguyla Alan Ekleme
Şekil 43: Mevcut Veritabanına Sorguyla Eklenen Alan
Örnek:
Alter Table Ogrenci Drop Column OgrNo /*Ogrenci tablosundan OgrNo isimli alanı
siler.*/
Şekil 44: Tablodan Sorguyla Alan Silme
Şekil 45:Tablodan Sorguyla Silinen Alan
99
DROP (Nesne Silmek)
Bir nesnenin silinmesini sağlayan komuttur.
Örnek:
drop table Ogrenci /* Ogrenci tablosunu siler*/
Şekil 46: Access Veritabanında Sorguyla Tablo Silme
Şekil 47: Access Veritabanında Sorguyla Silinen Tablo
6.2.2. DML (Data Manuplation Language) Veri Düzenleme Dili
INSERT INTO
Veritabanındaki tabloların belirtilen alanlarına veri eklemek (yeni kayıt) için kullanılır.
100
Kullanımı:
INSERT INTO Tablo_Adı (Alan listesi) VALUES (Veri listesi)
Tablo_Adı: Kayıt eklenecek tablonun adı
Alan Listesi: Bilgi girişi yapılacak alanların listesi
Veri Listesi: Belirtilen alanlara girilecek bilgilerin listesi
Örnek:
Insert Into Ogrenci (OgrNo, AD, SOYAD) values (0914113056, 'Ali', 'Kaan') /*OgrNo
alanına 0914113056, AD Alanına Ali, SOYAD alanına Kaan ekler. Metin tipindeki alanlara
bilgi girişi yapılırken bilgiler tırnak işaretleri içinde belirtilir. Sayı tipindeki alanlarda ise
doğrudan sayısal ifade yazılır. */
Şekil 48: Tabloya Sorguyla Veri Ekleme
Şekil 49: Tabloya Sorguyla Eklenen Veri
101
DELETE FROM
Tablodan belirtilen şarta göre veri siler.
Kullanımı:
DELETE FROM Tablo_Adı
Tablo_Adı: Silinecek tablo adı. Bu tablodaki tüm kayıtlar silinir.
Örnek
delete from Ogrenci /* Öğrenci tablosu ve içindeki veriler silinir. */
Ayrıca WHERE komutu kullanılarak süzme işlemine göre de silme işlemi yapılabilir.
Kullanımı
DELETE FROM Tablo_Adı [WHERE şart]
TabloAdı: Kayıtları silinmek istenen tablonun adı
Şart: Delete From deyiminde Where komutu kullanılırsa Şarta uyan kayıtlar silinir.
Örnek
delete from Ogrenci Where AD='Ali' /* Adı 'Ali' olan öğrencilerin verilerini siler. */
102
UPDATE
Tablodaki verileri güncellemek için kullanılır.
Kullanımı
UPDATE Tablo_Adı Set Alan = İşlem [WHERE Koşul]
Tablo_Adı: Güncelleme yapılacak tablonun adı
Alan: Güncelleme yapılacak alan adı
Koşul: Update deyimi ile Where komutu kullanılırsa koşula uyan kayıtlarda güncelleme
işlemi yapılır.
Örnek
Şekil 50: Update Deyimini Kullanmadan Önce Tablodaki Bilgileri
update Ogrenci set AD='Veli' where SOYAD='Kaan' /* Soyadı Kaan olanların Adını
Veli olarak değiştirir. */
Şekil 51: Update Deyiminin Uygulanması
103
Şekil 52: Update Deyimini Kullandıktan Sonra Tablodaki Bilgileri
Örnek
update Ogrenci set Notu=Notu*1.20
Ogrenci tablosundaki Not alanındaki değer 1.20 ile çarpılıp tekrar Not alanına
kaydedilir. Yani öğrenci notlarına %20’si kadar eklenmiş olunur.
Örnek
update Ogrenci set Notu=Notu + 20 Where EskiOgr='1'
EskiOgr alanında 1 değeri olan kayıtlara Not alanındaki değere 20 ekler.
SELECT
Veritabanındaki verilere erişmenin diğer bir deyişle onları görmenin yada onları elde
etmenin en sık kullanılan yöntemidir. Genellikle bir yada daha çok tablonun bütün alanları yada
belli alanları için SELECT deyimi kullanılır.
Temel Yapısı:
SELECT [ALL] [DISTINCT] [TOP n [PERCENT]] Liste [INTO yeni tablo] FROM
Tablo
[WHERE ifade]
[GROUP BY ifade]
[ORDER BY ifade]
[HAVING ifade]
104
Deyimlerin Anlamları:
ALL: Bütün satırların sonuç listesinde görünmesini sağlar.
DISTINCT: Sadece tek olan (unique) kayıtların sonuç listesinde yer almasını sağlar.
Liste: Tablolarda yer alan ve listede yer alması istenen alan listesi
INTO: Yeni bir tablo oluşturmayı sağlar
Yeni Tablo: Sorgu sonucu oluşturulacak tablonun adı
FROM: belli tablonun seçilmesini sağlar. FROM'dan sonra tablo isimleri ve diğer
işlemler gelir.
Tablo: Sorguda kullanılacak tablo adı
WHERE: bu komuttan sonra belirtilen koşula uyan kayıtları listeler.
GROUP BY: kayıtların gruplandırılmasını sağlar. HAVING komutuyla da ara
toplamların alınmasını sağlar.
HAVING: Group By komutu ile SQL Toplama fonksiyonları beraber kullanıldığında
hesaplanan kayıtlarda kısıtlama yapar
ORDER BY: Belirtilen alana göre kayıtları sıralamayı sağlar. ASC kullanılırsa
sıralama artan, DESC kullanılırsa azalan olur.
Örnek
select * from Ogrenci /*Bu ifade de * işareti tüm alanları belirtmektedir. Yani sorguda
tüm alanlar gösterilecekse her alanı tek tek yazmak yerine * işareti kullanılabilir.*/
Şekil 53: Select Deyimi İle Tablodaki Bilgileri Seçme
105
Şekil 54: Select Deyimi İle Seçilen Tablodaki Bilgiler
Örnek
select AD, SOYAD from Ogrenci /*Sadece Ad ve soyadı listeler*/
Örnek
select AD,[Telefon No] from Ogrenci /*Bu SQL ifadesinde alan isimleri içinde boşluk
karakteri kullanıldığı için köşeli parantezler içinde yazılmıştır.*/
Örnek
SELECT AD, SOYAD,[Telefon No], Vize, Final, Vize * 0.4 + Final * 0.6 As [Başarı
Notu] FROM Ogrenci /*Bu SQL ifadesinde ise Vize ve Final alanlarından sonra görünümde
yeni bir alan eklenmiştir. Bu alan Vize ve Final alanlarını kaynak alarak hesaplanmış ve Alan
adı olarak ta Başarı Notu verilmiştir.*/
106
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
Access veritabanı üzerinde veritabanı oluşturma uygulaması yapılmalı
Access veritabanı üzerinde sorgularla tablo oluşturma uygulaması yapılmalı
Access veritabanı üzerinde tabloya alan ekleme ve alan çıkarma uygulaması sorgu ile
yapılmalı
Access veritabanı üzerinde SQL Deyimleri uygulanmalı
107
Uygulama Soruları
1. Access veritabanında örnek bir tablo ve alanlarını oluşturunuz..
2. Access veritabanında var olan bir tabloya yeni bir alan ekleyiniz.
3. Access veritabanında var olan bir tablodan bir alan siliniz.
4. Access veritabanında oluşturmuş olduğunuz tabloya sorguyla veri girişi yapınız.
5. Access veritabanında oluşturmuş olduğunuz tablodaki bir kaydı güncelleyiniz.
6. Access veritabanında oluşturmuş olduğunuz tablodaki bir kaydı siliniz.
7. Access veritabanında oluşturmuş olduğunuz tabloya siliniz.
108
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde tablolardaki kayıtlarda silme, ekleme, sıralama, seçme, değiştirme gibi
işlemlere ihtiyaç duyulduğunda sorguları kullanmak gerektiğini, bu işlemler için kullanmamız
gereken komutların insert into, delete, update ve select olduğunu öğrendik. Ayrıca sorguyla
beraber tablo oluşturmayı, tablo içindeki alanları (sütunları) oluşturmayı öğrendik.
109
Bölüm Soruları
1. Aşağıdakilerden hangisi DML (Data Manuplation Language) Veri Düzenleme Dili komutlarından değildir?
A. Insert B. Delete C. Create D. Update E. Select
2. Aşağıdakilerden hangisi bir nesnenin silinmesini sağlayan SQL deyimidir? A. Alter B. Create C. Drop D. Update E. Select
3. Aşağıdakilerden hangisi veritabanındaki tabloların belirtilen alanlarına veri eklemek (yeni kayıt) için kullanılan SQL deyimidir? A. Insert Into B. Delete From C. Create D. Update E. Select
4. Aşağıdakilerden hangisi tablodan belirtilen şarta göre veri silme işlemini yapan SQL deyimidir? A. Insert Into B. Delete From C. Create D. Update E. Select
5. Aşağıdakilerden hangisi tablodaki verileri güncellemek için kullanılan SQL deyimidir? A. Insert Into B. Delete From C. Create D. Update E. Select
6. Aşağıdakilerden hangisi veritabanındaki bir veya birden fazla tablodan veri almak için kullanılan SQL deyimidir? A. Insert Into
110
B. Delete From C. Create D. Update E. Select
7. Aşağıdakilerden hangisi veritabanında kayıtları belirtilen alanda büyükten küçüğe veya küçükten büyüğe göre sıralama işlemi yapan SQL deyimidir? A. Ordey By B. Having C. Group By D. Where E. Distinct
8. Aşağıdakilerden hangisi Select deyimiyle kullanılınca yeni bir tablo oluşturmayı sağlar? A. Distinct B. All C. From D. Into E. Where
9. Birden fazla sütun içinde gruplama yapmak için aşağıdaki SQL deyimlerinden hangisi kullanılır? A. Order By B. Group By C. Select By D. From By E. Into By
10. Aşağıdaki hangi komuttan sonra belirtilen koşula uyan kayıtları listelemek için bu komut kullanılır? A. Distinct B. All C. From D. Into E. Where
Cevaplar
1)C 2)C 3)A 4)B 5)D 6)E 7)A 8)D 9)B 10)E
111
7. ACCESS'TE SQL FONKSİYONLARI
112
Bu Bölümde Neler Öğreneceğiz?
7.1. SQL’de Kullanılan İşaretler
7.2. SQL’de Kullanılan Komutlar
7.3. SQL Fonksiyonları
113
Bölüm Hakkında İlgi Oluşturan Sorular
1. SQL’de Kullanılan işaretler nelerdir? Açıklayınız.
2. SQL’de kullanılan komutlar nelerdir? Hangi ne işe yarar? Açıklayınız.
3. SQL’de kullanılan hazır fonksiyonlar nelerdir? Açıklayınız.
114
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
SQL’de Kullanılan İşaretler SQL’de Kullanılan İşaretleri
Kavrar, Access veritabanında
bu işaretleri sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
SQL’de Kullanılan Komutlar SQL’de Kullanılan
Komutları Kavrar, Access
veritabanında bu komutları
sorgu ile kullanabilir,
uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
SQL Fonksiyonları SQL Fonksiyonlarını Kavrar,
Access veritabanında bu
fonksiyonları sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
115
Anahtar Kavramlar
DISTINCT, WHERE, ORDER BY, GROUP BY, HAVING, SELECT INTO, LIKE,
BETWEEN, AVG, COUNT, SUM, MAX, MIN, UCASE, LCASE,MID, LEFT, RIGHT, LTRIM,
RTRIM
116
Giriş
Bu bölümde SQL’de kullanılan işaretler, operatörler, SQL’de kullanılan Komutlar ve
SQL Fonksiyonları işlenecektir. Bu konuların öğrenilmesiyle beraber sorgu oluşturulması
kolaylaşacak, veritabanındaki verileri işleme daha anlaşılır hale gelecektir.
117
7.1. SQL’de Kullanılan İşaretler
* İşareti
SQL deyimlerinde * işareti iki farklı amaç için kullanılır.
• Matematiksel işlemlerde çarpma işlemi olarak görevi vardır.
• Select * From ifadesinde kullanıldığında ise tüm alanların görünümde yer
alacağını belirtir.
+ İşareti
SQL deyimlerinde + işareti, metinleri birleştirmek için kullanılır.
Örnek:
Adı alanı ile Soyadı Alanındaki bilgiler birleştiriliyor.
select AD+' ' +SOYAD from Ogrenci /*Adı alanındaki bilgi alınır, bir adet boşluk
karakteri eklenir ve Soyadı alanındaki bilgi eklenir. Böylece yeni oluşan alanda Adı ve Soyadı
arasında bir adet boşluk bırakılmış olur.*/
Şekil 55: Artı Operatörü İle Birleştirme Sorgusu
Şekil 56: Artı Operatörü İle Birleştirme Sorgusu Sonucu
118
As Komutu
SQL deyimleri ile oluşturulan görünüm sorgularında alan ve tablo isimlerini
değiştirmek için kullanılır.
Not: As komutu ile adı değiştirilen alanların ve tabloların gerçekte adı değişmez. Sadece
oluşturulan görünümde değişir.
Örnek
select ad+soyad as AdıSoyadı from Ogrenci
Şekil 57: As Komutunun Kullanımı
[ ] Köşeli Parantezler
SQL deyimlerinde köşeli parantezler Alan ve Tablo isimlerinde kullanılır. Normalde
tüm tablo ve alan isimleri köşeli parantezler içinde yazılmalıdır. Fakat tek parçadan oluşan alan
ve tablo isimleri için köşeli parantez gerekmez.
Örnek
select AD,[Telefon No] from Ogrenci /*Bu SQL ifadesinde alan isimleri içinde boşluk
karakteri kullanıldığı için köşeli parantezler içinde yazılmıştır.*/
119
( ) Parantezler
SQL deyimlerinde normal Parantezler;
• Hazır fonksiyonlarda parametreler için kullanılır.
• Matematiksel işlemlerde işlemleri gruplandırarak işlem önceliği vermek için
kullanılır.
• SQL ifadelerini gruplandırmak için kullanılır.
7.2. SQL’de Kullanılan Komutlar
DISTINCT Komutu
Alan içinde yer alan kayıtlarda aynı olan bilgilerden sadece bir adet gösterir.
Kullanımı
Select Distinct AlanAdı from TabloAdı
Örnek
select ad from Ogrenci
Şekil 58: Select Deyiminin Kullanımı
120
select distinct ad from Ogrenci
Şekil 59: DISTINCT Komutunun Kullanımı
WHERE Komutu
SELECT FROM cümlesine ilave olarak kullanılır. WHERE komutu ile belirtilen koşula
uygun olan kayıtların gösterilmesi sağlanır. WHERE komutundan sonra Şart ifadesi gelmelidir.
Kullanım Yerleri
SELECT Alanlar FROM Tablo_Adı WHERE Şart
DELETE FROM Tablo_Adı WHERE Şart
UPDATE Tablo_Adı Set Alan = .... WHERE Şart
Örnek
SELECT * FROM Musteri WHERE Bakiye > 400
Veritabanında bulunan Musteri tablosunun görünümü oluşturulmaktadır. Bu
görünümde Bakiye alanındaki değer 400'ün üzerinde olan kayıtlar listelenmektedir.
Aşağıda WHERE komutu ile koşul oluştururken kullanılabilecek operatörler
listelenmiştir.
121
Operatör Anlamı Örnek
> Büyüktür Bakiye > 400
< Küçüktür Bakiye < 400
>= Büyük eşit Bakiye >= 400
<= Küçük eşit Bakiye <= 400
<> Eşit değil Bakiye <> 400
Like içerir
Adı Like 'A*' A ile başlayan
Adı Like '*a*' içinde a harfi geçen
Adı Like '*a' A harfi ile biten
BETWEEN . AND . Arasında Bakiye between 200 and 300
NOT Değil NOT Bakiye > 400
AND Ve birleştirme operatörü Bakiye > 400 AND Adı = 'Mehmet'
OR Veya birleştirme operatörü Bakiye > 400 OR Adı = 'Mehmet'
Tablo 2: SQL’de Kullanılan Operatörler
ORDER BY Komutu
Sorgu sonuçlarını belirtilen alanlara göre artan veya azalan şekilde sıralar
Kullanım şekli
SELECT Alanlar FROM tablo WHERE Şart [ORDER BY Alan1 [ASC | DESC ][,
Alan2 [ASC | DESC ]][, ...]]]
Not: İki veya daha fazla alana göre sıralama yapılıyorsa, ilk alana göre kayıtlar sıralanır,
ilk alanda aynı değeri içeren kayıtlar ise kendi içinde ikinci alana göre sıralanırlar.
Örnekler:
Aşağıdaki örneklerde Musteriler tablosundaki kayıtlar Soyadı alanına göre artan şekilde
sıralanıyor. Sıralama ölçütü ASC ve DESC ile belirtilmesze ASC olduğu kabul edilir.
SELECT Adı, Soyadı FROM Musteriler ORDER BY Soyadı;
122
SELECT Adı, Soyadı FROM Musteriler ORDER BY Soyadı ASC;
Aşağıdaki örnekte Musteriler tablosundaki kayıtlar Maas alanına göre azalan ve ikinci
sıralama ölçütü olarak Soyadı alanına göre sıralanır.
SELECT Soyadı, Maaş FROM Musteriler ORDER BY Maas DESC, Soyadı;
Aşağıdaki örnekte Notlar tablosundaki kayıtlarda Başarı Notu adında yeni bir alan
tanımlanıyor ve bu alanda "Vize*0.4+Final*0.6" hesabı yapılıyor. Bu oluşan "Başarı Notu"
alanına göre kayıtlar Büyükten küçüğe doğru sıralanıyor.
SELECT Vize, Final, Vize*0.4+Final*0.6 as [Başarı Notu] FROM Notlar ORDER BY
Vize*0.4+Final*0.6 DESC;
Örnek
select OgrNo,AD, SOYAD, Vize from Ogrenci order by Vize desc /*Öğrencileri
ÖğrenciNo, Ad, Soyad, Vize alanların arasında vize notuna göre azalan şeklinde sıralar.*/
GROUP BY Komutu
Bir veritabanı tablosunda seçilmiş olan alanlarda aynı değeri içeren kayıtlardan birer
adet gösterilmesini sağlayan komuttur. Bu komutla birlikte SQL'de toplama fonksiyonları
(Örneğin Sum, Avg, Min vb) kullanılır.
Kullanımı
SELECT alanlar FROM tablo WHERE şart ifadesi GROUP BY gruplanacak alanlar
Örnek
select SOYAD from Ogrenci Group By SOYAD /*Ogrenci tablosundaki SOYADlardan
aynı olanlardan birer tane gösterir.*/
HAVING Komutu
Group By komutu ile gruplandırma oluşturulup, bu gruplandırmada SQL Toplama
fonksiyonları kullanıldıysa, bu fonksiyonlarla çıkan sonuçlar üzerinde bir süzme işlemi
123
uygulanacaksa HAVING komutu kullanılır. Normal süzme işleminde WHERE komutu
kullanılır.
Kullanımı
SELECT Alanlar FROM tablo WHERE NormalSeçmeŞartı GROUP BY GrupListesi
HAVING GrupSeçmeŞartı
Örnek
Musteri tablosunda Sehir adında bir alan bulunmaktadır. Hangi sehirde kaç müşteri
olduğunu bulan ve 10 müşteriden az olan şehirlerin listesini veren SQL deyimi
SELECT Sehir, Count(Sehir) FROM Musteri Group By Sehir HAVING Count(Sehir)< 10
Örnek
select AD, COUNT (AD) from Ogrenci group by AD having COUNT(AD)<=2
/*Ogrenci tablosundaki AD alanına bakarak hangi addan kaç tane öğrenci var ve ogrenci
sayısı 2 ye eşit ve ikiden az olanları lisyteler.*/
SELECT … INTO Deyimi
Sorgu sonucunu Yeni bir tablo olarak kaydeder.
Kullanımı
SELECT Alanlar INTO YeniTabloAdı FROM KaynakTablo
Örnek
Musteriler tablosundaki maas alanındaki değerler 1000 ve üzerinde olan kayıtlar
yenitablo ismindeki bir tabloya kaydediliyor.
SELECT * INTO YeniTablo FROM Musteriler WHERE Maas >= 1000
124
Örnek
Select * into YeniOgrenci from Ogrenci where AD='Ali' /*Adı Ali olan öğrencileri
YeniOgrenci adında tablo oluşturarak kaydeder. */
TOP n [PERCENT] Komutu
Sorgu sonucunda baştan veya Order By .. Desc kullanılarak sondan belirtilen sayıda
veya oranda kaydı gösterir.
Örnek
Öğrenciler tablosunda 2005 yılında mezun olan öğrencilerden ilk 25 adedinin listesini
veren SQL ifadesi
SELECT TOP 25 OgrNo, Adı, Soyadı FROM Ogrenciler WHERE MezunYılı=2005
Örnek
select top 3 OgrNo, BasariNotu from Ogrenci where BasariNotu>2 order by
BasariNotu asc /*Öğrenci tablosunda başarı notu 2 den büyük olanlardan 3 adetini en küçükten
büyüğe doğru (artan) şeklinde OgrNo ve Başaarı notunu yazarak listeler. */
select top 10 percent OgrNo, BasariNotu from Ogrenci where Mezuniyet=2005 order
by BasariNotu desc /*Ogrenciler tablosundaki mezuniyet yılı 2005 olanlar arasında başarı
notu bakımından %10 ‘a girenleri listeler. */
125
LIKE Komutu
Where deyimi ile birlikte kullanılır. Aramak istenilen alanda (sütunda) bulunan veriler
içerisinde belirli kayıtları listelemek için kullanılır.
Karakter Açıklama
* Tüm İfadeler
? Tek Karakter
Tablo 3: Like Komutunda Kullanılan Operatörler
Select <Sütun_Adı> from <Tablo_Adı> where <Sütun_Adı>Like <Koşul_İfadesi>
Karakter Açıklama Like ‘*a’ Son karakteri “a” olan tüm veriler Like ‘*a*’ İçerisinde “a” olan tüm veriler Like ‘a*’ “a” ile başlayan veriler Like ‘?a’ İkinci karakteri “a” olan ve iki karakterli tüm veriler Like ‘a??’ İkinci karakteri “a” olan toplam 3 karakterli tüm veriler
Tablo 4: Like Komutunun Kullanımı İle İlgili Örnekler
Örnek
select * from Ogrenciler where Ad Like 'a*' /* Ogrenciler tablosunda Adres sütununda
"a" ile başlayan tüm veriler*/
Şekil 60: Like Komutunun Kullanımı
126
Şekil 61: Like Komutunun Kullanım Sonucu
BETWEEN Komutu
Belirlenen sütun içerisinde iki değer arasındaki bilgileri getirmek için kullanılır.
Select <sütuna_adı> from <Tablo_adı> where <sütun_adi> between <ilk_değer> and
<İkinci_değer>
Örnek
select * from Notlar where F Between 25 and 50 /* Notlar tablosunda F sütununda final
notları 25 ve 50 arasında olanları listeler.*/
IN Komutu
Sütun içerisinde sadece istediğimiz değerleri içeren verileri getirecektir.
Select <sütuna_adı> from <Tablo_adı> where <sütun_adi> IN (<değer1,değer2>)
Örnek
select * from Ogrenciler where Adi IN ('Erkan','Mustafa','Selçuk') /* Öğrenciler
tablosunda Adi sütununda Erkan, Mustafa, Selçuk ismindeki öðrencilere ait bilgileri listeler.*/
NEWID Komutu
Tablo içerisinde yer alana verilerden rastgele satırlar getirmek için kullanılır.
Select <sütuna_adı> from <Tablo_adı> order by NEWID()
127
Örnek
select * from Ogrenciler order by NEWID() /* Ogrenciler tablosundaki verileri rastgele
listeler*/
7.3. SQL Fonksiyonları
AVG () – AVERAGE
Sütundaki değerlerin ortalamasını almak için kullanılır.
Select AVG (<sütun_adi>) from <tablo_adi>
Örnek
Şekil 62: AVG Fonksiyonun Kullanılacağı Tablo
select AVG(Final) from Tablo4 /* Tablo4 tablosundaki Final sütunundaki yani final
notlarının ortamalasını alır.*/
Şekil 63: AVG Fonksiyonun Kullanılması İle Gösterilen Sonuç
COUNT()
Seçilmiş olan sütundaki boş olmayanların kayıtların adedini verir.
Select COUNT (<sütun_adi>) from <tablo_adi>
128
Örnek
Şekil 64: COUNT Fonksiyonun Kullanılacağı Tablo
select COUNT(Vize) from Tablo4 /* Tablo4 tablosundaki Vize sütununda kaç kayıt
olduğunu listeler.*/
Şekil 65: COUNT Fonksiyonun Kullanılması İle Gösterilen Sonuç
SUM ()
Seçilmiş olan sütundaki kayıtları toplar.
Select SUM (<sütun_adi>) from <tablo_adi>
Örnek
Şekil 66: SUM Fonksiyonun Kullanılacağı Tablo
select SUM(Vize) from Tablo4 /* Tablo4 tablosundaki Vize sütunundaki kayıtları toplar
ve sonucu listeler.*/
Şekil 67: SUM Fonksiyonun Kullanılması İle Gösterilen Sonuç
129
MAX ()
Seçilmiş olan sütundaki en büyük değeri listeler.
Örnek
Şekil 68: MAX Fonksiyonun Kullanılacağı Tablo
select MAX(Vize) from Tablo4 /* Tablo4 tablosundaki Vize sütunundaki kayıtlar
arasından en büyük olan değeri listeler.*/
Şekil 69: MAX Fonksiyonun Kullanılması İle Gösterilen Sonuç
MIN ()
Seçilmiş olan sütundaki en küçük değeri listeler.
Örnek
Şekil 70: MIN Fonksiyonun Kullanılacağı Tablo
select MIN(Final) from Tablo4 /* Tablo4 tablosundaki Final sütunundaki kayıtlar
arasından en küçük olan değeri listeler.*/
130
Şekil 71: MIN Fonksiyonun Kullanılması İle Gösterilen Sonuç
UCASE ( )
Belirtilen sütundaki tüm verileri büyük harfle göstermek için kullanılır.
Örnek
Şekil 72: UCASE Fonksiyonun Kullanılacağı Tablo
select ucase(Ad) from Ogrenci /* Ogrenci tablosundaki Ad sütunundaki tüm verileri
büyük harfle gösterir*/
Şekil 73: UCASE Fonksiyonun Kullanılması İle Gösterilen Sonuç
131
LCASE ( )
Belirtilen sütundaki tüm verileri küçük harfle göstermek için kullanılır.
Örnek
Şekil 74: LCASE Fonksiyonun Kullanılacağı Tablo
Select lcase (Ad) from Ogrenci /* Ogrenci tablosundaki Ad sütunundaki tüm verileri
küçük harfle gösterir*/
Şekil 75: LCASE Fonksiyonun Kullanılması İle Gösterilen Sonuç
MID ( )
Belirtilen sütundaki verilerin belirlenen karakterleri göstermek için kullanılır.
Select MID (<Sütun_adı>, <Başlangıç>, <Kaç_Karakter>) from <tablo_adı>
Örnek
select mid (Ad,1,4) from Ogrenci /* Ogrenci tablosundaki Ad sütunundaki verilerin 1.
karakterinden 4. karakterine kadar tüm verileri listeler*/
132
Şekil 76: MID Fonksiyonunun Kullanımı
LEFT ( )
Verilen metinden belirtilen sayıda soldan karakter geriye döndürür.
Örnek
select ad, LEFT(ad,3) from Ogrenci /* Ogrenci tablosundaki Ad alanındaki verileri
listelerken sadece ilk 3 karakteri listeler.*/
Şekil 77: LEFT Fonksiyonunun Kullanımı
RIGHT ( )
Verilen metinden belirtilen sayıda sağdan karakter geriye döndürür.
Örnek
select ad, RIGHT(ad,4) from Ogrenci /* Ogrenci tablosundaki Ad alanındaki verileri
listelerken sadece son 4 karakteri listeler.*/
133
Şekil 78: RIGHT Fonksiyonunun Kullanımı
LEN ( )
Verilen Metnin karakter sayısını geriye döndürür.
Örnek
select ad, len (Ad) from Ogrenci /* Ogrenci tablosundaki Ad alanındaki verilerin
karakter sayısını listeler.*/
Şekil 79: LEN Fonksiyonunun Kullanımı
LTRIM ( )
Verilen metnin sol tarafındaki boşluk karakterlerini silerek kalan kısmı geriye döndürür.
Örnek
select ad, ltrim (Ad) from Ogrenci /* Ogrenci tablosundaki Ad alanındaki verilerin sol
tarafındaki boşlukları silerek listeler.*/
134
Şekil 80: LTRIM Fonksiyonunun Kullanımı
RTRIM ( )
Verilen metnin sağ tarafındaki boşluk karakterlerini silerek kalan kısmı geriye döndürür.
Örnek
select Ad, rtrim (Ad) from Ogrenci /* Ogrenci tablosundaki Ad alanındaki verilerin sağ
tarafındaki boşlukları silerek listeler.*/
Şekil 81: RTRIM Fonksiyonunun Kullanımı
7.4. Access Veritabanında Kullanılan Fonksiyonlar
Aşağıda Access veritabanında kullanılan fonksiyonlar gruplara ayrılarak sıralanmıştır.
Alfa sayısal fonksiyonlar
• Asc : Alfasayısal bilginin Ascii kodunu verir.
• Chr : Sayısal bilgi karşılığı olan karakteri verir.
• Str : Sayısal bilgiyi alfa sayısala değiştirir.
135
• Val : Alfa sayısal bilgiyi sayısala çevirir.
• Format : Verilen bilgiyi belirtilen format yapısına çevirir.
• InStr : 2 alfa sayısal bilginin arasında 2.‟de tanımlanan duruma göre
karşılaştırma yapar.
• Left : Alfa sayısal bilginin sol tarafında belirtilen miktarda karakter alır.
• Right : Alfa sayısal bilginin sağ tarafında belirtilen miktarda karakter alır.
• Mid : Alfa sayısal bilginin belirtilen konumundan tanımlanan miktarda karakter
alır.
• Len : Alfa sayısal bilgi uzunluğunu hesaplar.
• LTrim : Alfa sayısal bilginin sol tarafındaki boşlukları atar.
• RTrim : Alfa sayısal bilginin sağ tarafındaki boşlukları alır.
• Trim : Alfa sayısal bilginin sağ ve solundaki boşlukları alır.
• LCase : Alfabetik bilgileri küçük harfe çevirir.
• UCase : Alfabetik bilgileri büyük harfe çevirir.
Karşılaştırma Fonksiyonu
• IIF: Karşılaştırma işleminde iki şıktan birinin yapılmasını sağlar.
Tarih Fonksiyonları
• Day : Verilen tarihteki gün rakamını saptar.
• Weekday : Verilen tarihteki iş gününün rakamını saptar.
• Month : Verilen tarihteki ay rakamını saptar.
• Year : Verilen tarihteki yılı saptar.
• Date : Sistem tarihini verir.
• Now : Sistemin tarih ve saatini verir.
• Time : Sistem saatini verir.
• DateDiff : İki tarih arasındaki gün, ay, yıl farkını saptar.
Örnekler:
• DateDiff (“d”, baĢ.tarihi, bit.tarihi) : iki tarih arası gün farkını verir.
• DateDiff (“m”, baĢtarihi, bittarihi) : iki tarih arası ay farkını verir.
• DateDiff (“yyyy”, baĢtarihi, bittarihi) : iki tarih arası yıl farkını verir.
136
• DateDiff (“q”, baĢtarihi, bittarihi) : iki tarih arası dönem farkını verir.
• DateDiff (“y” , baĢtarihi, bittarihi) : yıl içindeki gün farkını verir.
• DateDiff (“w”,baĢtarihi, bittarihi) : iş günleri farkını verir.
• DateDiff(“ww”,baĢtarihi, bittarihi) : iş hafta farkını verir.
• DateDiff(“h”,baĢtarihi, bittarihi) : iş saat farkını verir.
• DateDiff(“m”,baĢtarihi, bittarihi) : iş dakika farkını verir.
• DateDiff(“s”,baĢtarihi, bittarihi) : iş saniye farkını verir.
• DateAdd : Verilen bir tarihe gün, ay, yıl ekleyerek yada çıkararak yeni bir tarih
elde edilir.
• DatePart : Tanımlanan bir tarihi belirtilen süre koduna göre parçalayarak verir.
Sayısal Bilgilere Dönüştürme Fonksiyonları
• CCur : Sayısal bilgileri para birimi yapısına çevirir.
• CDbl : Sayısal bilgileri çift duyarlıklı yapıya çevirir.
• CInt : Sayısal bilgileri tamsayı yapısına çevirir.
• CLng : Sayısal bilgileri uzun tamsayı yapısına çevirir.
• CSng : Sayısal bilgileri tek duyarlıklı yapıya çevirir.
• CStr : Sayısal bilgileri alfa sayısal yapıya çevirir.
• CVal : Alfa sayısal bilgileri sayısal yapıya çevirir.
• CVDate : Sayısal bilgileri tarih yapısına çevirir.
Matematiksel Fonksiyonlar
• Abs : sayısal bilginin mutlak değerini verir
• Atn : verilen tan açı değerini raydan değere çevirir.
• Cos : kosinüsünü hesaplar.
• Exp : sayısal değeri üssel değere çevirir.
• Fix : ondalıklı sayının tam sayı kısmını verir.
• Int : ondalıklı sayıyı tam sayıya yuvarlar.
• Log : ondalıklı değerin e tabanına göre logaritmasını alır.
137
• Rnd : rasgele sayı üretir.
• Sgn : sayısal değerin işaretini verir.
• Sin : sinüsünü hesaplar.
• Tan : tanjantı hesaplar.
SQL Fonksiyonları
• Avg: referans edilen alan bilgilerinin aritmetik ortalamasını alır.
• Count: referans edilen alandaki sayısal bilgi adedini saptar.
• First: referans edilen alandaki ilk kayıt bilgisini saptar.
• Last: referans edilen alandaki son kayıt bilgisini saptar.
• Max: referans edilen alandaki en büyük değeri saptar.
• Min: referans edilen alandaki en küçük değeri saptar.
• Sum: referans edilen alan bilgilerinin toplamını alır.
• StDer: referans edilen alandaki değerlerin standart sapmasını alır.
• StDerp: referans edilen alandaki verilerin statiksel standart sapmasını alır.
• Var: referans edilen alandaki değerlerin varyansını alır.
• Varp: referans edilen alandaki değerlerin statik varyansını alır.
Bilgi Kontrol Fonksiyonları
• IsDate: tanımlanan alan bilgisinin tarih yapısına çevrilip çevrilemeyeceğini
kontrol eder.
• IsEmpty: tanımlanan alan bilgisinin boş olup olmadığını kontrol eder.
• IsNull: bilgilerin okutulmasında son kayıttan sonraki boş alan durumunu kontrol
eder.
• IsNumeric: tanımlanan alan bilgisinin rakam olup olmadığını kontrol eder.
• VarType: varyant değişken bilgisinin tipini kod olarak verir.
138
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
Access veritabanı üzerinde sorgularla beraber öğrenilen işaret ve operatörler kullanılmalı
Access veritabanı üzerinde öğrenilen komutlar sorgularla beraber kullanılmalı
Access veritabanı üzerinde öğrenilen fonksiyonlar sorgularla beraber kullanılmalı.
139
Uygulama Soruları
1. SQL’de kullanılan işaret ve operatörler nelerdir? Açıklayınız.
2. SQL’de kullanılan komutlardan 5 tanesini yazarak açıklayınız. Nasıl
kullanıldığını örnek üzerinde gösteriniz.
3. SQL’de kullanılan fonksiyonlardan 5 tanesini yazarak açıklayınız. Nasıl
kullanıldığını örnek üzerinde gösteriniz.
140
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde SQL’de kullanılan işaret ve operatörlerin neler olduğunu öğrendik. Bu
operatörleri Access veritabanında uygulamasını yapmış olduk. Bununla beraber SQL’deki
komutlardan Where’i şartlı sorgularda kullanabileceğimizi, Order By’ı sorgu sonuçlarını
belirtilen alanlara göre artan veya azalan şekilde sıralayabileceğimizi, Like’ı veriler içerisinde
belirli kayıtları listeleyebileceğimizi öğrenmiş olduk. Ayrıca SQL fonksiyonlardan AVG ile
alanın (sütunun) ortalamasını alabileceğimizi, SUM ile alandaki sayısal ifadeleri
toplayabileceğimizi, MAX-MIN ile alan içindeki en büyük ve en küçük değerlerin ne olduğunu
öğrenebileceğimizi görmüş olduk.
141
Bölüm Soruları
1. Aşağıdakilerden hangisi SQL deyimlerinde metinleri birleştirmek için kullanılır? A. / işareti B. * işareti C. + işareti D. – işareti E. % işareti
2. Aşağıdakilerden hangisi SQL deyimleri ile oluşturulan görünüm sorgularında alan ve tablo isimlerini değiştirmek için kullanılır?
A. As komutu B. In Komutu C. Between Komutu D. All Komutu E. Like Komutu
3. Aşağıdakilerden hangisi Alan içinde yer alan kayıtlarda aynı olan bilgilerden sadece
bir adet gösteren SQL komutudur? A. DISTINCT Komutu B. WHERE Komutu C. ORDER BY Komutu D. GROUP BY Komutu E. HAVING Komutu
4. Aşağıdakilerden hangisi tablo içerisinde yer alana verilerden rastgele satırlar getirmek için kullanılan SQL komutudur?
A. IN Komutu B. WHERE Komutu C. BETWEEN Komutu D. GROUP BY Komutu E. NEWID Komutu
5. Aşağıdakilerden seçilmiş olan sütundaki kayıtları toplayan SQL fonksiyonudur? A. COUNT () B. AVG () C. SUM () D. MAX () E. MID ()
142
6. Aşağıdakilerden hangisi seçilmiş olan sütundaki en küçük değeri gösteren SQL fonksiyonudur?
A. MIN () B. AVG () C. SUM () D. MAX () E. MID ()
7. Aşağıdakilerden hangisi belirtilen sütundaki tüm verileri küçük harfle göstermek için kullanılan SQL fonksiyonudur?
A. UCASE () B. LCASE () C. SUM () D. MAX () E. MID ()
8. Aşağıdakilerden hangisi belirtilen sütundaki belirtilen sayıda sağdan karakter geriye döndürmek için kullanılan SQL fonksiyonudur?
A. UCASE () B. LCASE () C. LEFT () D. RIGHT () E. MID ()
9. Aşağıdakilerden hangisi belirtilen sütundaki karakter sayısını geriye döndürmek için kullanılan SQL fonksiyonudur?
A. LEN () B. LTRIM () C. RTRIM () D. RIGHT () E. MID ()
10. Aşağıdakilerden hangisi belirtilen sütundaki metnin sağ tarafındaki boşluk karakterlerini silerek kalan kısmı geriye döndürmek kullanılan SQL fonksiyonudur?
A. LEN () B. LTRIM () C. RTRIM () D. RIGHT () E. LEFT ()
Cevaplar
1)C 2)A 3)A 4)E 5)C 6)A 7)B 8)D 9)A 10)C
143
8. ACCESS'TE SORGU TASARIMI UYGULAMASI
144
Bu Bölümde Neler Öğreneceğiz?
8.1. Bu bölümde geride kalan 7 bölümü içeren Access veritabanı ile uygulama
yapılacaktır.
8.2 Sorgu oluşturma
8.3 SQL Deyimlerini ve Fonksiyonlarının veritabanı üzerinde uygulaması
yapılacaktır.
145
Bölüm Hakkında İlgi Oluşturan Sorular
1. Veritabanı Nedir?
2. İlişkisel Veritabanı Yönetim Sistemleri Nelerdir?
3. Veritabanı dilleri Nelerdir?
4. Tablo Nedir?
5. Veri Türü Nedir?
6. Veritabanı programında veritabanı ve yeni bir tablo nasıl oluşturulur?
7. SQL Nedir? Açıklayınız.
8. Sorgu Niçin Oluşturulur? Açıklayınız.
9. Sorgu Türleri Nelerdir?Açıklayınız.
10. SQL Deyimleri Nelerdir? Açıklayınız.
11. SQL’de Kullanılan işaretler nelerdir? Açıklayınız.
12. SQL’de kullanılan komutlar nelerdir? Hangi ne işe yarar? Açıklayınız.
13. SQL’de kullanılan hazır fonksiyonlar nelerdir? Açıklayınız.
146
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
SQL’de Kullanılan İşaretler,
Deyimler, Fonksiyonlar
SQL’de Kullanılan İşaretleri,
Deyimleri, Fonksiyonları
Kavrar, Access veritabanında
bu konuları sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
147
Anahtar Kavramlar
SQL, CREATE, ALTER, DROP, INSERT INTO, DELETE, UPDATE, SELECT,
WHERE, ORDER BY, GROUP BY, HAVING, SELECT INTO, LIKE, BETWEEN, AVG,
COUNT, SUM, MAX, MIN, UCASE, LCASE, MID, LEFT, RIGHT, LTRIM, RTRIM
148
Giriş
SQL deyimleri veritabanları üzerinde çeşitli işlemleri yerine getirirler. Veritabanından
sorgulama yapmak için SELECT, ekleme yapmak için INSERT güncelleme yapmak için
UPDATE, silme yapmak için DELETE, yeni tablo oluşturmak için CREATE TABLE gibi
komutlara sahiptir. SQL içinde veriler üzerinde işlemler yapmak üzere hazır fonksiyonlar
bulunur.
Bu bölümde bundan önceki bölümlerde anlatılan konuların uygulaması yapılacaktır.
Access veritabanı üzerinde SQL Deyimleri, İşaret ve Fonksiyonları, Fonksiyonları kullanılarak
sorgular oluşturulacaktır.
149
8.1. Access Veritabanı İle SQL Uygulaması
Aşağıdaki 22 adımlık SQL uygulaması Access veritabanı üzerinde yapılacaktır. 22
adımlık uygulamanın cevabı aynı tabloda yer almaktadır. Siz uygulamayı yaparken mümkün
olduğunca cevabına bakmadan kendiniz soruları yazmaya çalışınız. Sorgu yazmada
takıldığınızda cevabına bakmayı yeğleyiniz.
150
Uygulama
Soru Cevap
1) Access veritabanı üzerinde “topluluk” adında veritabanı oluşturunuz?
Dosya -> Yeni -> Boş Veritabanı menüleri
kullanılarak “Topluluk” adında veritabanı oluşturulur.
2)Access veritabanında otomatik
oluşan Tabloyu kapatarak Sorgu
yazarak “uyeler” diye tablo
oluşturunuz. Tablo içine aşağıdaki
alanları ekleyiniz.
uyeno, ogrno, ad, soyad,
fak_yuksekokul, bolum,sinif,
sube, dogumtarihi , dogumyeri,
adres, ilce, il, kayityili,
EtkinlikPuani
Not: Veri tiplerini kendiniz
belirleyiniz.
Etkinlik puanı, üyenin topluluk içerisinde
yaptığı çalışmaya göre aldığı puanı gösterip 10
üzerinden değerlendirilmektedir. Ayrıca puan
virgüllü (5,6) olabilmektedir.
create table uyeler ( uyeno int, ogrno int, ad varchar(25), soyad varchar(25), fak_yuksekokul varchar(25), bolum varchar(15), sinif varchar(2), sube varchar(2), dogumtarihi datetime, dogumyeri varchar(15), adres varchar(100), ilce varchar(20), il varchar(15), kayityili varchar(4), EtkinlikPuani float )
3)Sorgu oluşturarak en az 5 üyeye ait
veri girişi yapınız. Kişi bilgileri üstteki
tabloda yer almaktadır.
insert into uyeler( uyeno, ogrno, ad, soyad, fak_yuksekokul, bolum, sinif, sube, dogumtarihi, dogumyeri, adres, ilce, il, kayityili, EtkinlikPuani) values (1001, 14151601, 'Okan', 'KURTULUŞ', 'Teknik Bilimler MYO', 'Bilgisayar Programcılığı', '2', 'A', #05/02/1995#, 'İSTANBUL', 'Bahçelievler Mah, Hisar Sok. No:6', 'Merkez', 'BURDUR', '2017', 8.6)
insert into uyeler( uyeno, ogrno, ad, soyad, fak_yuksekokul, bolum, sinif, sube, dogumtarihi, dogumyeri, adres, ilce, il, kayityili, EtkinlikPuani) values (1002, 14151602, 'Orçun',
151
'KURT', 'Teknik Bilimler MYO', 'Bilgisayar Programcılığı', '2', 'A', #05/02/1993#, 'ANKARA', 'Bahçelievler Mah, Hisar Sok. No:6', 'Gölhisar', 'BURDUR', '2016', 9.6)
insert into uyeler( uyeno, ogrno, ad, soyad, fak_yuksekokul, bolum, sinif, sube, dogumtarihi, dogumyeri, adres, ilce, il, kayityili, EtkinlikPuani) values (1003, 14151603, 'Mehmet', 'MADRAN', 'Eğitim Fakültesi', 'Bilgisayar ve Öğr. Tek. Öğretmenliği', '4', 'G', #05/05/1992#, 'BURSA', 'Aydınlıkevler Mah, Umut Sok. No:8', 'Merkez', 'BURDUR', '2015', 9.9)
insert into uyeler( uyeno, ogrno, ad, soyad, fak_yuksekokul, bolum, sinif, sube, dogumtarihi, dogumyeri, adres, ilce, il, kayityili, EtkinlikPuani) values (1004, 14151604, 'Ahmet', 'TÜRKÖZ', 'Eğitim Fakültesi', 'Sınıf Öğretmenliği', '3', 'B', #06/03/1994#, 'BURSA', 'Aydınlıkevler Mah, Yeşil Sok. No:8', 'Gölhisar', 'BURDUR', '2017', 5.2)
insert into uyeler( uyeno, ogrno, ad, soyad, fak_yuksekokul, bolum, sinif, sube, dogumtarihi, dogumyeri, adres, ilce, il, kayityili, EtkinlikPuani) values (1005, 14151605, 'Hasan', 'KEBAPÇI', 'Mühendislik Fakültesi', 'Bilgisayar Mühendisliği', '2', 'G', #06/08/1997#, 'ISPARTA', 'Şirinevler Mah, Mavi Sok. No:7', 'Merkez', 'BURDUR', '2017', 7.2)
4) Doğum Yeri Bursa olan öğrencileri
listeleyiniz.
select * from uyeler where dogumyeri='Bursa'
5)Üyelerin hangi ilçelerde ikâmeti
ettiklerini listeleyiniz.
select ilce from uyeler group by ilce
6)Hangi ilçelerden kaç adet olduğunu
listeleyiniz.
select ilce, COUNT(ilce) from uyeler group by
ilce
veya
select ilce, COUNT(ilce) from uyeler group by
ilce having COUNT(ilce)<10
152
7)Burdur’un Gölhisar ilçesinde
olanları ayrı bir tabloda
(Golhisarli_Uyeler) adlı tablo)
saklayınız.
select * into Golhisarli_Uyeler from uyeler where
ilce='Gölhisar'
8)Kayıt yılı 2017 olanlardan son 2’sini
listeleyiniz.
select top 2 * from uyeler where kayityili='2017'
9)Etkinlik puanına göre üyeler
arasında %30’a girenleri
listeleyiniz.
select top 30 percent * from uyeler order by
(EtkinlikPuani) desc
10)Etkinlik puanı 7’den büyük 7’ye en
yakın 3 kişinin notunu listeleyiniz.
select top 3 * from uyeler where EtkinlikPuani>7
order by (EtkinlikPuani) asc
11) Üyeleri “ogrno, ad, soyad”
alanları arasında soyadına göre
artan şeklinde sıralayınız.
select ogrno,ad,soyad from uyeler order by soyad
asc
12)”dogumtarihi” alanını siliniz.
alter table uyeler drop column dogumtarihi
13)”uyeler” tablosuna “hobileri” diye
alan ekleyiniz. Veri türünü kendiniz
belirleyiniz.
alter table uyeler add hobileri varchar(25)
14) İlçesi “Gölhisar” olan üyeleri
siliniz.
delete from uyeler where ilce='Gölhisar'
15)Kayıtlı olan tüm üyelerin hobilerine
“Bilgisayar, Teknoloji” ekleyiniz.
Update uyeler set hobileri='Bilgisayar, Teknoloji'
16)Üye Numarası 1003 olan üyenin
Adını Mesut Soyadını Bahtiyar
yapınız.
update uyeler set ad='Mesut', soyad='BAHTİYAR'
where uyeno=1003
153
17) Adres alanındaki bilgileri büyük
harfe dönüştürerek listeleyiniz.
select ucase(Adres) from uyeler
18) Adres alanındaki tüm karakterleri
büyük harf dönüştürerek
güncelleyiniz.
update uyeler set Adres=ucase(Adres)
19) Kayıt yılı “2017” olanların Bölüm
bilgilerinin tümünü büyük harfe
dönüştürünüz
update uyeler set bolum=ucase(bolum) where
kayityili='2017'
20) Tablodaki tüm kayıtların adres
alanındaki karakter sayısını
listeleyiniz.
select adres, len(adres) from uyeler
21) Uyeler tablosunu bilgileri siliniz. delete from uyeler
22)“topluluk” veritabanındaki
“uyeler” tablosunu siliniz.
drop table uyeler
154
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
Access veritabanı üzerinde bu uygulama gerçekleştirilmeli
155
Uygulama Soruları
1. Bu derste yaptığımız uygulama gibi bir soru hazırlayarak sorgularla uygulama
yaparak sorunuzu cevaplandırınız, uygulama yapınız.
156
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde önceki 7 bölümü kapsayan Access veritabanı programı üzerinde SQL
sorgularını içeren uygulama gerçekleştirmiş olduk.
157
Bölüm Soruları
1. Bir tabloda öğrencilere ait bilgilerin tutulduğunu varsayalım. Onlarca öğrencinin farklı ilçelerden olduğunu düşünürsek ve bu öğrencilerin hangi ilçelerden geldiğini sorgulamak istesek (tüm ilçeleri değil sadece tekrarlamayan ilce isimlerini) aşağıdaki sorgulardan hangisi yazmak gerekir?
A. select ilce from ogrenciler group by ilce B. select il from ogrenciler group by ilce C. select ilce from ogrenciler group by il D. select ilce from ogrenciler Where ilce E. select ilce from ogrenciler
2. Bir tabloda öğrencilere ait bilgilerin tutulduğunu varsayalım. Doğum yeri “Bursa” olan öğrencileri seçmek için aşağıdaki hangi sorguyu yazmak gerekir?
A. select * from ogrenciler group by dogumyeri='Bursa' B. select * from ogrenciler where dogumyeri='Bursa' C. select * from ogrenciler where Bursa D. select * from ogrenciler having by dogumyeri='Bursa' E. select * from ogrenciler Bursa
3. Bir tabloda öğrencilere ait bilgilerin tutulduğunu varsayalım. Onlarca öğrencinin farklı ilçelerden olduğunu düşünürsek ve Gölhisar ilçesinden olanların tüm bilgilerini “Golhisarli_Ogrenciler” diye ayrı tabloda saklamak istersek hangi sorguyu yazmak gerekir?
A. select ad, soyad into Golhisarli_Ogrenciler from ogrenciler where ilce='Gölhisar'
B. select * into Golhisarli_Ogrenciler from ogrenciler where il='Gölhisar' C. select * into Golhisarli_Ogrenciler from ogrenciler where ilce='Gölhisar' D. select * into ogrenciler from into Golhisarli_Ogrenciler where ilce='Gölhisar' E. insert * into Golhisarli_Ogrenciler from ogrenciler where ilce='Gölhisar'
4. Bir tabloda öğrencilerin başarı notlarına ait bilgilerin saklandığını varsayalım. Bu başarı notuna göre sınıfta 30%’a giren öğrencileri gösteren sorgu aşağıdakilerden hangisidir?
A. select top 3 percent * from uyeler order by (BasariNotu) asc B. select top 40 percent * from uyeler order by (BasariNotu) desc C. select top 3 percent * from uyeler order by (BasariNotu) desc D. select top 30 percent * from uyeler order by (BasariNotu) desc E. select top 30 percent * from uyeler order by (BasariNotu) asc
5. Ogrenciler tablosundaki “ogrno, ad, soyad” alanları arasında soyadına göre artan şeklinde sıralayan sorgu aşağıdakilerden hangisidir?
A. select ogrno,ad,soyad from Ogrenciler order by ad asc B. select * from Ogrenciler order by soyad desc C. select * from Ogrenciler order by soyad asc
158
D. select ogrno,ad,soyad from Ogrenciler order by soyad desc E. select ogrno,ad,soyad from Ogrenciler order by soyad asc
6. Ogrenciler tablosundaki “dogumtarihi” alanı silen sorgu aşağıdakilerden hangisidir? A. alter table ogrenciler drop column dogumtarihi B. alter table uyeler drop column dogumtarihi C. alter table ogrenciler drop dogumtarihi D. alter table ogrenciler add column dogumtarihi E. alter table ogrenciler column dogumtarihi
7. ”uyeler” tablosuna “hobiler” diye metinsel veri türünde alan ekleyen sorgu aşağıdakilerden hangisidir?
A. alter table uyeler add hobiler int B. alter table uyeler add hobiler varchar(25) C. alter table uyeler add hobiler float D. alter table uyeler add hobiler datetime E. alter table uyeler drop hobiler varchar(25)
8. Ogrenciler tablosundaki ilçesi “Gölhisar” olan öğrencileri silen sorgu aşağıdakilerden hangisidir?
A. delete from Ogrenciler where il='Gölhisar' B. update from Ogrenciler where ilce='Gölhisar' C. delete from Ogrenciler where ilce='Gölhisar' D. delete from Ogrenciler E. delete from Ogrenciler ilce='Gölhisar'
9. Ogrenciler tablosundaki tüm kayıtların “Hobiler” alanını “Bilgisayar, Teknoloji” olarak değiştiren sorgu aşağıdakilerden hangisidir?
A. Update Ogrenciler where hobiler='Bilgisayar, Teknoloji' B. İnsert intoOgrenciler set hobiler='Bilgisayar, Teknoloji' C. delete Ogrenciler set hobiler='Bilgisayar, Teknoloji' D. Update Ogrenciler set hobiler='Bilgisayar, Teknoloji' E. Update Ogrenciler set hobi='Bilgisayar, Teknoloji'
10. Ogrenciler tablosu Öğrenci Numarası 1003 olan öğrencinin Adını Mesut, Soyadını Bahtiyar yapan sorgu aşağıdakilerden hangisidir?
A. update Ogrenciler set ad='Mesut', soyad='BAHTİYAR' where ogrno=1002 B. update Ogrenciler set soyad='Mesut', ad='BAHTİYAR' where ogrno=1003 C. update Ogrenciler set ad='Mesut', soyad='BAHTİYAR' ogrno=1003 D. update Ogrenciler set ad='Mesut', soyad='BAHTİYAR' E. update Ogrenciler set ad='Mesut', soyad='BAHTİYAR' where ogrno=1003
Cevaplar
1)A 2)B 3)C 4)D 5)E 6)A 7)B 8)C 9)D 10)E
159
9. MSSQL SERVER VERİTABANINDA ALAN VE ÖZELLİKLERİ
160
Bu Bölümde Neler Öğreneceğiz?
9.1. Veri Türü
9.2. MSSQL Server Veritabanı Veri Türleri
161
Bölüm Hakkında İlgi Oluşturan Sorular
1. Veri Türü Nedir?
2. Varchar Ve Nvarchar Veri Tipinin Farkı Nedir?
3. MSSQL Server Veritabanında En Önemli ve Sıkça Kullanılabileceğini Düşündüğünüz
Veri Tiplerini Örnekle Açıklayınız.
162
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Veri Türü Veri türünü tarif eder ve
örneklendirebilir
Ders notları, Sunumlar,
Kaynaklar
MSSQL Server Veritabanı
Veri Türleri
MSSQL’deki tüm veri
türlerini kavrar ve uygulama
sırasında kullanabilir
Ders notları, Sunumlar,
Kaynaklar, Uygulama
163
Anahtar Kavramlar
Veri Türü, Metinsel Veri Tipleri, Sayısal Veri Tipleri, Parasal Veri Tipleri, Tarih-Zaman
Veri Tipleri, Binary Veri Tipleri,
164
Giriş
MSSQL Server veritabanında her tablo alanlardan oluşur. Bir alanın özellikleri, o alana
eklenen verilerin özelliklerini ve davranışını açıklar. Alanın veri türü en önemli özelliktir,
çünkü alanda ne tür verilerin depolanabileceğini belirler. Bu bölümde, MSSQL veritabanında
kullanılan veri türleri ve diğer alan özellikleri açıklanmaktadır.
165
9.1. MSSQL Server Veritabanı Veri Türleri
MSSQL Server (Microsoft SQL Server), Microsoft firmasının oluşturduğu bir
veritabanı türüdür. Çoğu zaman MYSQL ile karıştırılabilir. MYSQL açık kaynak kodlu bir
yazılım iken MSSQL bu anlamda kullanıcılara maliyetli gelebilir.
Microsoft SQL Server en çok kullanılan veritabanı sunucu yazılımıdır. Veritabanlarının
oluşturulmasını ve yönetilmesini sağlayan kurumsal çaplı Veritabanı Yönetim Sistemidir.
Dünyada en yoğun kullanılan yönetim sistemi SQL Server’dır. SQL Server’ı kullanarak
verilerinizi dilediğiniz şekilde yönetebilir ve Stored Prosedürleri kullanarak çok sayıda ve
komplike sonuçlar döndürebiliriz. Böylece istediğimiz verileri raporlayarak elde edebiliriz.
Veri türü, bir değişken için ayrılacak bölgenin hangi formatta olacağını belirlemek için
kullanılır. Örneğin; sayısal bir değeri saklayacağımız değişken için sayısal bir veri tipi seçeriz
ya da metin tabanlı (adı, soyadı gibi) kavramları saklamak için metin tabanlı veri tipleri seçeriz.
Veri tipi (türü) belirlemede bir önemli nokta ise veri tipini seçmeden önce değişkene girilecek
değerin sınırlarını belirlemektir. Örneğin; sayısal bir değişken için girilecek verinin tam sayı ya
da ondalık sayı olduğuna karar vermek.
MSSQL Server veritabanında kullanılan veri tipleri aşağıda yer almaktadır.
Tam Sayı Veri Tipleri Veri Tipi Aldığı Değer Aralığı Tanımı
Bigint -9, 223, 372, 036, 854, 775, 808, 9, 223, 372, 036, 854, 775, 807
8 bayt yer kaplar. Aralık çerçevesinde yer alan tam sayıları tutar.
Int -2, 147, 483, 648, 2, 147, 483, 647
4 bayt yer kaplar. En çok kullanılan tam sayıları tutan veri tipidir.
Smallint -32, 768, 32, 767
2 bayt yer kaplar. Aralık çerçevesinde yer alan tam sayıları tutar.
Tinyint 0-255 1 bayt yer kaplar. Aralık çerçevesinde yer
alan tam sayıları tutar.
Bit 0-1
1 byte yer kaplar. True, False değerler için
kullanılır.
Decimal -10^38 +1 10^38 -1
Ondalık veya tam sayıları tutar.
166
Money -922,337,203,685,477.5808 922,337,203,685,477.5807
8 bayt yer kaplar. Parasal değerleri tutmak
için kullanılır.
Smallmoney -214, 748.3648 214,748.3647
4 bayt yer kaplar. Parasal değerleri tutmak
için kullanılır.
Tablo 5: Tam Sayı Veri Tipleri
Kesirli Sayı Veri Tipleri
Veri Tipi Aldığı Değer Aralığı Tanımı Float -1,79E + 308
1,79E + 308 Aralık çerçevesinden hassas değerler içeren ondalık sayıları tutar.
Real -3.40E + 38 3.40E + 38
Aralık çerçevesinden hassas değerler içeren ondalık sayıları tutar.
Tablo 6: Kesirli Sayı Veri Tipleri
Tarih Veri Tipleri
Veri Tipi Aldığı Değer Aralığı Tanımı Datetime 1 Ocak 1753-31 Aralık 9999 8 bayt yer kaplar.
3,33 milisaniye hassasiyetle belirtilen aralık çerçevesinde tarihleri tutar.
Datetime2 1 Ocak 0001-31 Aralık 9999 6-8 bayt yer kaplar. 100 nano saniye hassasiyetle belirtilen aralık çerçevesinde tarihleri tutar.
Smalldatetime 1 Ocak 1900-6 Haziran 2079 4 bayt yer kaplar.
Date 1 Ocak 0001-31 Aralık 9999 3 bayt yer kaplar. Aralık çerçevesinde sadece tarih tutar.
Time 3-5 bayt yer kaplar. Bölgesel saat farklılıklarının da tutulduğu veri tipidir. 21-01-20010 23:53:27.0369476 +02:00
Tablo 7: Tarih Veri Tipleri
Karakter Veri Tipleri
Veri Tipi Aldığı Değer Aralığı Tanımı Char En fazla 8000 karakter Unicode desteği olmayan karakter tutar.
Gireceğimiz karakter sayısı belli olduğunda kullanılır.
Varchar En fazla 8000 karakter Unicode desteği olmayan karakter tutar. Gireceğimiz karakter sayısı belli olmadığında kullanılır.
167
Varchar(max) En fazla 231 karakter (2 GB karakter)
Unicode desteği olamayan karakter tutar. Gireceğimiz karakter sayısı belli olmadığında kullanılır.
Text En fazla 2,147,483,647 karakter
Unicode desteği olmayan karakter tutar. Gireceğimiz karakter sayısı belli olmadığında kullanılır.
Tablo 8: Karakter Veri Tipleri
Unicode Karakter Veri Tipleri
Veri Tipi Aldığı Değer Aralığı Tanımı Nchar En fazla 4000 karakter Unicode karakterleri de tutar. Gireceğimiz karakter sayısı
belli olduğunda kullanılır. Nvarchar En fazla 4000 karakter Unicode karakterleri de tutar. Gireceğimiz karakter sayısı
belli olmadığında kullanılır. Nvarchar(max) En fazla 230 karakter (2
GB karakter) Unicode karakterleri de tutar. Gireceğimiz karakter sayısı belli olmadığında kullanılır.
Ntext En fazla 1,73,741,823karakter
Unicode karakterleri de tutar. Gireceğimiz karakter sayısı belli olmadığında kullanılır.
Tablo 9: Unicode Karakter Veri Tipleri
Binary Veri Tipleri
Veri Tipi Aldığı Değer Aralığı Tanımı Binary En fazla 8000 Byte Gireceğimiz Byte miktarı aynı olduğu durumlarda
kullanılır. Varbinary En fazla 8000 Byte Gireceğimiz Byte miktarının değişken olması
durumlarında kullanılır. Varbinary (max) En fazla 231 Byte (2GB) Gireceğimiz Byte miktarının değişken olması
durumlarında kullanılır. Image 2,147,483,647 Byte Gireceğimiz Byte miktarının değişken olması
durumlarında kullanılır. Tablo 10: Binary Veri Tipleri
Diğer Veri Tipleri
Veri Tipi Aldığı Değer Aralığı Tanımı Sql_Variant En fazla 8000 Byte Sütuna girilen değerler belli olmadığı zaman
kullanılır. Yani resim, string, sayı girilebilir. Xml - XML veri saklamak için kullanılır. Geometry - 2 boyutlu koordinat düzleminde nokta, doğru,
çember, çokgen gibi geometrik cisimlerin X ve Y eksenindeki koordinat bilgilerini tutar.
Geography - Objelerin geometik (dünyanın şeklinden dolayı aldığı isim) düzlemde ifade eden enlemsel ve boylamsal koordinatlar için kullanılır.
Hierarchyid - Hiyerarşik yapılar için kullanılır.
Tablo 11: Diğer Veri Tipleri
168
Not: VARCHAR ile CHAR arasındaki fark; Her ikisinde de maksimum ayrılan alan kadar yazı
girişi yapılabilir ama VARCHAR ile belirtilen alan hafızada yazılan karakter sayısı kadar yer
tutar, CHAR ile belirtilen alan ise ne kadar yazılırsa yazılsın, belirtilen alanın tamamını
kullanmış olur. Örneğin isim alanı VARCHAR(25) ile belirtilmiş olsun, bu durumda isim için
“Ali” girilirse hafızada 3 karakter yer tutar, “Mehmet” girilirse 6 karakter yer tutacaktır.
Örneğin isim alanı CHAR(25) ile belirtilmiş olsun, bu durumda isim için “Ali” de girilirse
“Mehmet” te girilirse veya “Mustafa Furkan” da girilirse yine de hafızada 25 karakter yer
tutacaktır. Bunlara rağmen CHAR(25) te olursa VARCHAR(25) te olursa maksimum 25
karakter uzunluğunda bir isim girilebilir.
9.2. Veri Türlerini Karşılaştırma
Access veri türleri, MS SQL Server veri türlerinden farklı adlandırılır. Örneğin, bit veri
türündeki bir MS SQL Server sütunu Access'e Evet/Hayır veri türünde bağlanır veya içeri
aktarılır. Aşağıdaki tabloda, MS SQL Server ve Access veri türleri karşılaştırılmıştır.
SQL Server veri türü Access veri türü Access alan boyutu bigint Büyük Sayı
binary (alan boyutu) İkili SQL Server alan boyutuyla aynı bit Evet/Hayır
char (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
char (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
datetime Tarih/Saat
decimal (duyarlık, ölçek) Sayı Ondalık (Access Duyarlık ve Ölçek özellikleri, SQL Server'ın duyarlık ve ölçeğiyle eşleşir.)
float Sayı Çift image OLE Nesnesi
int Sayı Uzun Tamsayı money Para Birimi
nchar (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
nchar (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
ntext Not
169
numeric (duyarlık, ölçek) Sayı Ondalık (Access Duyarlık ve Ölçek özellikleri, SQL Server'ın duyarlık ve ölçeğiyle eşleşir.)
nvarchar (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
nvarchar (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
nvarchar(MAX) Not
real Sayı Tek smalldatetime Tarih/Saat
smallint Sayı Tamsayı smallmoney Para Birimi
sql_variant Metin 255 text Not
timestamp İkili 8 tinyint Sayı Bayt uniqueidentifier Sayı Çoğaltma Kimliği varbinary İkili SQL Server alan boyutuyla aynı varbinary (MAX) OLE Nesnesi
varchar (alan boyutu); alan boyutu 255'ten küçük veya buna eşit olduğunda
Metin SQL Server alan boyutuyla aynı
varchar (alan boyutu); alan boyutu 255'ten büyük olduğunda Not
varchar(MAX) Not
xml Not
Tablo 12: Veri Türlerini Karşılaştırma
170
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
MSSQL Server veritabanı üzerinde veri türleri incelenmeli
171
Uygulama Soruları
1. Veri Türü Nedir?
2. MSSQL Server veritabanı üzerinde bir tablo oluşturarak alanları ve bu alanlara
uygun veri türü belirleyiniz.
3. MSSQL Server’daki veri türlerini program üzerinde inceleyiniz.
172
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde veri türünün ne olduğunu, MSSQL Server veritabanında hangi veri
türlerinin olduğunu ve tablolar arasında ilişkilendirme yaparken ilişkilendirme yapılacak
alanların veri türlerininaynı ya da uyumlu olması gerektiğini öğrendik.
173
Bölüm Soruları
1. MSSQL Server veritabanında True/False değerlerini saklamak için hangi veri türü kullanılmalıdır? A. Bigint B. Decimal C. Bit D. Float E. Int
2. MSSQL Server veritabanında zaman bilgisini saklamak için hangi veri türü
kullanılmalıdır?
A. Datetime B. Decimal C. Bit D. Float E. Bigint
3. MSSQL Server veritabanında parasal değerleri saklamak için hangi veri türü
kullanılmalıdır?
A. Datetime B. Money C. Real D. Nvarchar E. Int
4. MSSQL Server veritabanında VARCHAR(25) veri türü kullanılarak bir değişken tanımlandığı varsayılarak bu değişkene de “Mert” diye bir değer girildiği düşünülürse bu değişken kaç karakterlik yer kaplamış olur? A. 25 B. 28 C. 29 D. 4 E. 1
5. MSSQL Server veritabanında CHAR(10) veri türü kullanılarak bir değişken
tanımlandığı varsayılarak bu değişkene de “İstanbul” diye bir değer girildiği
düşünülürse bu değişken kaç karakterlik yer kaplamış olur?
A. 1 B. 5 C. 8 D. 10 E. 18
174
6. MSSQL Server veritabanındaki “float” veri tipi Access veritabanındaki hangi türüne karşılık gelir? A. Sayı/Çift B. Sayı/Uzun Tamsayı C. TarihSaat D. OLE Nesnesi E. Metin
7. Öğrenci notlarının (0-100 arası) MSSQL Server veritabanında saklandığını varsayarsak
notlar için kullanılan veri türü ne olmalıdır?
A. tinyint B. bit C. int D. float E. varchar
8. “4010925689” öğrenci numarasını saklamak için MSSQL Server veritabanında aşağıdaki veri tiplerinden hangi sayısal veri tipi kullanılmalıdır? A. tinyint B. char C. varchar D. bit E. int
9. “AUZEF2020” bilgisini MSSQL Server veritabanında saklamak için aşağıdaki hangi veri türü kullanılabilir? A. Int B. Bigint C. Varchar D. Bit E. Decimal
10. “456,25” ondalıklı sayıyı sayısal veri olarak saklamak için MSSQL Server veritabanında hangi veri tipini kullanmak gerekir? A. Int B. Tinyint C. Float D. Bit E. varchar
Cevaplar
1)C 2)A 3)B 4)D 5)D 6)A 7)A 8)E 9)C 10)D
175
10. MSSQL SERVER VERİTABANINDA TABLO VE TABLO
İLİŞKİLENDİRMELERİ
176
Bu Bölümde Neler Öğreneceğiz?
10.1. Veritabanı programında veritabanı ve yeni bir tablo oluşturmak
10.2. Önceden oluşturulmuş veritabanına tablo ve alan eklemek
10.3. Tabloda alan ekleme alan çıkarma
10.4. Veritabanında tablo ve tablo ilişkilendirmeleri
177
Bölüm Hakkında İlgi Oluşturan Sorular
1. Veritabanı programında veritabanı ve yeni bir tablo nasıl oluşturulur?
2. Önceden oluşturulmuş veritabanına tablo ve alan nasıl eklenir?
3. Tabloda alan ekleme yada alan çıkarma işlemi nasıl yapılır?
178
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Veritabanı oluşturma MSSQL Server’da veritabanı
oluşturabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
Tablo oluşturma MSSQL Server’da tablo
oluşturur, alan ekleyebilir,
alan çıkartabilir,
uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
179
Anahtar Kavramlar
Veritabanı oluşturma, tablo oluşturma, alan oluşturma, alan çıkarma, ilişki türleri
180
Giriş
Tablolar, veritabanlarında bilgilerin tutulduğu veri gruplarıdır. Tablo içerisinde yer alan
her bilgi kayıt, sütunlar ise alan olarak adlandırılır. Kayıtlar adı, soyadı, adresi gibi alanlardan
oluşmaktadır.
Bir veritabanı tasarlanırken diğer veritabanı nesnelerini oluşturmadan önce yapılması
gereken ilk işlemin tablo oluşturma olması gerekmektedir.
Tablo oluşturmaya başlamadan önce hangi tablolara ihtiyaç olduğunu belirlemek için
veritabanı ihtiyaç analizini yapmış olmak gerekir.
181
10.1. Yeni Bir Veritabanında Kod İle Yeni Bir Tablo Oluşturmak
MSSQL Server veritabanında kod ile tablo oluşturma işlemi için kullanılan yapı aşağıda
belirtildiği gibidir.
CREATE TABLE tablo_adı ( Alan_adı1 VERI_TİPİ , Alan_adı2 VERİ_TİPİ , … Alan_adıN VERİ_TİPİ
)
MSSQL Server veritabanında tablo oluşturabilmek için öncelikle ya yeni bir veritabanı
oluşturmak lazım ya da var olan bir veritabanının olması lazım. Veritabanı üzerinde birden fazla
veritabanı varsa ve hangi veri tabanı üzerinde çalışılacaksa “use” komutuyla beraber o
veritabanının kullanılacağı önceden belirtilmedir.
Şekil 82: MSSQL Server Veritabanı Sorgu Ekranı
Örnek
create database AUZEF // AUZEF adında veri tabanı oluşturuldu. use AUZEF // AUZEF veri tabanını kullan. CREATE TABLE OGRENCILER ( OGRNO INT ,
182
ADI VARCHAR(50) , SOYADI VARCHAR(50) , BOLUM_KODU CHAR(4) , CINSIYET CHAR(5) , TELEFON CHAR(16) , EPOSTA CHAR(25) )
/*Burada OGRENCİLER adında bir tablo oluşturur. OGRNO alanı tamsayı tipinde olacak, ADI ve SOYADI ile belirtilen alanlar maksimum 50 karakter alabilecek, ancak hafızada kullanılan karakter sayısı kadar yer tutacaktır. BOLUM_KODU, CINSIYET, TELEFON ve EPOSTA ile belirtilen alanlar maksimum 4, 5, 16 ve 25 karakter alabilen alanlar olacaktır.*/
10.2. Veritabanında Arayüz İle Yeni Bir Tablo Oluşturmak
Arayüz kullanarak tablo oluşturmak için veritabanı altında bulunan Tables sekmesine
sağ tıklanır, açılan pencereden New seçeneğine gelip Table’a tıklanır.
Şekil 83: MSSQL Server Veritabanında Arayüz İle Tablo Oluşturma
183
Açılan pencerede Column Name alanına kolon ismi (alan), Data Type alanına o kolonun (alan)
veri tipi yazılır. Allow Null alanı ise o kolonun boş geçilip geçilemeyeceğini seçmemizi sağlar.
İşaretli ise Null değer alabilir işaretli değil ise Null olamaz anlamına gelir.
Şekil 84: MSSQL Server Veritabanında Arayüzle Alan ve Veri Türü Belirleme
10.3. Tablo İle İlgili Bazı Özellikler
Kısıtlamalar (Constraints)
Bir tablo oluştururken bazı alanlar zorunlu bazı alanların ise isteğe bağlı olması istenir. Bazı
alanlar tekrarlanmamalı, bazı alanlar ise istenilen kadar tekrar edilebilmeli. Bazı alanlar tabloya
girilmeden önce bazı kurallara uyuyor mu diye kontrol edilmeli. Bazı alanlar ise aslında başka
tablodan referans alan alanlar olabiliyor. Bazı alanların ise başlangıçta varsayılan değerlerinin
olmasını isteriz. İşte bütün bunları sağlamak için tablo oluştururken bazı kurallar uygulanır.
NULL, NOT NULL: tablo oluştururken boş bırakılabilecek alanlar NULL ile boş
bırakılamayacak yani zorunlu olan alanlar ise NOT NULL ile işaretlenmelidir. NULL ifadesi
opsiyoneldir. Her hangi bir şey yazılmazsa NULL geçerlidir. Yani o alan istenirse boş
bırakılabilecek.
ÖRNEK
CREATE TABLE BOLUMLER ( BOLUM_KODU CHAR(4) NOT NULL, BOLUM_ADI VARCHAR(50) NOT NULL,
184
BOLUM_DETAY VARCHAR(50) NULL )
/* Burada BOLUMLER adında bir tablo oluşturulacak. BOLUM_KODU ile belirtilen
alan maksimum 4 karakter alabilen bir karakter olabilecek ve boş bırakılamayacak.
BOLUM_ADI ile belirtilen alan ise maksimum 50 karakter alabilecek, ancak hafızada
kullanılan karakter sayısı kadar yer tutacaktır. Bu alanda BOLOM_KODU gibi boş
bırakılamayacak. Çünkü her ikisi de NOT NULL ile işaretlenmişler. BOLOM_DETAY
ile belirtilen alan ise maksimum 50 karakter alabilecek ve isterse boş bırakılabilecek.
Çünkü NULL ile işaretlenmiş. Adres alanı da BOLUM_ADI gibi kullanılan karakter
sayısı kadar hafızada yer tutacaktır.*/
PRIMARY KEY: Yukarıdaki BOLUMLER tablosuna dikkat edilirse BOLUM_KODU ile
belirtilen alan aslında her bölüm için özeldir ve tekrarlanmamalıdır. Geçen dönemden
hatırlayacağınız üzere buna birincil anahtar diyorduk. (Birincil Anahtar: tablodaki bir kaydı
diğer kayıtlardan ayıran ve tekrara izin vermeyen alan). Tabloyu oluştururken aslında bunu
belirtebiliriz. Bir alanın birincil anahtar olduğunu belirtmek için o alan için tip belirtecinden
sonra PRIMARY KEY anahtar sözcüğü kullanılır.
Örnek CREATE TABLE BOLUMLER2 ( [BOLUM KODU] CHAR(4)PRIMARY KEY NOT NULL, [BOLUM ADI] VARCHAR(50) NOT NULL, [BOLUM DETAY] VARCHAR(50) NULL )
Yukarıda dikkat edilirse [BOLUM KODU] alanı tanımlanırken veri tipi belirtildikten sonra
PRIMARY KEY kullanılmıştır. Bu durum, [BOLUM KODU] alanının birincil anahtar
olduğunu ifade ediyor.
NOT: SQL’de eğer tablo adı veya alan adı iki kelimeden oluşuyorsa isterse kelimeler arasına
_ (alt çizgi) yerine kelimeler köşeli [ ] arasına yazılabilir. Yani BOLUM_KODU yerine
[BOLUM KODU] kullanılabilir.
Bir tabloda sadece bir tane birincil anahtar bulunabilir. Ama bu bir tane birincil anahtar birden
fazla alandan oluşa bilir. Böyle bir durumda PRIMARY KEY tanımlaması aşağıdaki gibi
yapılır.
185
Örnek
CREATE TABLE SINAVLAR ( [DERS KODU] CHAR(6) NOT NULL, [OGRENCI NO] INT NOT NULL, VIZE TINYINT NULL, FINAL TINYINT NULL, CONSTRAINT PK_SINAVLAR PRIMARY KEY([DERS KODU], [OGRENCI NO]) )
FOREIGN KEY: Şimdi de aşağıdaki öğrenciler tablosunu düşünün. Bu tabloda dikkat edilirse
BÖLÜM alanı aslında başka bir tablodan referans alıyor. Geçen dönemden de hatırlayacağınız
üzere buna referans anahtar veya dış anahtar diyorduk. Yani OGRENCI tablosundaki
BÖLÜM alanı aslında BÖLÜMLER tablosundaki birincil anahtar olan [BOLUM KODU]
alanına referans ediyor. Öğrenciler tablosu için SQL kodunu yazacak olursak aşağıdaki gibi
olacaktır.
Şekil 85: Tablolar Arası İlişkilendirme
Örnek CREATE TABLE OGRENCI ( NUMARA INT PRIMARY KEY NOT NULL, İSİM VARCHAR(25) NOT NULL, SOYİSİM VARCHAR(25) NOT NULL, BÖLÜM CHAR(4) FOREIGN KEY REFERENCES BOLUMLER2([BOLUM
KODU]) ON DELETE CASCADE ON UPDATE CASCADE NOT NULL, TELEFON CHAR(16) NULL )
186
Yukarıdaki örnekte referans verilirken FOREIGN KEY kısmı isteğe bağlıdır. Yazılmazsa da
olur. Önemli olan REFERENCES anahtar sözcüğünün yazılmış olmasıdır.
Bir tabloda sadece bir tane birincil anahtar bulunabilir, fakat birden fazla yabancı anahtar
bulunabilir. Bu durumda her referans için ayrı referans verilir. Yukarıdaki örnekte BÖLÜM
alanının referansı belirtildikten sonra “ON DELETE CASCADE” ve “ON UPDATE
CASCADE” ifadeleri kullanılmış. Bunun anlamı: eğer referans edilen kayıt silinirse veya
güncellenirse bu tabloda da aynı değişikliği yap demektir. Örneğin bölümler tablosundaki
bölüm kodu BPR1 olan bölüm silinirse BPR1 bölümüne kayıtlı bütün öğrencilerde silinecektir.
Eğer BPR1 olan bölüm kodu BBP1 olarak değiştirilirse öğrenciler tablosunda bölüm kodu
BPR1 olan bütün öğrenciler için bölüm BBP1 olarak güncellenecektir.
Eğer böyle bir durum istemiyorsak, yani bölümler tablosundan bir bölüm sildiğimizde
öğrenciler tablosundaki o bölüme ait öğrencilerin silinmesini istemiyorsak “ON DELETE
CASCADE” yerine “ON DELETE NO ACTION” yazmalıyız. Aynı durum güncelleme için
de geçerlidir. Yani bölümler tablosundan bir bölüm kodu güncellenince, öğrenciler
tablosundaki o bölüme kayıtlı öğrencilerin bölüm kodu güncellenmesin istiyorsak “ON
UPDATE CASCADE” yerine “ON UPDATE NO ACTION” yazmamız gerekecektir. Eğer
bölümler tablosundaki bir kayıt silinince öğrenciler tablosunda o bölüme kayıtlı öğrenciler
silinmesin fakat bölüm kodu güncellenince öğrenciler tablosundaki o bölümün kodları
güncellensin istiyorsak bu durumda “ON DELETE NO ACTION ON UPDATE
CASCADE” şeklinde yamalıyız. Aynı mantık tersi için de geçerlidir. Referans anahtar
tanımlanırken aşağıdaki kural göz önüne alınır.
ALAN_ADI VERİ_TİPİ [FOREIGN KEY] REFERENCES REFERANS_TABLO_ADI(REFERANS_ALAN_ADI)
ON DELETE { CASCADE | NO ACTION} ON UPDATE { CASCADE | NO ACTION}
Foreign Key (Yabancı anahtar) tanımlanırken alan tanımından sonra yazılabildiği gibi daha
sonrada aşağıdaki gibi de yazılabilirdi.
CONSTRAINT FK_BÖLÜM FOREIGN KEY (BÖLÜM) REFERENCES BÖLÜMLER([BÖLÜM KODU])
ON DELETE CASCADE ON UPDATE CASCADE
187
CHECK: Öğrenciler tablosunda TELEFON alanına dikkat edin. Telefon numarası için 16
karakter yer ayrılmış. Telefon yazılırken maksimum 16 karakterlik yer kullanıldıktan sonra
istenildiği şekilde girilebilir. Aslında bu istenen bir durum değildir. Örneğin kimisi numaralar
arasına nokta, kimisi tire veya bir başkası boşluk bıraka bilir. Dahası, kimisi şehir kodlarını
parantezler arasına alırken kimisi almaz, kimisi başına sıfır eklerken kimisi de eklemez. Bütün
bunlar aslında istenmeyen durumlardır. Sıralamaların veya aramaların doğru şekilde
yapılabilmesi için kayıtların aynı tipte olması gerekmektedir. Böyle durumlarda kontroller
(CHECK) kullanılmaktadır. Aşağıda telefon için örnek bir kontrol yazılmıştır.
Örnek
TELEFON CHAR(16) CHECK (TELEFON LIKE '([0][0-9][0-9][0-9]) [0-9][0-9][0-9] [0-
9][0-9] [0-9][0-9]')
Bir başka örnek olarak kan gruplarını verebiliriz. Bilindiği gibi bir insanın kan grubu A, B, 0
veya AB olabilir. Bir diğer örnek olarak ta cinsiyet olabilir. Cinsiyet sadece bay, bayan şeklinde
yazılsın istiyorsak bunları veritabanına girmeden önce bunlar haricinde bir şeyin yazılmış olup
olmadığını aşağıdaki gibi kontrol edebiliriz.
Örnek
KANGRUBU CHAR(2) CHECK(KANGRUBU IN ('A','B','0','AB')) NOT NULL
CİNSİYET CHAR(5) CHECK(CİNSİYET IN ('BAY', 'BAYAN')) NOT NULL
Bir alan kontrollü oluşturulmak istenince aşağıdaki kural göz önüne alınmalıdır.
ALAN_ADI VERİ_TİPİ CHECK({KOŞUL İFADESİ})
Koşul ifadeleri daha sonra ayrıntılı bir şekilde işlenecektir.
CHECK anahtar sözcüğü alan tanımlanırken yazılabildiği gibi aşağıdaki şekilde de
tanımlanabilir. Görüldüğü gibi koşul ifadesi maaş alanı tanımladıktan sonra başka bir satırda
yazılmış.
188
Örnek CREATE TABLE KISILER ( NUMARA INT PRIMARY KEY , ADI VARCHAR(25) NOT NULL, SOYADI VARCHAR(25) NOT NULL, MAAS SMALLMONEY NOT NULL, TELEFON CHAR(16) NULL, CONSTRAINT CKH_MAAS CHECK(MAAS BETWEEN 1000 AND 2000) , CINSIYET BIT NULL )
UNIQUE: Aşağıdaki örneği inceleyiniz. Çalışanlar tablosunda görüldüğü gibi [TC NO] alanı
için veri tipi tanımlamasından sonra UNIQUE anahtar sözcüğü yazılmıştır. Bunun anlamı;
birincil anahtar olmayan ancak yine de tekrarlanmaması gereken alanların sadece bir defa
girilmesine izin verir.
CREATE TABLE CALISANLAR ( NUMARA INT PRIMARY KEY NOT NULL, [TC NO] DECIMAL(11) UNIQUE NOT NULL, ISIM VARCHAR(25) NOT NULL, SOYISIM VARCHAR(25) NOT NULL, CINSIYET CHAR(5) CHECK(CINSIYET IN ('BAY', 'BAYAN')) NOT NULL, TELEFON CHAR(16) NULL, MAAS MONEY CHECK(MAAS > 1000) NULL )
DEFAULT: bazen bazı alanların varsayılan değerlerinin olmasını isteriz. Yani eğer farklı bir
şey belirtmiyorsak varsayılan değer otomatik olarak kayıt için girsin isteriz.
Örnek CREATE TABLE KISILER ( NUMARA INT PRIMARY KEY , ADI VARCHAR(25) NOT NULL, SOYADI VARCHAR(25) NOT NULL, BÖLÜM CHAR(4) DEFAULT 'BPR1' NOT NULL )
189
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
MSSQL Server veritabanı üzerinde veritabanı oluşturma uygulaması yapılmalı
MSSQL Server veritabanı üzerinde tablo oluşturma uygulaması yapılmalı
MSSQL Server veritabanı üzerinde tabloya alan ekleme ve alan çıkarma uygulaması
yapılmalı
190
Uygulama Soruları
1. MSSQL Server veritabanı üzerinde veritabanı oluşturunuz.
2. MSSQL Server veritabanı üzerinde tablo oluşturarak uygun alanlar ekleyiniz.
3. MSSQL Server veritabanı üzerinde varolan tabloda alan veri türünü değiştiriniz,
yeni alan ekleyip alan çıkartınız.
191
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde MSSQL Server veritabanı programı üzerinde veritabanı oluşturmayı, tablo
oluşturmayı, tabloda alan oluşturmayı, alanların veri türünü belirlemeyi öğrendik.
192
Bölüm Soruları
1. Aşağıdakilerden hangisi Personel verilerinin tutulduğu bir veritabanında Primary Key olması gereken alandır? A. Ad B. Soyad C. Departman D. Sicil Numarası E. Cinsiyet
2. Adres bilgisini saklamak için aşağıdaki veri türlerinden hangisi seçilmelidir? A. Image B. Datetime C. Integer D. nvarchar E. float
3. Aşağıdakilerden hangisi MSSQL Server kurulunca üzerinde varsayılan olarak kurulan veritabanlarından değildir? A. master B. model C. defaultdb D. msdb E. tempdb
4. Birbiriyle ilişki kurulan 2 tabloda silme işlemi yapıldıktan referans edilen kaydında silinmesini istiyorsak ilgili alana hangi komut yazılmalıdır? A. ON DELETE CASCADE B. ON UPDATE CASCADE C. ON INSERT CASCADE D. ON DELETE NO ACTION E. ON UPDATE NO ACTION
5. Birbiriyle ilişki kurulan 2 tabloda silme işlemi yapıldıktan referans edilen kaydında
silinmesini istiyorsak ilgili alana hangi komut yazılmalıdır? A. ON DELETE CASCADE B. ON UPDATE CASCADE C. ON INSERT CASCADE D. ON DELETE NO ACTION E. ON UPDATE NO ACTION
193
6. Birbiriyle ilişki kurulan 2 tabloda güncelleme işlemi yapıldıktan referans edilen kaydında güncellenmesini istiyorsak ilgili alana hangi komut yazılmalıdır? A. ON DELETE CASCADE B. ON UPDATE CASCADE C. ON INSERT CASCADE D. ON DELETE NO ACTION E. ON UPDATE NO ACTION
7. Birbiriyle ilişki kurulan 2 tabloda güncelleme işlemi yapıldıktan referans edilen kaydında güncellenmesini istemiyorsak ilgili alana hangi komut yazılmalıdır? A. ON DELETE CASCADE B. ON UPDATE CASCADE C. ON INSERT CASCADE D. ON DELETE NO ACTION E. ON UPDATE NO ACTION
8. “BR1515” kodlu bir kayıt aşağıdaki veri tiplerinden hangisi ile tanımlanması gerekmektedir? A. tinyint B. Image C. varchar D. Datetime E. float
9. MSSQL Server veritabanında boş bırakabilecek alanlar için hangi komut yazılmalıdır? A. NOT NULL B. CHECK C. ALLOW NULL D. NO NULL E. NULL
10. MSSQL Server veritabanında boş bırakılamayacak alanlar için hangi komut
yazılmalıdır? A. NOT NULL B. CHECK C. ALLOW NULL D. NO NULL E. NULL
Cevaplar
1)D 2)D 3)C 4)A 5)D 6)B 7)E 8)C 9)E 10)A
194
11. MSSQL SERVER'DA FONKSİYONLAR
195
Bu Bölümde Neler Öğreneceğiz?
11.1. SQL’de Kullanılan İşaretler
11.2. SQL’de Kullanılan Komutlar
11.3. SQL Fonksiyonları
196
Bölüm Hakkında İlgi Oluşturan Sorular
1. SQL’de Kullanılan işaretler nelerdir? Açıklayınız.
2. SQL’de kullanılan komutlar nelerdir? Hangi ne işe yarar? Açıklayınız.
3. SQL’de kullanılan hazır fonksiyonlar nelerdir? Açıklayınız.
197
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
SQL’de Kullanılan İşaretler SQL’de Kullanılan İşaretleri
Kavrar, MSSQL Server
veritabanında bu işaretleri
sorgu ile kullanabilir,
uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
SQL’de Kullanılan Komutlar SQL’de Kullanılan
Komutları Kavrar, MSSQL
Server veritabanında bu
komutları sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
SQL Fonksiyonları SQL Fonksiyonlarını Kavrar,
MSSQL Server
veritabanında bu
fonksiyonları sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
198
Anahtar Kavramlar
DISTINCT, WHERE, ORDER BY, GROUP BY, HAVING, SELECT INTO, LIKE,
BETWEEN, AVG, COUNT, SUM, MAX, MIN
199
Giriş
Bu bölümde SQL’de kullanılan işaretler, operatörler, SQL’de kullanılan Komutlar ve
SQL Fonksiyonları MSSQL Server veritabanı üzerinde uygulamalı olarak işlenecektir. Bu
konuların öğrenilmesiyle beraber sorgu oluşturulması kolaylaşacak, veritabanındaki verileri
işleme daha anlaşılır hale gelecektir.
200
11.1. SQL’de Kullanılan İşaretler
* İşareti
SQL deyimlerinde * işareti iki farklı amaç için kullanılır.
• Matematiksel işlemlerde çarpma işlemi olarak görevi vardır.
• Select * From ifadesinde kullanıldığında ise tüm alanların görünümde yer alacağını
belirtir.
+ İşareti
SQL deyimlerinde + işareti, metinleri birleştirmek için kullanılır.
Örnek: Adı alanı ile Soyadı Alanındaki bilgiler birleştiriliyor. select AD+' ' +SOYAD from Ogrenci
Adı alanındaki bilgi alınır, bir adet boşluk karakteri eklenir ve Soyadı alanındaki bilgi eklenir.
Böylece yeni oluşan alanda Adı ve Soyadı arasında bir adet boşluk bırakılmış olur.
As Komutu
SQL deyimleri ile oluşturulan görünüm sorgularında alan ve tablo isimlerini değiştirmek için kullanılır.
Not: As komutu ile adı değiştirilen alanların ve tabloların gerçekte adı değişmez. Sadece oluşturulan görünümde değişir.
Örnek
select ad+soyad as AdıSoyadı from Ogrenci
Şekil 86: As Komutu Uygulaması
201
[ ] Köşeli Parantezler
SQL deyimlerinde köşeli parantezler Alan ve Tablo isimlerinde kullanılır. Normalde tüm tablo
ve alan isimleri köşeli parantezler içinde yazılmalıdır. Fakat tek parçadan oluşan alan ve tablo
isimleri için köşeli parantez gerekmez.
Örnek select AD,[Telefon No] from Ogrenci /*Bu SQL ifadesinde alan isimleri içinde boşluk karakteri kullanıldığı için köşeli parantezler içinde yazılmıştır.*/
( ) Parantezler
SQL deyimlerinde normal Parantezler;
• Hazır fonksiyonlarda parametreler için kullanılır.
• Matematiksel işlemlerde işlemleri gruplandırarak işlem önceliği vermek için kullanılır.
• SQL ifadelerini gruplandırmak için kullanılır.
11.2. SQL’de Kullanılan Komutlar
DISTINCT Komutu
Alan içinde yer alan kayıtlarda aynı olan bilgilerden sadece bir adet gösterir.
Kullanımı
Select Distinct AlanAdı from TabloAdı
Örnek select ad from Ogrenci
select distinct ad from Ogrenci
Şekil 87: Distinct Komutu Uygulaması
202
WHERE Komutu
SELECT FROM cümlesine ilave olarak kullanılır. WHERE komutu ile belirtilen koşula uygun
olan kayıtların gösterilmesi sağlanır. WHERE komutundan sonra Şart ifadesi gelmelidir.
Kullanım Yerleri
SELECT Alanlar FROM Tablo_Adı WHERE Şart
DELETE FROM Tablo_Adı WHERE Şart
UPDATE Tablo_Adı Set Alan = .... WHERE Şart
Örnek
SELECT * FROM Musteri WHERE Bakiye > 400
Veri tabanında bulunan Musteri tablosunun görünümü oluşturulmaktadır. Bu görünümde
Bakiye alanındaki değer 400'ün üzerinde olan kayıtlar listelenmektedir.
Aşağıda WHERE komutu ile koşul oluştururken kullanılabilecek operatörler listelenmiştir.
Operatör Anlamı Örnek
> Büyüktür Bakiye > 400
< Küçüktür Bakiye < 400
>= Büyük eşit Bakiye >= 400
<= Küçük eşit Bakiye <= 400
<> Eşit değil Bakiye <> 400
Like içerir
Adı Like 'A*' A ile başlayan
Adı Like '*a*' içinde a harfi geçen
Adı Like '*a' A harfi ile biten
BETWEEN . AND Arasında Bakiye between 200 and 300
NOT Değil NOT Bakiye > 400
AND Ve birleştirme operatörü Bakiye > 400 AND Adı = 'Mehmet'
OR Veya birleştirme operatörü Bakiye > 400 OR Adı = 'Mehmet'
Tablo 13: SQL’de Kullanılan Operatörler
203
ORDER BY Komutu
Sorgu sonuçlarını belirtilen alanlara göre artan veya azalan şekilde sıralar
Kullanım şekli
SELECT Alanlar FROM tablo WHERE Şart [ORDER BY Alan1 [ASC | DESC ][, Alan2
[ASC | DESC ]][, ...]]]
Not: İki veya daha fazla alana göre sıralama yapılıyorsa, ilk alana göre kayıtlar sıralanır, ilk
alanda aynı değeri içeren kayıtlar ise kendi içinde ikinci alana göre sıralanırlar.
Örnekler:
Aşağıdaki örneklerde Musteriler tablosundaki kayıtlar Soyadı alanına göre artan şekilde
sıralanıyor. Sıralama ölçütü ASC ve DESC ile belirtilmesze ASC olduğu kabul edilir.
SELECT Adı, Soyadı FROM Musteriler ORDER BY Soyadı;
SELECT Adı, Soyadı FROM Musteriler ORDER BY Soyadı ASC;
Aşağıdaki örnekte Musteriler tablosundaki kayıtlar Maas alanına göre azalan ve ikinci sıralama
ölçütü olarak Soyadı alanına göre sıralanır.
SELECT Soyadı, Maaş FROM Musteriler ORDER BY Maas DESC, Soyadı;
Aşağıdaki örnekte Notlar tablosundaki kayıtlarda Başarı Notu adında yeni bir alan tanımlanıyor
ve bu alanda "Vize*0.4+Final*0.6" hesabı yapılıyor. Bu oluşan "Başarı Notu" alanına göre
kayıtlar Büyükten küçüğe doğru sıralanıyor.
SELECT Vize, Final, Vize*0.4+Final*0.6 as [Başarı Notu] FROM Notlar ORDER BY
Vize*0.4+Final*0.6 DESC;
Örnek
select OgrNo,AD, SOYAD, Vize from Ogrenci order by Vize desc /*Öğrencileri .öğrenci No,
Ad, Soyad, Vize alanların arasında vize notuna göre azalan şeklinde sıralar.*/
204
Şekil 88: Select Komutu Uygulaması
GROUP BY Komutu
Bir veritabanı tablosunda seçilmiş olan alanlarda aynı değeri içeren kayıtlardan birer adet
gösterilmesini sağlayan komuttur. Bu komutla birlikte SQL'de toplama fonksiyonları (Örneğin
Sum, Avg, Min vb) kullanılır.
Kullanımı
SELECT alanlar FROM tablo WHERE şart ifadesi GROUP BY gruplanacak alanlar
Örnek
select SOYAD from Ogrenci Group By SOYAD /*Ogrenci tablosundaki SOYADlardan aynı
olanlardan birer tane gösterir.*/
Şekil 89: Group By Komutu Uygulaması
HAVING Komutu
Group By komutu ile gruplandırma oluşturulup, bu gruplandırmada SQL Toplama
fonksiyonları kullanıldıysa, bu fonksiyonlarla çıkan sonuçlar üzerinde bir süzme işlemi
uygulanacaksa HAVING komutu kullanılır. Normal süzme işleminde WHERE komutu
kullanılır.
205
Kullanımı
SELECT Alanlar FROM tablo WHERE NormalSeçmeŞartı GROUP BY GrupListesi
HAVING GrupSeçmeŞartı
Örnek
Musteri tablosunda Sehir adında bir alan bulunmaktadır. Hangi sehirde kaç müşteri olduğunu
bulan ve 10 müşteriden az olan şehirlerin listesini veren SQL deyimi
SELECT Sehir, Count(Sehir) FROM Musteri Group By Sehir HAVING Count(Sehir)< 10
Örnek
select AD, COUNT (AD) from Ogrenci group by AD having COUNT(AD)<=2
/*Ogrenci tablosundaki AD alanına bakarak hangi addan kaç tane öğrenci var ve ogrenci
sayısı 2 ye eşit ve ikiden az olanları lisyteler.*/
Şekil 90: Having Komutu Uygulaması
SELECT … INTO Deyimi
Sorgu sonucunu Yeni bir tablo olarak kaydeder.
Kullanımı
SELECT Alanlar INTO YeniTabloAdı FROM KaynakTablo Örnek
Musteriler tablosundaki maas alanındaki değerler 1000 ve üzerinde olan kayıtlar yenitablo
ismindeki bir tabloya kaydediliyor.
SELECT * INTO YeniTablo FROM Musteriler WHERE Maas >= 1000
Örnek
206
Select * into YeniOgrenci from Ogrenci where AD='Ali' /*Adı Ali olan öğrencileri
YeniOgrenci adında tablo oluşturarak kaydeder. */
Şekil 91: Select Into Komutu Uygulaması
TOP n [PERCENT] Komutu
Sorgu sonucunda baştan veya Order By .. Desc kullanılarak sondan belirtilen sayıda veya
oranda kaydı gösterir.
Örnek
Öğrenciler tablosunda 2005 yılında mezun olan öğrencilerden ilk 25 adedinin listesini veren
SQL ifadesi
SELECT TOP 25 OgrNo, Adı, Soyadı FROM Ogrenciler WHERE MezunYılı=2005 Örnek
select top 3 OgrNo, BasariNotu from Ogrenci where BasariNotu>2 order by
BasariNotu asc/*Öğrenci tablosunda başarı notu 2 den büyük olanlardan 3 adetini en
küçükten büyüğe doğru (artan) şeklinde OgrNo ve Başaarı notunu yazarak listeler. */
Şekil 92: Top Komutu Uygulaması
Örnek select top 10 percent OgrNo, BasariNotu from Ogrenci where Mezuniyet=2005 order
by BasariNotu desc/*Ogrenciler tablosundaki mezuniyet yılı 2005 olanlar arasında başarı
notu bakımından %10 ‘a girenleri listeler. */
207
Şekil 93: Top n Komutu Uygulaması
LIKE Komutu
Where deyimi ile birlikte kullanılır. Aramak istenilen alanda (sütunda) bulunan veriler
içerisinde belirli kayıtları listelemek için kullanılır.
Karakter Açıklama
% Tüm İfadeler
? Tek Karakter
Select <Sütun_Adı> from <Tablo_Adı> where <Sütun_Adı>Like <Koşul_İfadesi>
Karakter Açıklama Like ‘%a’ Son karakteri “a” olan tüm veriler Like ‘%a%’ İçerisinde “a” olan tüm veriler Like ‘a%’ “a” ile başlayan veriler Like ‘?a’ İkinci karakteri “a” olan ve iki karakterli tüm veriler Like ‘a??’ İkinci karakteri “a” olan toplam 3 karakterli tüm veriler
Örnek select * from Ogrenciler where Adres Like 'a%' /* Ogrenciler tablosunda Adres sütununda "a" ile başlayan tüm veriler*/
Şekil 94: Like Komutu Uygulaması
208
BETWEEN Komutu
Belirlenen sütun içerisinde iki değer arasındaki bilgileri getirmek için kullanılır.
Select <sütuna_adı> from <Tablo_adı> where <sütun_adi> between <ilk_değer> and
<İkinci_değer>
Örnek
select * from Notlar where F Between 25 and 50 /* Notlar tablosunda F sütununda final notları
25 ve 50 arasında olanları listeler.*/
Şekil 95: Between Komutu Uygulaması
IN Komutu
Sütun içerisinde sadece istediğimiz değerleri içeren verileri getirecektir.
Select <sütuna_adı> from <Tablo_adı> where <sütun_adi> IN (<değer1,değer2>)
Örnek
select * from Ogrenciler where Adi IN ('Erkan','Mustafa','Selçuk') /* Öðrenciler tablosunda Adi sütununda Erkan, Mustafa, Selçuk ismindeki öðrencilere ait bilgileri listeler.*/
Şekil 96: In Komutu Uygulaması
209
NEWID Komutu
Tablo içerisinde yer alana verilerden rastgele satırlar getirmek için kullanılır.
Select <sütuna_adı> from <Tablo_adı> order by NEWID()
Örnek select * from Ogrenciler order by NEWID() /* Ogrenciler tablosundaki verileri rastgele listeler*/
Şekil 97: Newid Komutu Uygulaması
11.3. SQL Fonksiyonları
AVG () – AVERAGE
Sütundaki değerlerin ortalamasını almak için kullanılır.
Select AVG (<sütun_adi>) from <tablo_adi>
Örnek select AVG(F) from Notlar /* Notlar tablosundaki F sütunundaki yani final notlarının ortamalasını alır.*/
Şekil 98: Avg Fonksiyonu Uygulaması
COUNT()
Seçilmiş olan sütundaki boş olmayanların kayıtların adedini verir.
Select COUNT (<sütun_adi>) from <tablo_adi>
Örnek
select COUNT(V) from Notlar /* Notlar tablosundaki V sütununda kaç kayıt olduğunu listeler.*/
210
Şekil 98: Count Fonksiyonu Uygulaması
SUM ()
Seçilmiş olan sütundaki kayıtları toplar.
Select SUM (<sütun_adi>) from <tablo_adi Örnek
select SUM(V) from Notlar /* Notlar tablosundaki V sütunundaki kayıtları toplar ve sonucu
listeler.*/
Şekil 99: Sum Fonksiyonu Uygulaması
MAX ()
Seçilmiş olan sütundaki en büyük değeri listeler.
Örnek select MAX(V) from Notlar /* Notlar tablosundaki V sütunundaki kayıtlar arasından en büyük olan değeri listeler.*/
Şekil 100: Max Fonksiyonu Uygulaması
MIN ()
Seçilmiş olan sütundaki en küçük değeri listeler.
Örnek select MIN(V) from Notlar /* Notlar tablosundaki V sütunundaki kayıtlar arasından en küçük olan değeri listeler.*/
211
Şekil 101: Min Fonksiyonu Uygulaması
UPPER()
Belirtilen sütundaki tüm verileri büyük harfle göstermek için kullanılır.
Örnek select upper (Adi) from Ogrenciler /* Ogrenciler tablosundaki Adi sütunundaki tüm verileri büyük harfle gösterir*/
Kayıtlı Olan Veri
Sorgu Sonucu
Şekil 102: Upper Fonksiyonu Uygulaması
LOWER ()
Belirtilen sütundaki tüm verileri küçük harfle göstermek için kullanılır.
Örnek select lower (Adi) from Ogrenciler /* Ogrenciler tablosundaki Adi sütunundaki tüm verileri küçük harfle gösterir*/
Kayıtlı Olan Veri
Sorgu Sonucu
Şekil 103: Lower Fonksiyonu Uygulaması
212
SUBSTRING ()
Belirtilen sütundaki verilerin belirlenen karakterleri göstermek için kullanılır.
Select SUBSTRING (<Sütun_adı>, <Başlangıç>, <Kaç_Karakter>) from <tablo_adı>
Örnek select SUBSTRING (Adi,1,4) from Ogrenciler /* Ogrenciler tablosundaki Adi
sütunundaki verilerin 1. karakterinden 4. karakterine kadar tüm verileri listeler*/
Şekil 104: Substring Fonksiyonu Uygulaması
FLOOR(), CEİLİNG(), ROUND()
Bu fonksiyonlar yuvarlama fonksiyonlarıdır.
Floor() : Verilen sayısal ifadeyi kendisine en yakın ve kendisinden küçük olan tam sayıya
yuvarlar. Kullanımı : Floor(sayisal_ifade) şeklindedir.
Örnek Kullanım :
Select Floor(24.9)
ifadesi sonuç olarak 24 görüntüler
Ceiling() : Verilen sayısal ifadeyi kendisine en yakın ve kendisinden büyük olan tam sayıya
yuvarlar. Kullanımı : Ceiling(sayisal_ifade)
Örnek Kullanım :
Select Ceiling(24.1)
213
ifadesi sonuç olarak 25 değerini görüntüler
Round() : Verilen sayısal ifadeyi yuvarlamak için kullanılır. yuvarlama işlemi 5 ten küçük
değerler için aşağı 5 ve 5 ten büyük değerler için yukarı olur. kullanım şekli : ROUND (
numeric_expression , length [ , function ] ) ondalık kısımda length parametresiyle belirtilen
kadar basamak kalır
Örnek Kullanım :
Select Round(24.23,1)
şeklinde bir kullanım 24.2 sonucunu gösterir.
LEFT
Verilen metinden belirtilen sayıda soldan karakter geriye döndürür.
Örnek select adi, LEFT(adi,3) from Ogrenciler /* Ogrenciler tablosundaki Adi alanındaki verileri listelerken sadece ilk 3 karakteri listeler.*/
Şekil 105: Left Fonksiyonu Uygulaması
RIGHT
Verilen metinden belirtilen sayıda sağdan karakter geriye döndürür.
Örnek select adi, RIGHT(adi,4) from Ogrenciler /* Ogrenciler tablosundaki Adi alanındaki verileri listelerken sadece son 4 karakteri listeler.*/
214
Şekil 106: Right Fonksiyonu Uygulaması
LEN
Verilen Metnin karakter sayısını geriye döndürür.
Örnek
select adi, len (Adi) from Ogrenciler /* Ogrenciler tablosundaki Adi alanındaki verilerin
karakter sayısını listeler.*/
Şekil 107: Len Fonksiyonu Uygulaması
LTRIM
Verilen metnin sol tarafındaki boşluk karakterlerini silerek kalan kısmı geriye döndürür.
Örnek
select adi, ltrim (Adi) from Ogrenciler /* Ogrenciler tablosundaki Adi alanındaki verilerin sol
tarafındaki boşlukları silerek listeler.*/
215
Şekil 108: Ltrim Fonksiyonu Uygulaması
RTRIM
Verilen metnin sağ tarafındaki boşluk karakterlerini silerek kalan kısmı geriye döndürür.
Örnek
select adi, rtrim (Adi) from Ogrenciler /* Ogrenciler tablosundaki Adi alanındaki verilerin sağ
tarafındaki boşlukları silerek listeler.*/
216
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
MSSQL Server veritabanı üzerinde sorgularla beraber öğrenilen işaret ve operatörler
kullanılmalı
MSSQL Server veritabanı üzerinde öğrenilen komutlar sorgularla beraber kullanılmalı
MSSQL Server veritabanı üzerinde öğrenilen fonksiyonlar sorgularla beraber kullanılmalı.
217
Uygulama Soruları
1. SQL’de kullanılan işaret ve operatörler nelerdir? Açıklayınız.
2. SQL’de kullanılan komutlardan 5 tanesini yazarak açıklayınız. Nasıl
kullanıldığını örnek üzerinde gösteriniz.
3. SQL’de kullanılan fonksiyonlardan 5 tanesini yazarak açıklayınız. Nasıl
kullanıldığını örnek üzerinde gösteriniz.
218
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde SQL’de kullanılan işaret ve operatörlerin neler olduğunu öğrendik. Bu
operatörleri Access veritabaında uygulamasını yapmış olduk. Bununla beraber SQL’deki
komutlardan Where’i şartlı sorgularda kullanabileceğimizi, Order By’ı sorgu sonuçlarını
belirtilen alanlara göre artan veya azalan şekilde sıralayabileceğimizi, Like’ı veriler içerisinde
belirli kayıtları listeleyebileceğimizi öğrenmiş olduk. Ayrıca SQL fonksiyonlardan AVG ile
alanın (sütunun) ortalamasını alabileceğimizi, SUM ile alandaki sayısal ifadeleri
toplayabileceğimizi, MAX-MIN ile alan içindeki en büyük ve en küçük değerlerin ne olduğunu
öğrenebileceğimizi görmüş olduk.
219
Bölüm Soruları
1. Aşağıdakilerden hangisi “Gökhan” ve “TURAN” ifadelerini birleştirip “GökhanTURAN” şeklinde yazma işlemi için kullanılan SQL deyimidir?
A. / işareti B. * işareti C. % işareti D. – işareti E. + işareti
2. MSSQL Server veritabanında SQL deyimleri ile oluşturulan görünüm sorgularında alan ve tablo isimlerini değiştirmek için kullanılır?
A. Like B. In C. Between D. All E. As
3. MSSQL Server veritabanında Ad alanı içinde birden fazla aynı isimde olan kayıtların olduğunu varsayarsak ve bu kayıtların tamamını değil de aynı olan bilgilerden sadece birer adet göstermesini istiyorsak hangi komutu kullanmalıyız?
A. SUM B. LIKE C. GROUP BY D. DISTINCT E. LEFT
4. Aşağıdakilerden hangisi MSSQL Server veritabanında tablo içerisinde yer alan kayıtlardan rastgele satırlar getirmek için kullanılan SQL komutudur?
A. IN B. WHERE C. BETWEEN D. GROUP BY E. NEWID
5. Aşağıdakilerden hangisi bir sütunda yer alan tüm arasınav notlarını toplamak için kullanabilecek SQL fonksiyonudur?
A. LTRIM () B. SUM () C. AVG () D. MAX () E. RIGHT ()
220
6. Aşağıdakilerden hangisi “AUZEF” şeklindeki ifadeyi “auzef” olarak dönüştüren SQL fonksiyonudur?
A. MIN () B. UPPER () C. LOWER () D. MAX () E. SUM ()
7. Aşağıdakilerden hangisi belirtilen sütundaki tüm verileri küçük harfle göstermek için kullanılan SQL fonksiyonudur?
A. UPPER () B. LOWER () C. SUM () D. MAX () E. MID ()
8. Aşağıdakilerden hangisi “AUZEF” kelimesindeki sağdan 3 harfi olan “ZEF” harflerini geriye döndürmek için kullanılan SQL fonksiyonudur?
A. UCASE () B. LCASE () C. LEFT () D. RIGHT () E. MID ()
9. Aşağıdakilerden hangisi “AUZEF2020” ifadesinde olduğu gibi karakter sayısı olarak geriye 9 değerinin döndürmek için kullanılan SQL fonksiyonudur?
A. MID () B. RIGHT () C. LTRIM () D. RTRIM () E. LEN ()
10. Aşağıdakilerden hangisi “AUZEF ” metninde olduğu gibi sağ tarafındaki boşluk karakterlerini silerek kalan kısmı “AUZEF” olarak geriye döndürmek kullanılan SQL fonksiyonudur?
A. RTRIM () B. LEN () C. LTRIM () D. RIGHT () E. LEFT ()
Cevaplar
1)E 2)E 3)D 4)E 5)B 6)C 7)B 8)B 9)E 10)A
221
12. MSSQL SERVER VERİ İŞLEMLERİ
222
Bu Bölümde Neler Öğreneceğiz?
12.1. View Kullanımı
12.2. Stored Procedure Oluşturma
12.3. Trigger Kullanımı
223
Bölüm Hakkında İlgi Oluşturan Sorular
1. Bir çok tablodan bilgi çekme işlemini tek bir noktadan kontrol etmek için ne yapmak
gerekir? Açıklayınız.
2. Stored Procedure Nedir? Açıklayınız.
3. Trigger Nedir? Açıklayınız.
4. Trigger Türleri Nelerdir? Açıklayınız.
224
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
View Kullanımı Bir çok tablodan bilgi çekme
işlemini tek bir noktadan
kontrol etmek için view
kullanabilir.
Okuma- Anlama Ders
notları, Sunumlar,
Kaynaklar, Uygulama
Stored Procedure Oluşturma Veritabanımız için dışarıdan
parametre alan tekli ya da
çoklu değer döndürebilen,
içerisinde SQL sorgularımızı
gerçekleştirdiğimiz
programlama birimleri
oluşturabilir.
Okuma- Anlama Ders
notları, Sunumlar,
Kaynaklar, Uygulama
Trigger Oluşturma Trigger (tetikleyici), SQL
Server üzerinde herhangi bir
işlem gerçekleştiğinde başka
bir işlemin tetiklenmesi
işlemini gerçekleştirebilir.
Okuma- Anlama Ders
notları, Sunumlar,
Kaynaklar, Uygulama
225
Anahtar Kavramlar
View, Stored Procedure, Trigger, SQL
226
Giriş
Bir çok tablodan bilgi çekme işlemlerini tek bir noktadan kontrol etmek için View
kullanılır. Tablolar üzerinde insert, update ve delete işlemlerinin öncesinde veya sonrasında
işlem yapmayı sağlamak için trigger kullanılır. Veritabanları için dışarıdan parametre alan tekli
ya da çoklu değer döndürebilen, içerisinde SQL sorgularının gerçekleştirildiği program
birimlerine Stored Procedure denilmektedir. Bu bölümde view, trigger ve stored procedure ile
veri işleme işlemleri yapılacaktır.
227
12.1. View
Bir çok tablodan bilgi çekme işlemini tek bir noktadan kontrol etmemizi sağlar. İçersinde veri
bulunmaz sadece tabloların görünümleridir.
View’in Kullanıldığı Durumlar
• View’ler SQL Server açık olduğu sürece hazırda beklerler. Bu yüzden performans
sağlamış oluruz.
• Bir projede birden fazla tablo kullanılır ve sürekli union, join gibi sorguları kullanırız.
Bu tarz sorguları yazmak her zaman uzun büyük vakit kaybı olur.
• Tablolarımızda fiziksel bir değişiklik yapmak gerekebilir veya tablo içinde olmayan
geçici kolonlar oluşturmak istenebilir.
Örnek create database Ogrenciler use Ogrenciler create table TblSehir ( ID int identity(1,1) primary key, Sehir varchar (20) ) Create table TblCinsiyet ( ID int identity(1,1) primary key, Cinsiyet varchar(5) ) Create table TblOgrenci ( ID int identity(1,1) primary key, Ad Varchar(20), Soyad varchar(20), SehirID int references TblSehir(ID), CinsiyetID int references TblCinsiyet(ID) ) insert into TblSehir values ('Burdur') insert into TblSehir values ('Isparta') insert into TblSehir values ('Antalya') insert into TblCinsiyet values ('Erkek') insert into TblCinsiyet values ('Kadın') insert into TblOgrenci values ('Ali','Kaan',1,2)
228
insert into TblOgrenci values ('Ayþe','Sakar',3,2) insert into TblOgrenci values ('Asu','Bakar',2,1) insert into TblOgrenci values ('Hasan','Yanbasan',3,1) insert into TblOgrenci values ('Mehmet','Okçu',1,1)
Şimdide view oluşturalım. Bu view’de TblOgrenci tablosundaki bilgileri TblSehir ve Tbl
Cinsiyet tablosundan gerekli bilgileri alarak tablonun oluşmasını sağlayacaktır.
use Ogrenciler go Create View OgrenciGetir as select TblOgrenci.ID, TblOgrenci.Ad,TblOgrenci.Soyad, TblCinsiyet.Cinsiyet,
TblSehir.Sehir from TblOgrenci join TblSehir on TblSehir.ID=TblSehir.ID join TblCinsiyet on TblCinsiyet.ID=TblCinsiyet.ID
Oluşturduğumuz view’i çalıştırmak için select sorgusunu kullanacağız.
select * from OgrenciGetir
12.2. Stored Procedure
Veritabanımız için dışarıdan parametre alan tekli ya da çoklu değer döndürebilen, içerisinde
SQL sorgularımızı gerçekleştirdiğimiz programlama birimleridir. Stored procedureler veri
tabanı sunucusunda saklandığından daha hızlı çalışırlar. Stored Procedure birimine
baktığımızda; hız, güvenlik, performans, işlem yükünün düşmesi, ağ trafiğinin azalması olarak
Stored Procedure kullanmamız için nedenlerdendir.
Kullanımı
Create proc <Prosedür_Adı> <Parametreler>
As <Sorgularımız>
Şimdi Öğrenci tablosunu inceleyelim.
use Ogrenciler select * from TblOgrenci
229
Şekil 109: Stored Procedure Uygulaması
Prosedürü oluşturmadan önce isim kurallarını hatırlamak gerekirse; aşağıdaki kurallara gözatmek lazım.
• Türkçe karakter kullanmayın • Boşluk kullanmayın. • Rakamla başlayamaz. • Ayrılmış isim (select, insert) kullanılamaz.
Aşağıdaki sorgumuzu yazdıktan sonra çalıştıralım.
Örnek
use Ogrenciler go Create Proc TumBilgiler As
Select * from TblOgrenci
Oluşturduğumuz prosedürü görmek için veritabanı içerisinde Programmaility>Stored
Procedures bölümünde görebiliriz.
230
Şekil 110: Oluşturulan Stored Procedure’nun Gösterimi
Prosedürü çalıştırmak için exec komutu kullanılır.
exec TumBilgiler
Şekil 111: Stored Procedure Çalıştırılması
Prosedürümüzde koşullu ifadeleri de kullanabiliriz.
create proc KisiGetir as select * from TblOgrenci where Ad='Ali'
Prosedürümüz yazdığımız Ali Adına göre kayıtları listeleyecektir. Prosedürü çalıştırmak için
exec KisiGetir yazdıktan sonra çalıştıralım.
exec KisiGetir
231
Şekil 112: KisiGetir Stored Procedure’nün Çalıştırılması
Bu örnekte değeri içine yazdık, dışarıdan bir parametre alma durumunda değişken
tanımlamamız gerekmektedir.
use Ogrenciler go create proc OgrenciBilgiGetir @OgrenciAdi varchar(40) as
select * from TblOgrenci where Ad=@OgrenciAdi
Burada varchar tipinde parametremizi vererek sorgumuzu çalıştırabiliriz.
exec OgrenciBilgiGetir 'Ayşe'
Şekil 113: OgrenciBilgiGetir Stored Procedure’nün Çalıştırılması
Birden fazla parametre eklemek durumunda kaldığımızda aralara virgül koymamız yeterli
olacaktır.
use Ogrenciler go create proc OgrenciEkle @OgrenciAd varchar(30), @OgrenciSoyad varchar(30), @Sehir int, @Cinsiyet int As
232
insert into TblOgrenci values (@OgrenciAd,@OgrenciSoyad, @Sehir,@Cinsiyet)
Yazdığımız sorguya göre tablomuza yeni kayıt eklemek için prosedür yazılmıştır. Şim bu
prosedürü çalıştırmak için aşağıdaki sorgumuzu yazalım.
exec OgrenciEkle 'Gökhan','ARMAN', 1,2
Şekil 114: OgrenciEkle Stored Procedure’nün Çalıştırılması
Like ifadesini Stored Procedure’lerde kullanalım.
create proc OgrenciAra @Kriter varchar(30) as select * from TblOgrenci where Ad like '%' + @Kriter+ '%'
Prosedürümüzü oluşturduktan sonra parametremizi vererek çalıştıralım. Ad kolonunda U
olanları listeleyecektir.
exec OgrenciAra 'U'
Şekil 115: OgrenciAra Stored Procedure’nün Çalıştırılması
Stored Procedure’leri düzeltmek için Alter ifadesini kullanmak gerekmektedir. Aşağıdaki
ifademizde Stored Procedure’ün komutlarını güncelleyebiliriz.
alter proc OgrenciAra @Kriter varchar(30) as select * from TblOgrenci where Soyad like '%' + @Kriter+ '%'
233
Prosedürü silmek için drop komutu kullanılır.
drop proc OgrenciEkle
12.3. Trigger Kullanımı
Trigger (tetikleyici), SQL Server üzerinde herhangi bir işlem gerçekleştiğinde başka bir
işlemin tetiklenmesi için kullanılır. Tetikleyici (trigger), kayıt eklendiğinde (INSERT),
silindiğinde (DELETE) veya değiştirildiğinde (UPDATE) otomatik olarak devreye giren, özel
bir çeşit SP’lerdir. Genellikle komplike iş kurallarını gerçekleştirmek için veya veri
bütünlüğünü korumak için kullanılır.
12.3.1. Trigger Ne Zaman Kullanılır?
Çeşitli amaçlara uygun olarak tetikleyiciler kullanılabilir. Bu amaçlar;
1. Değişiklikleri takip etmek,
2. Birincil anahtar üretmek,
3. Karmaşık iş kurallarını gerçekleştirmek,
4. E-posta atmak gibi olayları otomatik olarak yapmak,
5. Standart hata mesajlarının dışında bir hata mesajı elde etmek,
6. Veritabanı erişimlerini takip edebilmek,
7. Nesnede meydana gelebilecek değişiklikleri takip ve engellemektir.
12.3.2. Trigger Türleri
SQL Server'da iki farklı tür tetikleyici vardır. Bunlar After ve Instead Of
tetikleyicileridir.
1. After Tetikleyicileri
• After tetikleyicileri, sadece tablolar üstünde tanımlanabilir.
234
• After tetikleyicileri, kendiyle ilişkili işlem gerçekleştikten hemen sonra tetiklenir
(ateşlenir).
• Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After tetikleyicileri
tanımlanabilir.
• Birden fazla tetikleyici, bir iş için tanımlanabildiği gibi, bir tetikleyici de birden fazla iş
için tanımlanabilir.
2. Instead Of Tetikleyicileri
• Instead Of tetikleyicileri hem tablolar için hem de görünümler (views) için
tanımlanabilirler.
• Instead of tetikleyicileri, belirlenen işlem gerçekleşirken devreye girer.
• Instead of tetikleyicileri işlemlerin arasına girebildiğinden kontrol amaçlı
kullanılabilirler.
• After trigger’ı arasındaki en önemli fark, After trigger’ını devreye sokan olay olmuş
kabul edilerek akışı trigger’a bırakırken, Instead of trigger’ı istenen işlemi
gerçekleştirmez.
12.3.3. Trigger Oluşturmak
CREATE TRIGGER’i kullanabilmek için sysadmin, db_owner veya db_ddladmin rolüne
sahip olmak gerekir.
Yazılışı
CREATE TRIGGER tetikleyici_adi
ON tablo_adi
FOR veya AFTER veya INSTEAD OF (INSERT veya UPDATE veya DELETE)
AS otomatik çalışacak Sql ifadeleri
• FOR trigger’ı AFTER trigger’ı ile aynı anlamda kullanılmaktadır.
• SQL server üstünde iki farklı türden trigger tanımlanabilir: aynı anlama sahip FOR veya
AFTER ile ya da INSTEAD OF ile.
• Üç farlı olay için trigger yazılabilir: INSERT, UPDATE ve DELETE.
235
• Bir trigger, birden fazla olay tarafından tetiklenmek üzere programlanacaksa bu FOR
veya AFTER kelimelerinden sonra belirtilir.
Örnek:
Create Trigger trg_musteri_girisi
ON musteri
AFTER Insert
AS
Print ‘veri girildi’
Print ‘trigger çalıştı’
INSERT Tetikleyicisi
• Bir tablo üzerinde yeni kayıtlar girildikten sonra devreye giren tetikleyicidir.
• Insert tetikleyici devreye girdikten sonra Inserted tablosunda yeni eklenen kayıtların
bir kopyası tutulur.
• Inserted tablosu, asıl tablonun yapısal bir kopyası olup tetikleyici sonlanana kadar
saklanır.
• Eğer, bir tabloya birden fazla kayıt girildiyse tetikleyici her kayıt için ayrı ayrı devreye
girmez. Tek seferde işlemi gerçekleştirir.
• Çünkü SQL Server, satır bazında tetikleyici desteği sağlamamaktadır.
DELETE Tetikleyicisi
• Tablodan bir kayıt silindiğinde otomatik olarak yapılması istenen işlemler için DELETE
tetikleyicisi kullanılır.
• DELETE tetikleyicisi çalıştıktan sonra silinen kayıt Deleted sahte tablosuna kaydedilir.
• Deleted tablosunun Inserted tablosundan farkı, asıl tablodan silinen kayıt artık Deleted
tablosunda yer almaktadır.
236
UPDATE Tetikleyicisi
• Tablo üzerindeki kayıt ya da kayıtlarda güncelleme olduğunda devreye girecek olan
tetikleyicidir.
• INSERT ve DELETE tetikleyicilerden biraz farklıdır.
• Farkı ise UPDATE tetikleyici devreye girdiğinde Inserted sahte tablosu asıl tablodaki
kayıtlardan, düzenlenmiş kayıtların kopyasını, Deleted sahte tablosu ise kayıtların
düzenleme işleminden önceki hâllerini tutar.
INSTEAD OF Tetikleyicisi
• INSTEAD OF tetikleyicisi, belirlenen işlem gerçekleşirken devreye girer ve kendi
içinde tanımlanan komutları icra etmeye başlar.
• Yani, belirlenen işlemin yerine geçer.
• Bu tetikleyiciden önceki tetikleyiciler, veriler uygun değilse ROLLBACK ile işlemleri
geri alırlar.
• INSTEAD OF, işlem gerçekleşirken verilerin uygunluğunu denetleyecektir.
12.3.4. Trigger Yönetimi
Tetikleyiciyi Düzenlemek (ALTER)
• CREATE ile oluşturulmuş bir tetikleyiciyi daha sonra üzerinde değişiklikler yapmak
üzere tekrar açmak isteyebilirsiniz. Bunun için, tablonuzda oluşturulmuş bir tetikleyici
üzerindeyken sağ tıklayarak açılan menüden Modify komutunu vermeniz gerekir.
• ALTER, var olan tablo, tetikleyici gibi nesneler üzerinde değişiklik yapmak için
kullanılan komuttu.
Tetikleyiciyi Silmek (DROP)
• Oluşturulan bir tetikleyiciyi DROP komutuyla ya da tetikleyici üzerinde sağ tıklayarak
açılan menüden Delete komutunu vererek silebilirsiniz.
• T-SQL kodu olarak, DROP TRIGGER Musteri_Silme şeklinde yazabilirsiniz.
Tetikleyiciyi Aktif ya da Pasif Yapma
237
• Oluşturulan bir tetikleyici, her zaman aktif durumdadır. Tetikleyiciyle ilgili bir durum
oluştuğunda otomatik olarak devreye girer.
• İstenildiğinde oluşturulan bu tetikleyiciler pasif hâle getirilebilir.
• Tetikleyici üzerinde sağ tıklayarak açılan menüde Disable komutunu verdiğinizde
tetikleyici pasif hâle gelir.
ALTER TABLE tablo_adi
DISABLE TRIGGER Musteri_Silme
• Tetikleyiciyi tekrar aktif hâle getirebilmek için menüden Enable komutunu veya
ENABLE TRIGGER komutunu kullanmanız gerekir.
12.3.5. Trigger Uygulamaları
Örnek1: Tabloyu Sildirmeyen Trigger
create database Mart
use Mart
create table Deneme(sayi int)
go
create trigger Sildirme
on Deneme
for Delete
as
Print ('Bu tabloyu silemezsiniz!')
rollback transaction
delete from Deneme
Örnek2: Kullanıcı Kayıt Ekledikten Sonra Tabloyu Listeleyen Trigger
create database OKULVT
use OKULVT
create table OgrenciBilgileri(
238
OgrNo int,
Ad varchar(20),
Soyad varchar(20),
Cinsiyet varchar(1) )
go
create trigger Listele
on OgrenciBilgileri
after insert
as
begin
select * from OgrenciBilgileri
end
insert into OgrenciBilgileri(OgrNo,Ad, Soyad, Cinsiyet) values (123456, 'Süleyman',
'SANCAR', 'E')
Örnek3: 2A Şubesine Erkek Öğrenci Eklemeyen Trigger
create table Ogrenciler(
OgrNo int,
Ad varchar(20),
Soyad varchar(20),
Sinif varchar(5),
Cinsiyet varchar(1) )
use OKULVT
go
create trigger cinsiyetkontrolu
on Ogrenciler
for insert
As
if(exists(Select * from inserted where Sinif = '2A' and cinsiyet = 'E'))
239
Begin
raiserror('2A sınıfına erkek öğrenci kaydedilemez',1,1)
rollback transaction
End
use OKULVT
insert into Ogrenciler(OgrNo,Ad, Soyad, Sinif, Cinsiyet) values (123456, 'Süleyman',
'SANCAR', '2A', 'E')
Trigger Güncelleme
ALTER TRIGGER trigger_adi
ON tablo_adiAFTER veya INSTEAD OF (INSERT , UPDATE , DELETE)
AS
Begin
--Sql ifadeler
End
Trigger enable/disable yapma Enable (Aktifleştirme)
--yöntem 1
disable trigger trigger_adı On tablo_adı
--yöntem 2
alter table tablo_adı disable trigger trigger_adı
Trigger enable/disable yapma Disable (Pasifleştirme)
--Yöntem 1
enable trigger trigger_adı On tablo_adı
--Yöntem 2
alter table tablo_adı enable trigger trigger_adı
Trigger Kaldırma
drop trigger trigger_adı
240
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
Kaynaklarda da belirtilen Anadolu Üniversitesi Yayınlarına ait “Konumsal
Veritabanı” kitabından konu daha detaylı olarak çalışılabilir
241
Uygulama Soruları
1. Konumsal veritabanında oluşturulan ilişki tutarlılık tablolarını açıklayınız.
2. Etiket konumsal nesne tablosunu tanımlayınız.
3. Ölçüm elemanları konumsal nesne tablosu hakkında neler öğrendiriniz?
Açıklayınız.
242
Bu Bölümde Ne Öğrendik Özeti
Bir çok tablodan bilgi çekme işlemlerini tek bir noktadan kontrol etmek için View
kullanıldığını, tablolar üzerinde insert, update ve delete işlemlerinin öncesinde veya sonrasında
işlem yapmayı sağlamak için trigger kullanıldığını ve veritabanları için dışarıdan parametre
alan tekli ya da çoklu değer döndürebilen, içerisinde SQL sorgularının gerçekleştirildiği
program birimlerine Stored Procedure denildiğini öğrendik.
243
Bölüm Soruları
1. Veritabanında bir işlem tarafından başka bir işlemin tetiklenmesi için aşağıdakilerden hangisi kullanılır?
A. Stored Procedure B. Inner Join C. Trigger D. View Create E. Alter Database
2. Hangi amaçlar için trigger (tetikleyici) kullanmaya gerek yoktur?
A. E-posta atmak gibi olayları otomatik olarak yapmak B. Karmaşık iş kurallarını gerçekleştirmek C. Nesnede meydana gelebilecek değişiklikleri takip ve engellemektir D. Standart hata mesajlarının dışında bir hata mesajı elde etmek E. Tabloya veri eklemek için
3. After Trigger için hangisi yanlıştır?
A. After tetikleyicileri, sadece tablolar üstünde tanımlanabilir B. After tetikleyicileri, kendiyle ilişkili işlem gerçekleşirken tetiklenir C. Veritabanındaki temel işlemler için (ekleme, silme ve güncelleme) After
tetikleyicileri tanımlanabilir D. Birden fazla tetikleyici,bir iş için tanımlanabildiği gibi, bir tetikleyici de birden
fazla iş için tanımlanabilir E. After tetikleyicileri, kendiyle ilişkili işlem gerçekleştikten hemen sonra
tetiklenir
4. Instead Of Trigger için hangisi yanlıştır? A. Instead Of tetikleyicileri hem tablolar için hem de görünümler (views) için
tanımlanabilirler B. Instead of tetikleyicileri, belirlenen işlem gerçekleşirken devreye girer C. Instead of tetikleyicileri işlemlerin arasına girebildiğinden kontrol amaçlı
kullanılabilirler D. After trigger’ı arasındaki en önemli fark, After trigger’ını devreye sokan olay
olmuş kabul edilerek akışı trigger’a bırakırken, Instead of trigger’ı istenen işlemi gerçekleştirmez
E. Instead of tetikleyicileri, belirlenen işlem gerçekleştikten sonra devreye girer
5. Aşağıdakilerden hangisi triggeri kaldırmak için (silmek için) kullanılması gereken komuttur?
A. alter trigger trigger_adı B. drop trigger trigger_adı C. delete trigger trigger_adı D. uninstall trigger trigger_adı E. remove trigger trigger_adı
244
6. Bir çok tablodan bilgi çekme işlemini tek bir noktadan kontrol etmemizi sağlama
işlemine ne ad verilir?
A. Stored Procedure
B. Trigger
C. View
D. Join
E. Default
7. Veritabanımız için dışarıdan parametre alan tekli ya da çoklu değer döndürebilen,
içerisinde SQL sorgularımızı gerçekleştirdiğimiz programlama birimlerine ne ad
verilir?
A. Stored Procedure
B. Trigger
C. View
D. Join
E. Default
8. Stored Procedure oluşturmayla ilgili aşağıdaki ifadelerden hangisi yanlıştır?
A. Türkçe karakter kullanılmaz
B. Boşluk kullanılmaz
C. Rakamla başlayamaz
D. Ayrılmış isim (select, insert) kullanılamaz
E. Stored Procedure ismi update olabilir
9. “Musteri_Silme” adındaki bir trigger’ı pasif etmek için aşağıdaki hangi komut
kullanılmalıdır?
A. ENABLE TRIGGER Musteri_Silme
B. DISABLE TRIGGER Musteri_Silme
C. DELETE TRIGGER Musteri_Silme
D. JOIN TRIGGER Musteri_Silme
E. VIEW TRIGGER Musteri_Silme
245
10. Aşağıdakilerden hangisi SELECT ifadesi ile tanımlanmış sanal tablolardır?
A. Trigger
B. Table
C. Defaults
D. View
E. Stored Procedure
Cevaplar
1)C 2)E 3)B 4)E 5)B 6)C 7)A 8)E 9)B 10)D
246
13.MSSQL SERVER'DA SORGU TASARIMI UYGULAMASI
247
Bu Bölümde Neler Öğreneceğiz?
13.1. Bu bölümde MSSQL Server konularını içeren veritabanı uygulaması
yapılacaktır.
13.2. Sorgu oluşturma
13.3. SQL Deyimlerini ve Fonksiyonlarının veritabanı üzerinde uygulaması
yapılacaktır.
248
Bölüm Hakkında İlgi Oluşturan Sorular
1. SQL Nedir? Açıklayınız.
2. Sorgu Niçin Oluşturulur? Açıklayınız.
3. Sorgu Türleri Nelerdir?Açıklayınız.
4. SQL Deyimleri Nelerdir? Açıklayınız.
5. SQL’de Kullanılan işaretler nelerdir? Açıklayınız.
6. SQL’de kullanılan komutlar nelerdir? Hangi ne işe yarar? Açıklayınız.
7. SQL’de kullanılan hazır fonksiyonlar nelerdir? Açıklayınız.
249
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
SQL’de Kullanılan İşaretler,
Deyimler, Fonksiyonlar
SQL’de Kullanılan
İşaretleri, Deyimleri,
Fonksiyonları Kavrar,
Access veritabanında bu
konuları sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Ders notları, Sunumlar,
Kaynaklar, Uygulama
250
Anahtar Kavramlar
SQL, CREATE, ALTER, DROP, INSERT INTO, DELETE, UPDATE, SELECT,
WHERE, ORDER BY, GROUP BY, HAVING, SELECT INTO, LIKE, BETWEEN, AVG,
COUNT, SUM, MAX, MIN
251
Giriş
SQL deyimleri veritabanları üzerinde çeşitli işlemleri yerine getirirler. Veritabanından
sorgulama yapmak için SELECT, ekleme yapmak için INSERT güncelleme yapmak için
UPDATE, silme yapmak için DELETE, yeni tablo oluşturmak için CREATE TABLE gibi
komutlara sahiptir. SQL içinde veriler üzerinde işlemler yapmak üzere hazır fonksiyonlar
bulunur.
Bu bölümde bundan önceki bölümlerde anlatılan konuların uygulaması yapılacaktır.
MSSQL Server veritabanı üzerinde SQL Deyimleri, İşaret ve Fonksiyonları, Fonksiyonları
kullanılarak sorgular oluşturulacaktır.
252
13.1. MSSQL Server Veritabanı İle SQL Uygulaması
Aşağıdaki 19 adımlık SQL uygulaması MSSQL Server veritabanı üzerinde yapılacaktır.
19 adımlık uygulamanın cevabı aynı tabloda yer almaktadır. Siz uygulamayı yaparken mümkün
olduğunca cevabına bakmadan kendiniz soruları yazmaya çalışınız. Sorgu yazmada
takıldığınızda cevabına bakmayı yeğleyiniz.
253
Soru Cevap
2) “okul_vt” adında bir veri tabanı oluşturunuz.
create database okul_vt
3) “Ogrenci” adında bir tablo oluşturarak aşağıdaki alanları ekleyiniz.
OgrenciNo,Ad,Soyad,
Cinsiyet,Yas,
Not: Veri tiplerini
kendiniz belirleyiniz.
use okul_vt create table Ogrenci (OgrenciNo varchar(10), Ad Varchar(25), Soyad Varchar(20), Cinsiyet Varchar(5), Yas tinyint, )
4) Öğrenciye ait yukarıdaki tüm alanlara veri girişini yapmak için “Ogrenci_Bilgi_Gir” adında Stored Procedure oluşturunuz.
use okul_vt go Create proc Ogrenci_Bilgi_Gir @OgrenciNo varchar(10), @Ad Varchar(25), @Soyad Varchar(20), @Cinsiyet Varchar(5), @Yas tinyint as
insert into Ogrenci values (@OgrenciNo,@Ad, @Soyad,
@Cinsiyet,@Yas)
5) Oluşturmuş olduğunuz Stored Procedure’ü kullanarak yandaki verileri giriniz.
exec Ogrenci_Bilgi_Gir '1014113040','Gökhan',
'TURAN','ERKEK',26
exec Ogrenci_Bilgi_Gir '1014113041','Selda',
'TANER','BAYAN',30
exec Ogrenci_Bilgi_Gir '1014113042','Serkan',
'TURAN','ERKEK',28
6) Soyadı “T” ile başlayan öğrencileri listeleyen “Ogrenci_Ara” adında Stored Procedure oluşturunuz.
create proc Ogrenci_Ara @Sart varchar(30) as
select * from Ogrenci where Soyad like @Sart + '%'
254
7) Ogrenci_Ara prosedürünü çalıştırarak listelenen bilgileri yan tarafa yazınız.
exec Ogrenci_Ara 'T'
8) Cinsiyeti Erkek olanları ayrı bir tabloda “Erkek_Ogrenciler” adında yeni bir tabloda saklayınız.
select * into Erkek_Ogrenciler from Ogrenci where
Cinsiyet='Erkek'
9) Soyadı “Taner” olan öğrencileri siliniz.
delete from ogrenci where soyad='Taner'
10) ”Ogrenci” tablosuna “Sehir” diye alan ekleyiniz.
alter table Ogrenci add Sehir varchar(15)
11) Öğrenci numarası 1014113041 olan öğrencinin geldiği şehri (Şehir alanı) Trabzon yapınız.
update Ogrenci set Sehir='Trabzon' where
OgrenciNo=1014113041
12) “Erkek_Ogrenciler” tablosundaki tüm verileri öğrenci numarasına göre azalan şeklinde sıralayınız.
select * from Erkek_Ogrenciler order by OgrenciNo
desc
13) “Erkek_Ogrenciler” tablosundaki “Yas” alanını siliniz.
alter table Erkek_Ogrenciler drop column Yas
Yandaki “Notlar”
tablosunu oluşturarak ister
arayüzü, ister komut satırını
kullanarak oluşturunuz.
14) “Erkek_Ogrenciler” tablosundaki Soyadı sütunundaki tüm verileri küçük harf şeklinde listeleyiniz.
select lower (Soyad) from Erkek_Ogrenciler
255
15) Notlar tablosundaki her bir öğrenci için vizenin %40’ını finalin %60’ını alarak toplamı, Ortalama sütununa yazdırınız.
update Notlar set Ortalama=Vize*0.4+Final*0.6 where
OgrenciNo=1014113041
update Notlar set Ortalama=Vize*0.4+Final*0.6 where
OgrenciNo=1014113042
update Notlar set Ortalama=Vize*0.4+Final*0.6 where
OgrenciNo=1014113043
update Notlar set Ortalama=Vize*0.4+Final*0.6 where
OgrenciNo=1014113044
16) Notlar tablosundaki ortalaması 80’den büyük 80’e en yakın 2 kişinin notunu listeleyiniz.
select top 2 * from Notlar2 where Ortalama>80 order
by (Ortalama) asc
17) Notlar tablosundaki ortalamaya göre başarı bakımından sınıfın %20’sine girenleri listeleyiniz.
select top 20 percent * from Notlar order by
(Ortalama) desc
18) Notlar tablosundaki ortalaması 40’tan büyük olanların son ikisini listeleyiniz.
select top 2 * from Notlar where Ortalama>40 order
by (OgrenciNo)asc
19) “Ogrenci” tablosunu siliniz.
drop table Ogrenci veya delete from Ogrenci
256
Uygulamalar
Konu ile ilgili kitaplar gözden geçirilmeli
Konu ile ilgili internet üzerinde makaleler okunmalı
MSSQL Server veritabanı üzerinde bu uygulama gerçekleştirilmeli
257
Uygulama Soruları
1. Bu derste yaptığımız uygulama gibi bir soru hazırlayarak sorgularla uygulama
yaparak sorunuzu cevaplandırınız, uygulama yapınız.
258
Bu Bölümde Ne Öğrendik Özeti
Bu bölümde önceki bölümleri kapsayan SQL sorgularını MSSQL Server veritabanı
üzerinde uygulama gerçekleştirmiş olduk.
259
Bölüm Soruları
1. Ogrenciler tablosundaki “Adres” alanını Büyük harflere dönüştüren sorgu aşağıdakilerden hangisidir?
A. select upper(Adres) from Ogrenciler B. select lower(Adres) from Ogrenciler C. select ltrim(Adres) from Ogrenciler D. select rtrim(Adres) from Ogrenciler E. select len(Adres) from Ogrenciler
2. Ogrenciler tablosundaki “Adres” alanındaki tüm bilgileri Büyük harflere dönüştürüp tekrar aynı alanda güncelleyen sorgu aşağıdakilerden hangisidir?
A. update Ogrenciler set Adres=lower(Adres) B. update Ogrenciler set Adres=upper(Adres) C. update Ogrenciler set Adres=rtrim(Adres) D. update Ogrenciler set Adres=ltrim(Adres) E. update Ogrenciler set Adres=len(Adres)
3. Ogrenciler tablosundaki Kayıt Yılı 2017 olan ve Bölüm alanındaki verilerin tümünü büyük harfe dönüştürüp güncelleyen sorgu aşağıdakilerden hangisidir?
A. update Ogrenciler set bolum=lower(bolum) where kayityili=2017 B. update Ogrenciler set bolum=upper(bolum) where kayityili=2007 C. update Ogrenciler set bolum=upper(bolum) where kayityili=2017 D. update Ogrenciler set bolum=upper(bolum) kayityili=2017 E. update Ogrenciler set bolum=lower(bolum) where kayityili=2007
4. Ogrenciler tablosundaki tüm verileri silmek için yazılması gereken sorgu aşağıdakilerden hangisidir?
A. delete from Ogrenciler where adi=’Ali’ B. delete from Ogrenciler where soyadi=’TAŞKENT’ C. update from Ogrenciler D. delete from Ogrenciler E. update * from Ogrenciler
5. Ogrenciler tablosunu silmek için yazılması gereken sorgu aşağıdakilerden hangisidir? A. drop column Ogrenciler B. uninstall table Ogrenciler C. update table Ogrenciler D. delete table Ogrenciler E. drop table Ogrenciler
6. Ogrenciler tablosunda soyadı “T” ile başlayanları sorgulamak için yazılması gereken sorgu aşağıdakilerden hangisidir?
A. select * from Ogrenciler where like 'T%'
260
B. select * from Ogrenciler Soyad like 'T%' C. select * from Ogrenciler where Soyad like '%T%' D. select * from Ogrenciler where Soyad like '% T ' E. select * from Ogrenciler where Soyad like 'T%'
7. Ogrenciler tablosunda Cinsiyeti “Erkek” olan öğrencileri “Erkek_Ogrenciler” diye ayrı tabloda tüm verilerini saklamak aşağıdaki sorgulardan hangisini yazmak gerekir?
A. select * into Erkek_Ogrenciler from Ogrenciler where Ad='Ekrem' B. select * into Erkek_Ogrenciler from Ogrenciler Cinsiyet='Erkek' C. select * into Erkek_Ogrenciler from Ogrenciler where Cinsiyet='Kız' D. select ad, soyad, bolum into Erkek_Ogrenciler from Ogrenciler where
Cinsiyet='Erkek' E. select * into Erkek_Ogrenciler from Ogrenciler where Cinsiyet='Erkek'
8. Ogrenciler tablosunda Cinsiyeti “Erkek” olan öğrencilerin tüm verilerini silmek için aşağıdaki sorgulardan hangisini yazmak gerekir?
A. delete from Ogrenciler B. delete from Ogrenciler Cinsiyet='Erkek' C. insert into Ogrenciler where Cinsiyet='Erkek' D. delete from Ogrenciler where Cinsiyet='Erkek' E. update from Ogrenciler where Cinsiyet='Erkek'
9. Aşağıdakilerden hangisi bir veritabanı yönetim sistemlerinden değildir? A. Oracle B. MY SQL C. Excel D. MS SQL E. Access
10. Aşağıdakilerden hangisi veritabanlarına girilen verilen saklandığı nesneye verilen addır?
A. Modül B. Tablo C. Sorgu D. Rapor E. Makro
Cevaplar
1)A 2)B 3)C 4)D 5)E 6)E 7)E 8)D 9)C 10)B
261
14. VERİTABANI TASARIMI VE YÖNETİMİ UYGULAMASI
262
Bu Bölümde Neler Öğreneceğiz?
14.1. Access Veritabanına Alan Ekleme ve Toplu Veri Girişi
14.2. Access Veritabanı Üzerinde Çeşitli Uygulamalar
14.3. MSSQL Server Veritabanı Üzerinde SQL Sorguları Uygulaması
263
Bölüm Hakkında İlgi Oluşturan Sorular
1. Access Veritabanına Alan Ekleme ve Toplu Veri Girişi işlemi Nasıl Yapılır? Açıklayınız.
2. Access’ten Access’e Veri Aktarma İşi Nasıl Yapılır? Açıklayınız.
3. Excel’de Bulunan Veriler Access Veritabanına Nasıl Aktarılır?
4. Access Veritabanı Nasıl Bölünür?
264
Bölümde Hedeflenen Kazanımlar ve Kazanım Yöntemleri
Konu Kazanım Kazanımın nasıl elde
edileceği veya geliştirileceği
Access Veritabanına Alan
Ekleme ve Toplu Veri Girişi
Access Veritabanı Alan
Eklemeyi ve Toplu Veri
Girişi Yapmayı Kavrar,
Uygulamasını Gerçekleştirir
Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
MSSQL Server Veritabanı
Üzerinde Veritabanı
Tasarımı ve SQL Sorgu
Uygulaması
SQL’de Kullanılan
İşaretleri, Deyimleri,
Fonksiyonları Kavrar,
Access veritabanında bu
konuları sorgu ile
kullanabilir, uygulamasını
gerçekleştirebilir.
Okuma- Anlama Ders
notları, Sunumlar, Kaynaklar
265
Anahtar Kavramlar
MSSQL Server, Alan Ekleme, Toplu Veri Girişi, SQL, Sorgu, Access
266
Giriş
Bu bölümde Access veritabanına alan ekleme ve toplu veri girişi, Access veritabanı
üzerinde; verileri dışa aktarma, Excel’deki verileri içe aktarma, verileri metin dosyasına
dönüştürme, metin dosyasındaki verileri Access’e aktarma, Access’ten Access’e veri aktarma,
veritabanını bölme, veritabanında var olan alanın veri türünü değiştirme işlemleri yapılacaktır.
Ayrıca MSSQL Server Veritabanı Üzerinde Veritabanı Tasarımı ve SQL Sorgu Uygulaması
gerçekleştirerek SQL konularını tekrar edilecektir.
267
14.1. MSSQL Server Üzerinde Veritabanı Tasarımı ve SQL Sorgu
Uygulaması
Soru Cevap
1) “kutuphane_vt” adında bir veri tabanı oluşturunuz.
create database kutuphane_vt
2) “KitapBilgileri” adında bir tablo oluşturarak aşağıdaki alanları ekleyiniz.
KitapID, KitapAdi,
YayinYili, ISBN, Yazar,
KitapTuru
Not: Veri tiplerini kendiniz
belirleyiniz.
use kutuphane_vt create table KitapBilgileri ( KitapID int, KitapAdi varchar (50), YayinYili int, ISBN bigint, Yazar varchar (50), KitapTuru varchar(50) )
3) Kitaba ait yukarıdaki tüm alanlara veri girişini yapmak için “KitapEkle” adında Stored Procedure oluşturunuz.
use kutuphane_vt go create proc KitapEkle @KitapID int, @KitapAdi varchar(50), @YayinYili int, @ISBN bigint, @Yazar varchar(50), @KitapTuru varchar(50) as insert into KitapBilgileri values
(@KitapID, @KitapAdi, @YayinYili, @ISBN, @Yazar, @KitapTuru)
4) Oluşturmuş olduğunuz Stored Procedure’ü kullanarak aşağıdaki verileri giriniz.
exec KitapEkle 1, 'Beni Ödülle Cezalandırma', 2016, 9786050937022, 'Özgür BOLAT', 'Eğitim'
exec KitapEkle 2, 'Efsaneler ve Gerçekler', 2017, 9786050946253, 'Temel AKSOY', 'İş'
exec KitapEkle 3, 'Türk Zaferleri', 2017, 9786050947359, 'Reşad Ekrem KOÇU', 'Tarih'
268
5) Yayın Yılına göre arama sonucunu gösteren “YilaGoreAra” adında Stored Procedure oluşturunuz.
create proc YilaGoreAra @YayinYili int as select * from KitapBilgileri where
YayinYili=@YayinYili
6) YilaGoreAra prosedürünü 2017 parametresini göndererek çalıştırınız, listelenen bilgileri yan tarafa yazınız.
exec YilaGoreAra 2017
7) Yayın Yılı “2017” olanları ayrı bir tabloda “SonKitaplar” adında yeni bir tabloda saklayınız.
select * into SonKitaplar from KitapBilgileri where YayinYili=2017
8) ”KitapBilgileri” tablosuna “YayinEvi” diye alan ekleyiniz.
alter table KitapBilgileri add YayinEvi varchar(15)
9) Şuan için tabloda 3 adet kitap bilgisi yer almaktadır. Bu 3 kitabından “Doğan Kitap” yayın evine ait olduğunu düşünerek bu 3 kitabında yayın evini tek satır komutla güncelleyiniz.
update KitapBilgileri set YayinEvi='Doğan Kitap'
10) Yayın Yılı 2017 olan kitapların Kitap Türünü “Bilinmeyen Tür” olarak güncelleyiniz.
update KitapBilgileri set KitapTuru='Bilinmeyen Tür' where YayinYili=2017
11) “KitapBilgileri” tablosundaki “KitapAdi” sütunundaki tüm verileri büyük harf şeklinde listeleyiniz.
select upper(KitapAdi) From KitapBilgileri
12) “KitapBilgileri” tablosundaki “YayinEvi” sütunundaki verileri
select substring (YayinEvi, 2,3) from KitapBilgileri
269
2. Karakterden başlayarak 3 karakteri listeleyiniz.
13) “KitapBilgileri” tablosundaki Kitap Adında “Türk” kelimesi geçen kitapları listeleyiniz, seçiniz.
select * from KitapBilgileri where KitapAdi Like '%Türk%'
14) “KitapBilgileri” tablosuna göre Yayın Yılı 2016 sonrasındaki kitapları listeleyiniz, seçiniz.
select * from KitapBilgileri where YayinYili>2016
15) “KitapBilgileri” tablosundaki verileri siliniz. (Tablonun kendisi ve alanlar silinmeyecek.)
delete from KitapBilgileri
16) “KitapBilgileri” tablosunu siliniz. (Tablonun kendisi ve alanlar da silinecek.)
drop table KitapBilgileri
270
14.2. Access Veritabanına Alan Ekleme ve Toplu Veri Girişi
Bu uygulama Access veritabanına alan ekleyip Excel ortamında verileri bu alana
aktarma işlemini gerçekleştireceğiz.
1. Access veritabanı programında ilgili dosya açılır.
Şekil 116: Access Veritabanında Açılan Dosyanın İçeriği
2. Açılan dosyanın içeriğine bakıldığında OblectID, PlakaNo, İlAdı ve 2007 yılından
2016 yılına kadar alanlar var ve bu alanlarda illere ait veriler işlenmiş. TUİK
tarafından 2017 yılına ait illere göre nüfus yayınlanmış. Birde bunları bu tablomuza
ekleyeceğiz.
3. Öncelikli olarak Tablomuza sağ tıklayarak Tasarım Görünümü menüsüne
tıklayalım.
271
Şekil 117: Tablonun Tasarım Görünümü Açma
4. Tablonun Tasarım Görünümü açıldıktan sonra son satıra gelinerek Alan Adı
kısmına Nufus2017 yazılır, Veri Türü olarakta Sayı belirlenir. Sayı veri türünün
özelliklerinden Alan Boyutu Çift olarak ayarlanır.
Şekil 118: Alan Ekleme ve Özelliklerini Belirleme
272
5. TUİK’in İllere Göre Nüfus Bilgilerinin olduğu Excel dosyası TUİK sayfasından
indirilir. İndirilen Excel dosyası açılır.
Şekil 119: TUİK İllere Göre Nüfus Bilgileri
6. Access veritabanındaki Alan ekleme işlemi yapıldıktan sonra yapılan değişiklikler
kaydedilir. Tablo normal görünümde açılır. Exceldeki 2017 yılına ait illerin
nüfusları seçilerek kopyalanır. Access veritabanındaki Nufus2017 alanı seçilere
yapıştırma işlemi gerçekleştirilir.
Şekil 120: Excel'den Access'e Veri Aktarma
Böylelikle Access veritabanındaki tabloya bir alan ekleyerek toplu veri aktarımı gerçekleştirmiş
olduk.
273
14.3. Access Veritabanında Çeşitli Uygulamalar
Bu bölümde Canlı ders sırasında Access veritabanı üzerinde; verileri dışa aktarma, Excel’deki
verileri içe aktarma, verileri metin dosyasına dönüştürme, metin dosyasındaki verileri Access’e
aktarma, Access’ten Access’e veri aktarma, veritabanını bölme, veritabanında var olan alanın
veri türünü değiştirme gibi uygulamalar yapılacaktır. Canlı ders sırasında bu uygulamalar
yapılarak Access veritabanı üzerinde en çok yapılan işlemlerin öğrenilmesi sağlanacaktır.
274
Uygulamalar
Bu bölümde yapılan uygulamaların pekişmesi için sizin de bu uygulamaları
bilgisayarınızda yapmanız önerilir.
275
Uygulama Soruları
1. Access Veritabanına Alan Ekleme ve Toplu Veri Girişi işlemi Nasıl Yapılır?
Bilgisayarınızda bu uygulamayı gerçekleştiriniz.
2. MSSQL Server Veritabanı Üzerinde Veritabanı Tasarımı ve SQL Sorgu
Uygulamasını Kendi Bilgisayarınızda Gerçekleştiriniz.
276
Bu Bölümde Ne Öğrendik Özeti
Access veritabanına alan ekleme ve toplu veri girişini, Access veritabanı üzerinde;
verileri dışa aktarma, Excel’deki verileri içe aktarma, verileri metin dosyasına dönüştürme,
metin dosyasındaki verileri Access’e aktarma, Access’ten Access’e veri aktarma, veritabanını
bölme, veritabanında var olan alanın veri türünü değiştirme işlemlerini öğrendik. Ayrıca
MSSQL Server Veritabanı Üzerinde Veritabanı Tasarımı ve SQL Sorgu Uygulamasını
gerçekleştirerek SQL konularını tekrar etmiş olduk.
277
Bölüm Soruları
1. Ogrenciler tablosundaki Numarası “1001” olan kişinin Şehir alanını “Burdur” diye güncellemek için aşağıdaki sorgulardan hangisi yazılmalıdır?
A. update Ogrenciler set Sehir='Burdur' where OgrenciNo=101 B. update Ogrenciler set Sehir='Burdur' where OgrenciNo=1001 C. upgrade Ogrenciler set Sehir='Burdur' where OgrenciNo=1001 D. update Ogrenciler set Sehir='Burdur' OgrenciNo=1001 E. update Ogrenciler set Sehir='Burdur' where 1001
2. Ogrenciler tablosundaki tüm verileri öğrenci numarasına göre azalan şeklinde sıralayan sorgu aşağıdakilerden hangisidir?
A. select * from Ogrenciler order by OgrenciNo desc B. select * from Ogrenciler order by OgrenciNo asc C. select * from Ogrenciler order by ad desc D. select ad, soyad from Ogrenciler order by OgrenciNo desc E. select * from Ogrenciler desc
3. İller tablosundaki “iladi” alanındaki tüm bilgileri Küçük harflere dönüştürüp tekrar aynı alanda güncelleyen sorgu aşağıdakilerden hangisidir?
A. update iller set iladi=lcase(iladi) B. update iller set iladi=ucase(iladi) C. update iller set iladi=rtrim(iladi) D. update iller set iladi=ltrim(iladi) E. update iller set iladi=len(iladi)
4. SQL ne anlama gelmektedir? A. Yapılandırılmış soru dili B. Yapılandırılmış sorgu dili C. Yapılandırılmış programlama dili D. Yapılandırılmış web dili E. Yapılandırılmış mobil dil
5. Aşağıdakilerden hangisi veritabanında bir tabloya yeni bir kayıt eklemek için kullanılan SQL deyimidir?
A. ADD RECORD B. ADD NEW C. INSERT INTO D. INSERT NEW E. INSERT RECORD
278
6. Aşağıdakilerden hangisi Kişiler tablosundaki Adı “Mehmet” olan kişilerin tüm bilgilerini seçmek için kullanılan sorgudur?
A. select all from kisiler where ad=’Mehmet’ B. select [all] from kisiler where ad=’Mehmet’ C. select * from kisiler where ad<>’Mehmet’ D. select * from kisiler where ad=’Mehmet’ E. select all from kisiler where ad<>’Mehmet’
7. Aşağıdakilerden hangisi bir alanda farklı değerleri (tekrar etmeyen değerler) seçmek
için kullanılan SQL sorgusudur? A. SELECT UNIQUE B. SELECT DISTINCT C. SELECT DIFFERENT D. SELECT GROUP BY E. SELECT HAVING BY
8. Aşağıdakilerden hangisi adı “Ahmet” olanın soyadını “Kahraman” olarak güncelleyen
sorgudur? A. update kisiler set soyad = 'Kahraman' into ad = 'Ahmet' B. modify kisiler set soyad = 'Kahraman' where ad = 'Ahmet' C. modify kisiler set soyad = 'Kahraman' into ad = 'Ahmet' D. update kisiler set soyad = 'Ahmet' where ad = ‘Kahraman' E. update kisiler set soyad = 'Kahraman' where ad = 'Ahmet'
9. NufusBilgileri tablosundaki bilgilerin tamamı silmek için aşağıdaki sorgulardan hangisi kullanılır?
A. Drop table NufusBilgileri B. Delete from NufusBilgileri C. Drop from NufusBilgileri D. Delete table NufusBilgileri E. Uninstall table NufusBilgileri
10. NufusBilgileri tablosuna “PlakaKodu” diye bir alan eklemek istesek aşağıdaki sorgulardan hangisini kullanmak gerekir?
A. alter table NufusBilgileri add PlakaKodu int B. alter table NufusBilgileri insert into PlakaKodu int C. alter table NufusBilgileri insert PlakaKodu int D. insert table NufusBilgileri add PlakaKodu int E. insert table NufusBilgileri into PlakaKodu int
Cevaplar
1)B 2)A 3)A 4)B 5)C 6)D 7)B 8)E 9)B 10)A
279
KAYNAKÇA
• Veri Tabanı Yönetim Sistemleri I, Turgut ÖZSEVEN, Murathan Yayınevi,
2010, Trabzon.
• Veri Tabanı Yönetim Sistemleri, Yrd. Doç. Dr. Zehra ALAKIÇ BURMA,
Seçkin Yayıncılık, 2009, Ankara.
• SQL Server 2008 R2, Selçuk ÖZDEMİR, Kodlab Yayıncılık, 2010,İstanbul.
• Mesleki ve Teknik Eğitim Programlar ve Öğretim Materyalleri, MEGEP
Modülleri.
• http://portal.netcad.com.tr/pages/viewpage.action?pageId=106727060
• http://www.dijitalders.com/icerik/13/2623/veri_tabaninda_iliski_turleri.html
• www.acikders.org.tr
• http://webogrenci.net/veritabaninin-faydalari-ve-avantajlari/
• http://btegitimleri.itu.edu.tr/itacademy/?egitim-bilgileri/veritabani-yoneticiligi
• http://kod5.org/iliskisel-veritabani-yonetim-sistemleri-rdbms/
• www.office.com
• http://yazilimgunlukleri.blogspot.com.tr/2012/02/veri-tipi-nedir-temel-veri-
tipleri.html
• https://banasqlanlat.wordpress.com/category/i-sql-deyimleri/
• http://myo.bartin.edu.tr/akgul/dersler/veritabani/02-SQL_VeriTipleri.pdf
• http://www.dahiweb.com/microsoft-sql-server-nedir-ne-ise-yarar/
• https://www.yazilimbilisim.net/veritabani/mssql/sql-serverda-trigger-
kullanimi/