mirsis bilgi teknolojileri ltd. şti. microsoft sql server

advertisement
MİRSİS BİLGİ TEKNOLOJİLERİ LTD. ŞTİ.
MİCROSOFT SQL SERVER
VERİTABANI VE SORGULARI
AÇIKLAMA
Merhabalar,
Günümüzde bilgisayar kullanımının hızla yaygınlaşması ve bilgilerin bilgisayarlarda daha rahat
saklanması ile “veri tabanı yazılımları” na olan ilgi daha çok artırmıştır.
Veri tabanı yazılımları, veri tabanının bilgiyi verimli bir şekilde düzenleyebilmesini, gerektiği zaman
bilgiye ulaşılabilmesini sağlayan birden çok kullanıcıya bilgiye ayni anda erişme olanağı tanıyan verilerin
düzenli bir şekilde saklanmasına imkan sağlayan yazılımlardır.
Bu modülümüzde Veritabanı Ve Sorgu Çeşitleri bulunmaktadır. Örnekler AdventureWorks2014
Kütüphanesini kullanarak. Microsoft SQL Server Programında Yapılmıştır.
İÇİNDEKİLER
1.VERİ TABANI İHTİYAÇ ANALİZİ........................................................................................................................................ 4
1.1. Veri Tabanı Tanımı ................................................................................................................................................. 4
1.2. Veri Tabanı Tabloları .............................................................................................................................................. 4
1.3. İlişkisel Veri Tabanı ................................................................................................................................................. 4
1.3.2. Kısıtlamalar...................................................................................................................................................... 5
1.4.Veri Tipleri ............................................................................................................................................................... 5
1.4.1.Kesin Sayısal Veri Tipleri (Exact numerics) ....................................................................................................... 5
1.4.2.Yaklaşık Sayısal Veri Tipleri (Approximate Numerics) ...................................................................................... 6
1.4.3.Tarih ve Zaman Veri Tipleri (Date and Time) ................................................................................................... 6
1.4.4.Karakter Veri Tipleri (Character Strings) .......................................................................................................... 7
1.4.5.Unicode Karakter Veri Tipleri.......................................................................................................................... 7
1.4.6.Binary Veri Tipleri (Binary Strings) ................................................................................................................... 8
1.4.7.Diğer Veri Tipleri (Other Data Types) ............................................................................................................... 8
2.SORGULAR VE ÇEŞİTLERİ ................................................................................................................................................ 8
2.1. SQL Dilinin Yapısı ................................................................................................................................................. 9
2.1.1. Sorgu İle Tablo Oluşturma ............................................................................................................................. 9
2.1.2. Tablo Silme ...................................................................................................................................................... 9
2.1.3. Sütun Ekleme .................................................................................................................................................. 9
2.1.4. Tablo Güncelleme......................................................................................................................................... 10
2.1.5. SELECT Deyiminin Yapısı................................................................................................................................ 10
2.2. Verileri Gruplayarak Analiz Etme........................................................................................................................ 11
2.2.1. Grup Fonksiyonları ....................................................................................................................................... 11
2.2.2. Birden Fazla Sütuna Göre Gruplama ............................................................................................................. 12
2.2.3. Grup Koşullarının Kullanımı ......................................................................................................................... 12
3. İLİŞKİLİ TABLOLAR........................................................................................................................................................ 13
3.1.1. Kartezyen Çarpımı ......................................................................................................................................... 13
3.1.2. Eşiti Olan Birleştirme ..................................................................................................................................... 13
3.1.3. Eşiti Olmayan Birleştirme .............................................................................................................................. 14
GİRİŞ
1.VERİ TABANI İHTİYAÇ ANALİZİ
Veri tabanı tasarlamaya başlamadan önce ihtiyaç analizinin doğru yapılması gerekmektedir.
Veri tabanı ihtiyaç analizi yapılırken hazırlanacak olan sistemin neye hizmet edeceği, veri tabanını ne iş yapacağı ve
hangi ihtiyaçları karşılayacağına, veri tabanının hangi verileri depolayacağı, veri tabanını oluşturan tabloların neler
olacağı ve ne tür verileri saklayacağı v.b. gibi sorulara cevap vermek gerekmektedir.
Tüm bunları kağıt üzerinde tasarladıktan sonra fiziksel tasarıma geçmek çalışmanızın daha sistemli yürümesi
açısından avantajınıza olacaktır.
1.1. Veri Tabanı Tanımı
Veri tabanı tanımından önce “Veri nedir?” sorusuna cevap vermemiz gerekmektedir.
Veri; Türk Dil Kurumunun güncel sözlüğünde; “ Olgu, kavram veya komutların, iletişim,yorum ve işlem için elverişli
biçimli gösterimi” bilişim terimi olarak tanımlanır.
Bu tanımından yola çıkarsak,”bu apartman çok yüksek”,”bugün hava soğuk”, gibi ifadeler birer veri değilken,
“apartmanın 10 katlı” ,”bugün hava 2°C” ifadelerindeki 10 kat sayısı 2 hava sıcaklığı olarak birer veridir.
Bir kişiye veya ürüne ait detaylı verilerin bir düzen çerçevesinde saklandığı ortamlar “Veri tabanı” olarak adlandırılır.
Veri tabanı ile verilerinizi kaydedebilir, silebilir, güncelleyebilir, yeni veriler ekleyip mevcut verileriniz üzerinde
sorgulamalar yapabilirsiniz.
Günümüzde Veri tabanları yaşamımızın birçok alanında karşımıza çıkmaktadır.
Örneğin internet üzerinden yapmış olduğunuz bir alışverişte satıcı firmanın veri tabanına erişim sağlamış
oluyorsunuz. İnternet üzerinden notlarınızı veya birtakım bilgileri öğrenmek için girmiş olduğunuz sistem Milli Eğitim
Bakanlığının veri tabanında size ait bilgilerin önceden kaydedilmiş olduğu sisteme, bir mağazada herhangi bir ürünün
olup olmadığını öğrenmeye çalıştığınızda o mağazanın veritabanına erişmiş oluyorsunuz
1.2. Veri Tabanı Tabloları
Tablolar veri tabanının ana nesneleridir. Bir veri tabanında verilerin saklanmış olduğu nesneler tablo olarak
adlandırılır. Bir veri tabanı en az bir tablodan oluşur. Veri tabanını oluşturan tablolar ise “data field” adı verilen veri
alanlarından oluşmaktadır. Tabloları oluşturan sütunlar alanları, satırlar ise kayıtları göstermektedir.
NO ADI DOĞUM_TARİHİ DOĞUM_YERİ
1.3. İlişkisel Veri Tabanı
İlişkisel veri tabanı, birbirinden farkı tablolara yerleştirilmiş olan verilerin birbirleri ile belirli alanlara göre
ilişkilendirilerek düzenlenen veri tabanlarıdır. İlişkisel veri tabanı günümüzde en yaygın olarak kullanılan veri tabanı
türüdür.
İlişkisel veri tabanlarında veriler tablolarda birbirleri ile ilişkili bir şekilde saklanmaktadır. İlişkisel veri tabanları birden
fazla tablodan oluşabilir. Tablolar ise satır ve sütunlardan oluşur. Tablolarda satır ve sütunların kesiştiği noktaya ise
“hücre” adı verilir.
Tablo içerisindeki satırlar tablonun kayıtlarını oluşturur. Anahtar alan ise tablonun tanımlayıcısı niteliğindedir.
1.3.1. Tabloların Özellikleri
İlişkisel veritabanında yer alacak olan tabloların aşağıdaki özelliklere sahip olması gerekmektedir;




Tablolar satır ve sütunlardan oluşur.
Her sütunun alacağı isim birbirinden farklı olmalıdır.5
Her satır birbirinden farklı olmalıdır yani birbiri ile tamamen ayni olan iki kayıt kullanılmamalıdır.
Satırların ve sütunların sırasının nasıl olacağı önemli değildir.
Hücrelerdeki veriler atomik olmalıdır.
1.3.2. Kısıtlamalar
Bir veri tabanında depolanan bilgiler arasında bir bütünlük olması yani verilerin birbirleri ile uyumlu olması
gerekmektedir. Böylelikle veriler arasında kopukluk olmayacak, geçerli bir veritabanı oluşturulmuş olacaktır.
Bütünlük kısıtlamaları, veri tabanında depolanacak verileri kısıtlayan koşullar olarak adlandırılır.
Bir veritabanına kısıtlamalar uygulanarak sadece geçerli verilerin depolanmasını sağlayabiliriz.
1.3.2.1. Anahtar Kısıtlamaları
Bütünlük kısıtlamalarının sağlanmasında anahtar kısıtlamaları önemli bir role sahiptir.
Herhangi bir tablodaki her bir satır için kullanılan anahtarın tek olması gerekmektedir.
Aksi takdirde kayıtlar arasında tutarsızlıklar meydana gelebilmektedir.
Birincil anahtar(primary key) veya yabancı anahtar(foreign key) türlerinden birisi seçilerek kısıtlamaların
gerçekleştirilmesi sağlanmaktadır.
Birincil anahtar(Primary key) kısıtlamaları:
Bir tablonun birincil anahtarı, tabloda depoladığınız her satırı benzersiz şekilde tanımlayan bir veya daha çok alandan
oluşur. Genellikle, birincil anahtar olarak işlev gören bir kimlik numarası, seri numarası, okul no veya kod gibi
benzersiz bir tanımlayıcı vardır.
Günlük hayatımızda da, TC Kimlik Numaramız, illerin plaka (06-Ankara,34-İstanbul, 35-İzmir gibi), telefon kod
numaraları(312-Ankara,242-Antalya gibi) ve posta kod numaraları bağlı bulundukları ülkelerde benzersiz
numaralardır birincil anahtarları başlarındaki sayısal ifadelerdir.
Birincil anahtarlar hiçbir zaman NULL(boş) veya birbiri ile ayni olan değerleri içeremez.
Yabancı anahtar(Foreign key) kısıtlamaları:
Tablo içerisindeki verilerin birbirleri ile iletişim kurabilmeleri amacıyla kullanılan anahtarlardır.
Birincil anahtarlar hiçbir zaman NULL(boş) veya birbiri ile ayni olan değerleri içeremezken, yabancı anahtarlar
birbirleri ile aynı olan değerler içerebilirler. Bir tabloda birden fazla yabancı anahtar kullanılabilir.
Kısacası yabancı anahtar, bir tabloya girilebilecek verileri başka bir tablonun herhangi bir alanında yer alabilecek
veriler ile sınırlandırmak ve ilişkilendirmek için kullanılır. Yabancı anahtara, başka bir tablonun birincil anahtarıdır da
denilebilir.
1.3.2.2. Veri Kısıtlamaları
Tablo tasarlarken kullanılan verilerin tutarlılığını sağlamak ve ne tür değerlere sahip olabileceğini belirlemek
için de kısıtlamalar getirilebilir.
Veri kısıtlamaları sırasında kullanılan bazı kısıtlamalar Not Null, Default, Unique ve Check’tir.
Not null kısıtlaması; Veri girişi yapılacak bir tablodaki sütunun değer alıp (NULL) almaması (NOT NULL)
gerektiğini belirlemek için kullanılan kısıtlamadır.
Default kısıtlaması; Veri girişi sırasında bir alanın alabileceği varsayılan bir değer atamak için kullanılır.
Unique kısıtlaması; Tablodaki bir alana girilen verinin tekrarsız olmasını sağlamak için kullanılır.
Check Kısıtlaması; Kontrol kısıtlayıcı olarak da adlandırılır. Veri girişlerinin belirtilen kriterlere göre
yapılmasını sağlar. Örneğin kişinin T.C. Kimlik numarası girilirken 11 haneden fazla değer girilmesi
engellenebilir veya bir yolculuk sırasında 0-6 yaş grubu yolculardan ücret alınmayacağının belirtildiği bir
durumda yolcu yaşı hanesine girilecek olan yaş rakamının 0 ile 6 dışında bir değer alamayacağı şeklinde bir
kısıtlama getirilebilir.
1.4.Veri Tipleri
1.4.1.Kesin Sayısal Veri Tipleri (Exact numerics)
int: 4 bayt yer kaplar. -2.147.483.648 ile 2.147.483.647 arası tam sayıları tutar. C#’ta da int tipine karşılık
gelir.
tinyint: 1 bayt yer kaplar. 0 ile 255 arası tam sayıları tutar. C#’ta byte tipine karşılık gelir.
bit: 1 bayt yer kaplar. 1 ve 0 değerlerini alır. C#’ta bool’a karşılık gelir. true/false değerlerini bu tipte
saklayabiliriz.
smallint: 2 bayt yer kaplar. -32.768 ile 32.767 arası tam sayıları tutar. C#’ta short tipine karşılık gelir.
bigint: 8 bayt yer kaplar. -9.223.372.036.854.775.808 ile 9.223.372.036.854.775.807 arası tam sayıları
tutar. C#’ta long tipine karşılık gelir.
smallmoney: 4 bayt yer kaplar. -214.748,3648 ile 214.748,3647 arası ondalık sayıları tutar. Virgülden sonra
4 basamak alır. Parasal verileri smallmoney veri tipinde saklayabiliriz. C#’ta direkt karşılığı yoktur, decimal
kullanılır.
money: 8 bayt yer kaplar.-922.337.203.685.477,5808 ile 922.337.203.685.477,5807 arası ondalık sayıları
tutar. Virgülden sonra 4 basamak alır. Parasal verileri money veri tipinde saklayabiliriz. C#’ta direkt karşılığı
yoktur, decimal kullanılır.
decimal ve numeric: kapladığı alan kullanılan basamak sayısına göre değişir. Virgülden önce ve sonra toplam
basamak sayısı 1-9 arası 5 bayt; 10-19 arası 9 bayt; 20-28 arası 13 bayt; 29-38 arası 17 bayt yer kaplar. numeric ile
decimal birebir aynı veri tipidir. C#’ta decimal tipine karşılık gelirler.
1.4.2.Yaklaşık Sayısal Veri Tipleri (Approximate Numerics)
float: kullanılmak istenen boyuta göre ortalama değer alır. float(n) şeklinde kullanılır. Mesela virgülden
sonra 20 bitlik bir alan kullanılmasını istiyoruz. O zaman float(20) olarak yazılır ve verdiğimiz bu boyuta göre
kaydetmek istediğimiz sayı yuvarlanır. Kesin değer değil de yaklaşık değer kaydedilmiş olur. float kısmı 1 ile
53 arasında olmalıdır. C#’ta double tipine karşılık gelir.
real: float(24) ile aynı özelliktedir. 4 bayt yer kaplar. – 3.40E+38 ile -1.18E-38, 0 ve 1.18E-38 ile 3.40E+38
arası ondalık sayıları tutar. C#’ta Single tipine karşılık gelir.
1.4.3.Tarih ve Zaman Veri Tipleri (Date and Time)
Date: YYYY-MM-DD şeklinde tarihi tutar. 3 bayt yer kaplar. 0001-01-01 ile 9999-12-31 arası tarih değerlerini
saklar.
datetime: YYYY-MM-DD hh:mm:ss[.mmm] şeklinde tarihi tutar (2011-01-21 12:35:29.123 gibi). 8 bayt yer
kaplar. 1753-01-01 00:00:00.000 ile 9999-12-31 23:59:59.999 arası tarih değerlerini saklar.
smalldatetime: YYYY-MM-DD hh:mm:ss şeklinde tarih tutar. 4 bayt yer kaplar. 1900-01-01 00:00:00 ile
2079-06-06 23:59:59 arası tarih değerlerini saklar.
time: sadece saati hh:mm:ss[.nnnnnnn] şeklinde tutar. 00:00:00.0000000 ile 23:59:59.9999999 arası değer
alır. Time(n) şeklinde n değerini belirleyebiliyoruz. time değeri 0 ile 2 arasında ise 3 bayt; 3 veya 4 ise 4
bayt; 5 ile 7 arasında ise 5 bayt yer kaplar. Sadece time olarak kullanılırsak varsayılan time değeri 7′dir.
datetimeoffset: kullanımı ve tarih aralığı datetime2 ile aynıdır. Ülkelere göre değişen zaman farkını da
tutmamıza olanak sağlar. YYYY-MM-DD hh:mm:ss[. nnnnnnn] [{+-}hh:mm] şeklinde tarihi tutar
(22.01.2012 02:07:23.1234567 +03:00). Saat farkı -14:00 ile +14:00 arasında değer alır. Yaptığımız
uygulamada farklı ülkelerin tarih ve saat bilgilerini tutuyorsak bu veri tipini
kullanabiliriz. datetimeoffset(n) şeklinde kullanılır. N değeri 0 ile 2 arasında ise 8 bayt; 3 veya 4 ise 9 bayt;
5 ile 7 arasında ise 10 bayt yer kaplar. Sadece datetimeoffset olarak kullanılırsak varsayılan n değeri 7′dir.
1.4.4.Karakter Veri Tipleri (Character Strings)
char: sabit uzunlukta karakter dizilerini tutar. char(n) şeklinde kullanılır. n karakter sayısıdır ve 1 ile 8000
arasında değer alır. Belirlediğimiz n değerinden daha kısa uzunlukta olan veriler boşluk ile belirlediğimiz bu
n değerine tamamlanır. Ve bu n değerine göre (n x 1 bayt) yer kaplarlar.
varchar: sabit uzunlukta karakter dizilerini tutar. varchar(n) şeklinde kullanılır. n karakter sayısıdır ve 1 ile
8000 arasında değer alır. Belirlediğimiz n değeri alabileceği maksimum karakter sayısıdır. Karakter sayısı
daha kısa veri girersek char gibi boşlukla tamamlanmaz. Kaç karakter veri girilirse boyutu ona göre değişir.
((kaydedilenVerininKarakterSayisi x 1 bayt) + 2 bayt) olarak yer kaplar. varchar(MAX) şeklinde kullanırsak
maksimum 8000 karakter değil de maksimum 2,147,483,647 karakter veri girilebilir.
text: varchar(max) ile aynı özelliktedir. maksimum 2,147,483,647 karakter veri girilebilir. microsoft bu veri
tipini gelecek versiyonlarda kaldıracağı için kullanılması önerilmez. yerinevarchar(MAX) kullanabilirsiniz.
Not: Eğer oluşturmuş olduğumuz veritabanın dil seçeneği (collation) türkçe (Turkish_Cl_AS gibi) ise unicode
olmayan bu veri tiplerinde (char,varchar) de türkçe karakter saklayabiliriz. Fakat dil seçeneği farklıysa
türkçe karakter gönderdiğimizde seçtiğimiz dil seçeneğine göre türkçe karakter kaydedilmeyebilir. (ı’lar i;
ş’ler s’ye çevrilebilir). Böyle durumlarda ya veritabanı özelliklerinden dil seçeneğini (collation)’ı türkçeye
çevirmeliyiz ya da unicode karakter veri tiplerini(nchar,nvarchar) kullanmalıyız.
1.4.5.Unicode Karakter Veri Tipleri
nchar: char ile kullanımı aynıdır. char’dan farklı olarak unicode karakterleri de saklayabilir. nchar(n)
şeklinde kullanılır ve n değeri 1 ile 4000 arasındadır. char’ın iki katı kadar (n x 2 bayt) yer kaplar.
nvarchar: varchar ile kullanımı aynıdır. varchar’dan farklı olarak unicode karakterleri de saklayabilir.
nvarchar(n) şeklinde kullanılır ve n değeri 1 ile 4000 arasındadır. varchar’ın iki katı
kadar ((kaydedilenVerininKarakterSayisi x 2 bayt) + 2 bayt) olarak yer kaplar.
ntext: nvarchar(max) ile aynı özelliktedir. Maksimum 1,073,741,823 karakter veri girilebilir. microsoft bu
veri tipini gelecek versiyonlarda kaldıracağı için kullanılması önerilmez.
yerinenvarchar(MAX) kullanabilirsiniz.
Not: Eğer veritabanımızdaki kayıtlarda birden fazla dil kullanılacaksa veya veritabanının dil seçeneğinden
(collation) farklı bir dil ile kayıt yapılacaksa unicode karakter veri tipleri kullanılmalıdır.
1.4.6.Binary Veri Tipleri (Binary Strings)
binary: dosyaları(binary data) saklamak için kulanılır. binary(n) şeklinde n değeri 1 ile 8000 arasında değer
alır. n bayt kadar yer kaplar.
varbinary: dosyaları(binary data) saklamak için kullanılır. binary’den farklı olarak boyutu kaydedilen
dosyanın boyutuna göre değişir. varbinary(n) şeklinde n değeri 1 ile 8000 arasında değer alır.
varbinary(MAX) olarak kullanıldığında maksimum 2,147,483,647 bayt (2 GB) büyüklüğünde dosya
kaydedilebilir.
image: dosyaları(binary data) saklamak için kullanılır. maksimum 2,147,483,647 bayt (2 GB) büyüklüğünde
dosya saklayabilir. microsoft, sql server’ın gelecek versiyonlarında image veri tipini kaldırmayı düşündüğü
için yerine varbinary(MAX) kullanabilirsiniz.
1.4.7.Diğer Veri Tipleri (Other Data Types)
uniqueidentifier: 6F9619FF-8B86-D011-B42D-00C04FC964FF gibi bir GUID tipindeki verileri tutar. C#’taki
karşılığı GUid’tir. Guid, harf ve sayılardan oluşan eşsiz bir datadır. İki Guid’in birbiri ile eşit olmayacağı
garantidir.
timestamp: girilen kaydın (satırın) versiyon numarası gibidir (0x00000000000007D3). her satırda değişir ve
satır güncellendiğinde de değişir. Tabloda sadece bir alan timestamp olabilir. Tarih ve saat tutmak için
kullanılmaz.
xml: 111 şeklinde xml dataları saklar ve tablo ve satırlarda sorgu yapmadan, query() metoduyla,
kaydettiğimiz xml’in içindeki datalara ulaşabiliriz.
sql_variant: farklı veri tiplerindeki değişkenleri kaydedebileceğimiz bir alan sağlar. maksimum boyutu 8016
bayt’tır. varchar(MAX), nvarchar(MAX), varbinary(MAX), text, ntext, image, timestamp, sql_variant,
hierarchyid, geography, geometry ve kullanıcı tarafından oluşturulan veri tipleri haricinde diğer bütün veri
tiplerini saklayabilir.
2.SORGULAR VE ÇEŞİTLERİ
Tablolardaki kayıtlarda silme, ekleme, sıralama, seçme, değiştirme gibi işlemlere ihtiyaç duyulacaksa sorgular
hazırlanması 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 veri tabanı 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.
2.1. SQL Dilinin Yapısı
SQL (Structured Query Language), veri tabanı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.
2.1.1. Sorgu İle Tablo Oluşturma
Sorgu kullanarak tablo oluşturmak için CREATE TABLE ifadesi kullanılır.
SQL kodu yazılarak tablo oluşturma aşağıdaki şekilde yapılmaktadır.
Kullanımı:
CREATE TABLE tablo_adı
(
Sütun1 veri tipi,
Sütun2 veri tipi,
.
Sütun veri tipi
);
ÖRNEK:
CREATE TABLE Sales.SalesReason(
SalesReasonID int IDENTITY(1,1) NOT NULL,
Name dbo.Name NOT NULL,
ReasonType dbo.Name NOT NULL,
ModifiedDate datetime NOT NULL CONSTRAINT DF_SalesReason_ModifiedDate DEFAULT (getdate()),
2.1.2. Tablo Silme
Daha önceden oluşturmuş olduğunuz bir tabloya ihtiyaç duymayıp veri tabanından silmek
isteyebilirsiniz. Silme işlemini gerçekleştirmek için DROP deyimi kullanılmaktadır.
Kullanımı:
DROP TABLE tablo;
Örnek:
DROP TABLE Person.Address
GO
Yeni bir sorgu oluşturup yukarıdaki komut satırını yazıp çalıştırdığınız zaman veri tabanı programı önceden
oluşturmuş olduğunuz PERSONEL isimli tabloyu silecektir.
NOT: Tabloyu silmeden önce tabloyu kapatmanız gerekmektedir.
2.1.3. Sütun Ekleme
Bir tablo oluşturduktan sonra, isteğe göre oluşturulmuş olan tabloya yeni sütunlar ekleyebilirsiniz. Tabloya yeni bir
sütun eklemek için ADD COLUMN deyimi kullanılır.
Kullanımı:
ALTER TABLE tablo_adı
ADD sütun_adı, veri_türü
Örnek:
ALTER TABLE Person.Address ADD Sayi INT(5)
GO
2.1.4. Tablo Güncelleme
Belirtilen tablodaki alanların değerlerini belirtilen ölçütlere göre değiştirmek için bir güncelleme sorgusu
oluşturmak gerekir. Bunun için UPDATE deyimi kullanılır.
Kullanımı:
UPDATE tablo
SET sütun_adı=yenideğer
WHERE ölçütler;
Örnek:
UPDATE Person.Password
SET BusinessEntityID = BusinessID int
GO
2.1.5. SELECT Deyiminin Yapısı
Veri tabanında verilere erişebilmek için SELECT deyimi kullanılmaktadır. Select deyimi ile bir tabloda
bulunan belli bir sütun, birden fazla sütun veya tüm sütunları çekebilirsiniz.
Bunun yanı sıra sorgulama işlemlerini gerçekleştirmek için de SELECT deyiminden yararlanılır.
Kullanımı:
SELECT [sütun_listesi]
FROM [tablo_listesi]
Örnek:
SELECT PersonType FROM Person.Person
Bu satırda AdventureWorks2014.Person.Person tablosunda [PersonType] alanları seçiliyor.
Örnek:
SELECT * FROM AdventureWorks2014.Person. Person
Bu satır ile kullanici tablosunda bulunan tüm alanlar seçilmiş olur
2.1.5.1. Verilerin Sınırlandırılması
Veri tabanında veriyi alma işlemi sırasında satırlara birtakım sınırlamalar getirilerek tablonun tüm
satırları yerine istenildiği kadarını elde etmek mümkündür. Tabloda belirli kısımları seçme işlemini
gerçekleştirmek için WHERE sözcüğü kullanılmaktadır.
Kullanımı:
SELECT [sütunlar]
FROM [tablo]
WHERE [koşul]
Örnek:
SELECT * FROM AdventureWorks2014.HumanResources.Department WHERE Name= Sales
GO
Örnek:
Urunler tablosundaki fiyatı 200 den büyük olanları ekran çıktısını veren sorgu.
SELECT * FROM urunler WHERE fiyat > 200;
BETWENN AND Örnek:
Urunler tablosunda fiyatı 100 ile 500 olan sorguyu yazınız.
SELECT * FROM urunler WHERE fiyat BETWENN 100 AND 500;
LİKE “%” Örnek:
AdventureWorks2014.Person.ContactType tablosunda Name a ile başlayan sorguyu yazınız.
SELECT * FROM AdventureWorks2014.Person.ContactType WHERE Name LIKE "a%"
GO
2.1.5.2. Sıralama İşlemleri
Tabloların satırlarının herhangi bir sütuna göre sıralanmasının istendiği durumlarda SELECT deyimi ORDER
BY ile birlikte kullanılır.
Kullanımı:
SELECT alan_adı
FROM tablo_adı
ORDER BY sıranılacak;
ASC Örnek:
ASC sözcüğü sıralama yaparken (A’dan – Z’ye ve 0’dan – 9’a) sıralamak istediğimizde ASC sözcüğü
kullanılır.
SELECT AddressID FROM AdventureWorks2014.Person.Address ORDER BY AddressID ASC
GO
Yukarıda yazmış olduğumuz sorguda FROM AdventureWorks2014.Person.Address isimli tablodaki adı
alanındaki isimleri 0-9 a doğru sıralanır.
DESC Örnek:
DESC sözcüğü ise sıralamayı azan şekilde yapmamıza yardımcı olur. (Z’dan – A’ye ve 9’dan – 0’a)
SELECT AddressID FROM AdventureWorks2014.Person.Address ORDER BY AddressID DESC
GO
Yukarıda yazmış olduğumuz sorguda PERSONEL isimli tablodaki adı alanındaki tabloyu 9-0 a doğru sıralanır.
2.2. Verileri Gruplayarak Analiz Etme
Şu ana kadar incelemiş olduğumuz deyimler söz konusu tablonun tüm satırlarına uygulanmaktaydı. Bazı
durumlarda bazı işlemlerin satırlar yerine gruplara uygulanması gerekmektedir. Veriler gruplara ayrılıp
analiz edilir ve bu tür gruplama işlemleri için de grup fonksiyonları kullanılır.
2.2.1. Grup Fonksiyonları
Tek satır fonksiyonları tablonun bir satırına uygulanıp buna karşılık gelen bir sonuç satırı elde ediliyordu.
Bir grup satıra bir fonksiyonun uygulanmasının söz konusu olduğu durumlara; "çoklu satır" veya "grup
fonksiyonları" adı verilir. Grup fonksiyonları tablonun tüm satırlarına uygulanabilmektedir.
AVG() Örnek:
Bu fonksiyon, herhangi bir sütunun içerdiği sayısal değerlerin aritmetik ortalamasını hesaplamak amacıyla
kullanılır. Fonksiyonun uygulandığı sütunun veri türü sayısal olmalıdır.
SELECT AVG(AverageRate)AS AvrageRate FROM AdventureWorks2014.Sales.CurrencyRate
GO
SUM() Örnek:
Sütunların içerdiği sayısal değerleri toplamak amacıyla kullanılan fonksiyondur.
SELECT SUM(AverageRate)AS AvrageRate FROM AdventureWorks2014.Sales.CurrencyRate
GO
MIN() ve MAX Örnek:
Tablodaki değerler arasında en büyük olanı bulmak için MAX(), en küçük olanını bulmak içinse MIN() ve
fonksiyonları kullanılır.
Örnek MAX(): SELECT MAX(AverageRate)AS AvrageRate FROM AdventureWorks2014.Sales.CurrencyRate
GO
Örnek MIN(): SELECT
MIN(AverageRate)AS AvrageRate FROM AdventureWorks2014.Sales.CurrencyRate
GO
COUNT() Örnek:
Bir tablodaki kayıtların sayılması amacıyla kullanılan fonksiyondur. COUNT(*) fonksiyonu, NULL değerleri
de içeren tüm kayıtların sayılmasını sağlar. WHERE ile birlikte kullanılırsa, bu koşula uygun tüm kayıtları
sayar. COUNT(sütun) biçiminde kullanılırsa, söz konusu sütunda NULL değerler içermeyen tüm kayıtların
sayılmasına neden olur.
Örnek SELECT COUNT(AverageRate)AS AvrageRate FROM AdventureWorks2014.Sales.CurrencyRate
GO
2.2.2. Birden Fazla Sütuna Göre Gruplama
GROUP BY kullanarak belirtilen alan listesindeki benzer değerlere sahip kayıtları tek bir kayıt olarak
birleştirebilirsiniz. Yani birden fazla sütun için de gruplama yapabilirsiniz.
Kullanımı:
SELECT alan_adı
FROM tablo
WHERE Koşullar
[GROUP BY grupalan_adı]
Örnek:
SELECT Name,COUNT(*) AS NameGroup FROM AdventureWorks2014.Production.ScrapReason GROUP BY
Name
GO
2.2.3. Grup Koşullarının Kullanımı
Grup işlemlerinin uygulanması sırasında birtakım sınırlamalar gerekebilir. Grup koşulları belirlenirken
HAVING sözcüğü kullanılır. HAVING sözcüğü gruplama yaptıktan sonra kullanılır. Gruplandırmak
istenilmeyen satırları dışarıda tutmak için WHERE, gruplandırılan kayıtlara filtre uygulamak için ise HAVING
kullanılır.
Group By ifadesi Where ifadesinden sonra, Having ifadesinden önce kullanılır. Order
By ifadesi ise en son kullanılır. Kayıtlar GROUP BY ile gruplandırılır ve HAVING ile de hangi kayıtların
görüntüleneceği gösterilir.
Örnek:
SELECT Name,COUNT(*) AS NameGroup FROM AdventureWorks2014.Production.ScrapReason GROUP BY
Name HAVING ModifiedDate=2008-04-30
GO
3. İLİŞKİLİ TABLOLAR
İlişkisel veri tabanları, birbirleri ile mantıksal ilişkiler içinde olan tablolardan oluşmaktadır. Tabloları ortak
olarak sahip oldukları alanlarda birleştirmek için ilişkiler kullanılır. İlişki ise bir sorguda birleştirmeyle
gösterilmektedir.
Bu bölümde birbirleri ile ilişkileri olan tablolar için kullanılabilecek birleştirme türlerinin neler olduğunu, bu
türlerin hangi durumlarda kullanıldığını ve nasıl birleştirme oluşturulacağını öğreneceğiz.
3.1. Tabloların Birleştirilmesi
Birden fazla tablodan veri almak gerektiği durumlarda tablolar arasında ilişki kurulması gerekmektedir. Bu
işleme Join (birleştirme) adı verilir. Join işlemi birden fazla tabloyu birbirine bağlayıp bu tablolar üzerinde
işlem yapabilmemizi sağlamaktadır.
Birleştirme işlemi yapabilmek için tabloların aynı değerleri içeren sütunlarının kullanılması gerekir.
Tablo birleştirme işlemi yapılırken birleştirmek istediğiniz duruma göre, Kartezyen birleşim, eşiti olan
birleştirme veya eşiti olmayan birleştirme türlerinden uygun olanını kullanabilirsiniz.
3.1.1. Kartezyen Çarpımı
İki tablo arasında birleştirme koşulunun tanımlanmadığı durumlarda Kartezyen çarpımından söz edilir. Soldaki
tablonun her kaydı için, sağdaki tablodan bütün kayıtları çeker.
Birleştirme koşulunun geçersiz olduğu ve birinci tablodaki tüm satırların ikinci tablodaki tüm satırlarla birleşmediği
durumlarda da Kartezyen çarpım elde edilir.
Kullanımı:
SELECT sütun1, sütun2, sütun3,…, sütun
FROM tablo1, tablo2, tablo3,…, tablo
3.1.2. Eşiti Olan Birleştirme
İç birleştirme olarak da adlandırılan birleştirme türüdür. İç birleştirme bir sorguya, birleştirilen tabloların
birinde yer alan satırların, birleştirilen alanlardaki verileri temel alarak, diğer tablodaki satırlara karşılık
geldiğini bildirir. İç birleştirme içeren bir sorgu çalıştırıldığında, sorgu işlemlerine yalnızca, birleştirilen
tabloların her ikisinde de bulunan ortak değere sahip olan satırlar eklenir. Birleştirmede yer alan her iki
tablodan sadece, birleştirme alanında eşleşen satırlar döndürülmek istenildiği zaman iç birleştirme
kullanılır.
Eşiti olan birleştirme yapılırken INNER JOIN deyimi kullanılır.
Kullanımı:
FROM tablo1 INNER JOIN tablo2 ON tablo1.sütun1 karşılaştırma tablo2.sütun2
Birinci tablodaki tüm kayıtları çekip, bu kayıtlar ile eşleşen ikinci tablodaki kayıtlar listelenir.
Örnek:
SELECT * FROM AdventureWorks2014.Person.Address a,AdventureWorks2014.Person.AddressType t WHERE
a.ModifiedDate=t.ModifiedDate
GO
VEYA
SELECT * FROM AdventureWorks2014.Person.Address a INNER JOIN AdventureWorks2014.Person.AddressType t
ON a.ModifiedDate=t.ModifiedDate
GO
3.1.3. Eşiti Olmayan Birleştirme
Eşiti olan birleştirme sırasında bir tablodaki bir sütunun içerdiği değerler diğer tablonun ilgili sütunu ile
eşleştirilip sadece eşleşen değerler birleştiriliyordu. Eşleşmeyen satırlar ise birleştirilemiyordu.
Eşleşmeyen satırların da birleştirilip sonuca dâhil edilmesi istenilen durumlarda “Eşiti Olmayan Birleştirme”
kullanılmaktadır.
Eşiti olmayan birleştirmeler (dış birleştirmeler), eşleşmeyen kayıtların hangi tabloda olduğuna bakarak sol
dış birleştirme veya sağ dış birleştirme olmak üzere iki şekilde olabilmektedir.
Kullanımı:
SELECT *
FROM tablo1 [ LEFT | RIGHT ] JOIN tablo2
ON tablo1.sütun1 karşılaştırma tablo2.sütun2
Buradaki tablo1 ve tablo2 kayıtların birleştirileceği tabloların adını, sütun1 ve sütun2 birleştirilen sütunların
adlarını, karşılaştırma ise ("=," "<," ">," "<=," ">=" veya "<>.") gibi işleçleri göstermektedir.
Sol dış birleştirme oluşturmak için LEFT JOIN kullanılır. Soldaki tablodan tüm kayıtlar alınır, sağdaki tabloda
eşleşen kayıtlar yazılır ve eşleşmeyen kayıtlar için NULL değer döndürülür.
Sağ dış birleştirme oluşturmak için RIGHT JOIN kullanılır. Sağ dış birleşimler, ilk tablonun (soldaki tablo)
kayıtlarında eşleşen değer olmasa bile, iki tablodan ikincisinin (sağdaki tablo) tüm kayıtlarını içerir.
Download