You are on page 1of 49

1 - SQL NEDİR?.................................................................................................................................

3
Veri Tabanı (Database)...................................................................................................................3
Tablolar (Tables).............................................................................................................................3
Kolonlar ve Veri Türleri (Columns and Datatypes)........................................................................4
Satırlar (Rows)................................................................................................................................4
Tekil Anahtarlar (Primary Keys).....................................................................................................4
A. DDL (Data Definition Language) Deyimleri.............................................................................5
CREATE Deyimi........................................................................................................................5
ALTER Deyimi...........................................................................................................................7
DROP Deyimi.............................................................................................................................7
B. DML (Data Manipulation Language) Deyimleri........................................................................9
2 - Veriye Ulaşmak.............................................................................................................................9
2.1 - SELECT İfadesi......................................................................................................................9
3 - Verilerin Sıralanması...................................................................................................................10
3.1 - Sıralama İşlemi.....................................................................................................................10
3.2 - Çoklu Kolonlara Göre Sıralama............................................................................................11
3.3 - Kolon Pozisyonuna Göre Sıralama.......................................................................................11
3.4 - Sıralama Yönünün Belirtilmesi.............................................................................................12
4 - Veri Filtreleme - Arama...............................................................................................................12
4.1 - WHERE Deyiminin Kullanımı.............................................................................................12
4.2 - WHERE Deyiminde Kullanılacak Operatörler.....................................................................13
4.2.1 Tek Bir Değere Göre Arama............................................................................................13
4.2.2 Eşitsizlik Durumları.........................................................................................................13
4.2.3 Belirli Bir Değer Aralığındaki Verilerin Araştırılması....................................................14
4.2.4 Değer Girilmemiş Kayıtların Bulunması.........................................................................14
4.2.5. İşlem Öncelik Sırası........................................................................................................15
4.3 Veriler Üzerinde Ekleme, Silme Ve Değiştirme İşlemleri....................................................16
4.3.1 INSERT İfadesinin Kullanımı..........................................................................................16
4.3.2 UPDATE İfadesinin Kullanımı........................................................................................17
4.3.3 DELETE İfadesinin Kullanımı.........................................................................................18
5 - DETAYLI VERİ ARAMA TEKNİKLERİ.................................................................................19
5.1 - WHERE Deyimi ve Kullanımı.............................................................................................19
5.1.1 AND Operatörü................................................................................................................19
5.1.2 OR Operatörü...................................................................................................................20
5.1.3 Sorgularda İşlem Sırası....................................................................................................20
5.2 - IN Operatörü.........................................................................................................................21
5.3 - NOT Operatörü.....................................................................................................................21
6 - Wildcard ile Arama – Filtreleme.................................................................................................21
6.1 - LIKE Operatörü....................................................................................................................21
6.1.1 Yüzde (%) (percent) Wildcard Karakteri.........................................................................22
6.1.2 Alttire (_) (underscore) Wildcard Karakteri.....................................................................23
6.1.3 Köşeli Parantez ( [ ] )(brackets) Wildcard Karakteri.......................................................23
7 - TABLONUN ALANLARI İLE ÇALIŞMAK.............................................................................25
7.1 Tabloların Alanları ile Neden Çalışılır?..................................................................................25
7.2 Alanların Birleştirilmesi..........................................................................................................25
7.2.1 Kolon İsimlerinde Takma Ad Kullanımı (Alias).............................................................26
7.2.2 Matematiksel İfadelerin Hesaplanması............................................................................26
8 - Veriler Üzerinde Değişiklik Yapan Fonksiyonlar.......................................................................27
8.1 - Fonksiyonlar Üzerine ...........................................................................................................27
8.2 – Fonksiyon Kullanımı............................................................................................................27

8.2.1 Metinler Üzerinde İşlem Yapan Fonksiyonlar.................................................................27
8.2.2 Tarih ve Zaman Üzerinde İşlem Yapan Fonksiyonlar.....................................................31
8.2.3 Nümerik İşlem Yapan Fonksiyonlar................................................................................36
9 - Veriler Üzerinden Özet Bilgi Alınması.......................................................................................36
9.1 Toplam Fonksiyonlarının Kullanımı.......................................................................................36
9.1.1 AVG() Fonksiyonu...........................................................................................................37
9.1.2 COUNT() Fonksiyonu......................................................................................................37
9.1.3 MAX() Fonksiyonu..........................................................................................................38
9.1.4 MIN() Fonksiyonu............................................................................................................38
9.1.5 SUM() Fonksiyonu...........................................................................................................38
9.2 - Farklı Değerler Üzerinde Toplam İşlemleri..........................................................................39
9.3 - Toplam Fonksiyonlarının Beraber Kullanımı.......................................................................40
10 - Verilerin Gruplandırılması.........................................................................................................40
10.1 - Veri Gruplama Nedir?.........................................................................................................40
10.2 - Grup Oluşturmak................................................................................................................40
10.3 - Grup Üzerinde Filtreleme Yapmak.....................................................................................41
10.4 SELECT İfadesinin İşlem Sırası...........................................................................................42
11 - Alt Sorgular................................................................................................................................42
11.1 Alt Sorgu Nedir?...................................................................................................................42
11.2 Alt Sorgular ile Filtreleme.....................................................................................................43
11.3 Alt Sorguları Hesaplanmış Alanlar Olarak Kullanmak.........................................................45
12 – Tabloları Birleştirme.................................................................................................................46
12.1 Tablolar Arası Veri Birleştirme Nedir?.................................................................................46
12.2 Tablolar Arası Veri Nasıl Birleştirilir (Join)?.......................................................................46
12.3 WHERE Yan Cümlesinin Önemi..........................................................................................47
12.4 INNER JOIN.........................................................................................................................47
12.5 Çoklu Tabloları JOIN ile Birleştirmek..................................................................................48

1 - SQL NEDİR?
Veri tabanı ile bilgi alış verişi yapılmasını sağlayan bir dildir. Ancak SQL yalnız başına bir
dil olarak algılanmamalıdır. Çünkü SQL, programlama dillerinin içine gömülen kodlar sayesinde
çalışır. Kullanıldığı işletim sisteminin API (Application Programming Interface) fonksiyonlarını
çalıştırır, ancak programcının bundan haberi olmaz.
Programlama dillerinin İngilizcesidir. Birkaç İngilizce kelimeden oluşur. Veri tabanı
sorgusu yapan dile aslında T-SQL (Transact SQL) denir. SQL denince program değil,
programlama dillerinde kullanılan sorgulama ara dili akla gelmelidir. Veri tabanlarını
görüntülemeye ve yönetmeye yarayan programlara ise “Veri tabanı yönetim sistemi (Database
Management System)” denir.
Piyasada pek çok veri tabanı yönetim sistemi vardır. Bunlardan en çok bilinenleri
• Microsoft SQL Server
• Oracle
• My-Sql
• Microsoft Access
• Informix
Çeşitli programlama dilleri gibi, SQL de standart hale getirilmiştir. ANSI tarafından
standart hale getirilmiş ANSI SQL, her bir veri tabanı yönetim sistemi tarafından desteklenmesi
gereken bir standarttır.

Veri Tabanı (Database)
Günümüzde veri tabanı (database), neredeyse her alanda kullanılmaktadır. Adres
defterinizden bir adresi araştırmanız bile bir veri tabanı sorgusudur. Arama motorları sayesinde
ulaştığınız bilgiler de yine veri tabanları ile haberleşir.
Bilgi: Veri tabanı, verileri derli toplu olarak saklamaya yarayan dosya ve dosyalar kümesidir.
Bilgi: Yaygın olarak veri tabanı yazılımlarına hatalı bir kullanışla “veritabanı” adı kullanılır. Ancak o
programlar veri tabanı değil, veri tabanı yönetim sistemleridir (Database Management System) .
Veri tabanları bu yazılımlar sayesinde de kullanılabilir.

Tablolar (Tables)
Veri tabanında bilgilerin saklandığı alt birimlere tablo denir. Bir veri tabanında pek çok
bilgi saklanabilir. Ancak bunların belirli bir şekilde ayrılması gerekir. Örneğin bir okulun tüm
öğrencilerinin ve tüm notlarının tek bir tablo içerisinde tutulması karmaşaya yol açacaktır. Bu
durumda veriler tablolara ayrılır. Ve tablolar birbirleriyle ilişkilendirilir.
Bir veri tabanında aynı isimde iki tablo bulunamaz. Tabi ki farklı veri tabanlarında aynı
isimde tablolar bulunabilir.
Bilgi: Veri tabanına ait tabloların özelliklerini ve yerleşim şekillerini içeren bilgiye şema (schema)
denir.

Kolonlar ve Veri Türleri (Columns and Datatypes)
Veri tabanının tablolardan oluştuğunu belirtmiştik. Tablolar da kolonlardan oluşur.
Kolonlar, her birinde aynı türden veri saklayan birimlerdir. Örneğin öğrenci bilgilerini saklayan bir
tabloda, bir kolon öğrenci numarasını, bir kolon adını ve diğer bir kolon da soyadını tutar. Yani her
bir özelleşmiş bilgi, bir kolonda saklanır.
Verileri ayrı ayrı kolonlarda tutmak da çok önemlidir. Örneğin aynı isime sahip öğrencilere
ulaşmak istendiğinde, eğer ad ve soyad bilgisi aynı kolonda tutulmuşsa işlem karmaşıklaşacaktır.
Ancak ad ve soyad ayrı ayrı kolonlarda tutulmuşsa, işlem oldukça kolay olacaktır.
Her bir kolonun, saklayacağı bilginin özelliğini belirten veri türü bulunmaktadır. Bu veri
türü sayesinde o kolonda saklanacak bilgi sınırlanır. Örneğin sayısal ifadelerin yer alacağı bir
kolona karakter girilmesinin yasaklanması gibi.
Bilgi: Veri tabanlarınsa saklanacak bilgilerin türlerini belirten veri türleri, farklı veri tabanı yönetim
sistemlerinde farklı isimlere sahip olabilirler. İşte bu farklılık, veri tabanı uyumu konusunda
uyumsuzluk oluşturan en temel konudur. Aslında temel veri türleri aynı isimle kullanılsa da, özel veri
türleri oldukça farklıdır.

Satırlar (Rows)
Bir tablodaki bilgiler satırlarda saklanır. Her bir kayıt kendi sırasında tutulur. Yine Excel
tablolarını gözünüzde canlandırırsanız, dikey kolonlar tabloların kolonlarına, yatay satırlar ise
tabloların satırlarına karşılık geldiğini görürsünüz.
Bilgi: Bir satır, bir kayıt (record) demektir.

Tekil Anahtarlar (Primary Keys)
Her bir tabloda, tablonun özelliğini taşıyan özel bir veya birden fazla kolon
bulundurmalıdır. Örneğin öğrenci tablosunda, öğrenci numarasını tutan kolon bu tablodaki tekil
bilgiyi tutar. O zaman tasarım sırasında öğrenci numarasını tutan kolon, tekil anahtar olarak
belirtilmelidir.
Tekil anahtar kullanarak aynı kolonda farklı satırlarda aynı bilginin girilmesi engellenmiş
olur. Ve bu kolona veri girilmemesi gibi bir durum söz konusu olamaz. (NULL değer kabul
edilmez.) Tekil anahtar olarak belirlenen kolonların değiştirlmemesi gerekir.

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. Bu komutlar işlevlerine göre şu şekilde kategorilendirilir:

DDL (Data Definition Language): Veri tanımlama deyimleri.
CREATE, ALTER VE DROP gibi nesne oluşturma, yapısını değiştirme ve silme gibi işlem
ifadelerinden oluşurlar.
• DML (Data Manipulation Language) : Veri düzenleme dili.

DENY.685. Veritabanındaki kullanıcı haklarını düzenlemek için kullanılan deyimlerdir.203.5807) arasındaki parasal verileri tutabilir.40 x 1038 ile 3. . INSERT. Parasal veri türleri : a) money : -263 (-922. Tablo Yaratmak: Veritabanı üzerinde bir tablo yaratmak için CREATE deyimi kullanılır. En yaygın kullanılan DDL deyimleri şunlardır: CREATE Deyimi CREATE deyimi tablo ve view gibi bir veritabanı nesnesi yaratmayı sağlar.40 x 1038 arası sayıları tutabilir.SELECT. DDL (Data Definition Language) Deyimleri DDL deyimleri veritabanı üzerinde nesne yaratmak için kullanılırlar. REVOKE gibi. Tinyint : 0 ile 255 arasındaki tamsayıları tutabilir.5808) ile 263-1 (+922.337.477. (uzunluk ve duyarlılık miktarı değiştirilebilir) b) numeric : fonksiyonel olarak decimal’e denktir. Smallint : -215 ile 215-1 arasındaki tamsayıları tutabilir. Yapısı: CREATE <tablo adı> T-SQL’de tablo oluştururken kullanılabilecek olan veri türlerinden en çok kullanılan bazıları aşağıda açıklanmıştır : Tamsayı veri türleri : a) b) c) d) e) bigint : -263 ile 263-1 sınırları arasında tamsayıları tutabilir int : -231 ile 231-1 arasındaki tamsayıları tutabilir. • DCL (Data Control Language): Veri kontrol dili. Bit : 0 veya 1 tamsayı değerlerini tutabilir Ondalık sayısal veri türleri : a) decimal : -1038+1 ile 1038-1 arasındaki ondalıklı sayıları tutabilir.79 x 10308 ile 1.79 x 10308 arası sayıları tutabilir d) Real : -3. Örneğin GRANT. güncelleştirme ve silme gibi işlem ifadelerinden oluşurlar. DELETE gibi veriler üzerinde seçme.685. UPDATE. ekleme.477.203. c) Float : -1.337. A.

1. Departman integer ) Tablo oluşturma esnasında hesaplanmış alan da oluşturabilirsiniz. numeric gibi sözcükler tablo alanlarındaki temsil edilecek verinin türünü belirtir.y). ulke char(2) NULL.12.6. integer. Unikod karakter veri türleri : a) char : Sabit uzunluklu ve 4000 karaktere kadar unicode karakter verilerini tutabilir. .b) smallmoney : -214.2079 aralığında tarih ve saat verilerini tutabilir.3648 ile +214. c) text : Değişken uzunluklu ve 230-1 karaktere kadar unicode karakter verilerini tutabilir. TIMESTAMP gibi alan veri türleri vardır. LOGICAL. TIME. c) text : Değişken uzunluklu ve 231-1 karaktere kadar unicode olmayan karakter verilerini tutabilir. ili varchar(20) NULL.748.748. Soyadi Varchar(20) not null. SQL'de SMALLINT. DATETIME. Tarih/saat veri türleri : a) datetime : 1. Örnek: CREATE TABLE Musteri ( mus_id char(4) NOT NULL mus_ad varchar(40) NULL. b) smalldatetime : 1.1753 ile 31. b) varchar : Değişken uzunluklu ve 8000 karaktere kadar unicode olmayan karakter verilerini tutabilir.1. DECIMAL(x. Unikod olmayan (Non-unikod) karakter veri türleri : a) char : Sabit uzunluklu ve 8000 karaktere kadar unicode olmayan karakter verilerini tutabilir. b) varchar : Değişken uzunluklu ve 4000 karaktere kadar unicode karakter verilerini tutabilir. Örnek: CREATE TABLE personel ( Sskno Integer.9999 aralığında tarih ve saat verilerini tutabilir.3647 arasındaki parasal verileri tutabilir.y). FLOAT(x. VARCHAR. Adi Varchar(20) not null. varchar. adres varchar(30) NULL ) NOT: Char.1900 ile 6.

Örnek: CREATE TABLE mytable ( low int. boy tinyint default 120 DROP Deyimi . ALTER TABLE mytable add myavg AS (low + high)/2. ALTER TABLE Ornek ADD dogumtarihi datetime NULL Aşağıdaki deyimde mytable tablosuna low ve high alanlarının toplanmasıyla elde edilen bir toplamları alanı eklenmiştir. ALTER TABLE ornek add tel varchar(11) default ('1234567'). myavg AS (low + high)/2 ) ALTER Deyimi Daha önce yaratılmış nesnenin değiştirilmesini sağlar. bir tabloya tek işlemle birden fazla alan eklenmesi işleminin yazılışının bir diğer yolu da aşağıdaki örnekte gösterilmiştir. ALTER TABLE mytable add toplamlari as (low+high) Aşağıdaki deyimde mytable tablosuna tek bir işlemle myavg ve hesaplanan alanları eklenmiştir. Örnek: Aşağıdaki deyimde Musteri tablosuna 7 karakter bilgi girilebilen. hesaplanan as (low+high) Yukarıda gösterilen. boş geçilemeyen ve varsayılan değer olarak 1234567 değeri atanan “tel” sütunu eklenmiştir. ALTER TABLE Musteri ADD tel varchar(7) NOT NULL Default ‘1234567’ Aşağıdaki deyimde Ornek tablosuna datetime türünde bir dogumtarihi sütunu eklenmiştir. high int. Örneği bir tablonun tasarımını değiştirmek gibi.

Örnek: ALTER TABLE Musteri DROP COLUMN tel Yukarıdaki deyimde musteri tablosunun alanlarından tel adlı bir alan silinmiştir.Bir nesnesin silinmesini sağlar. COLUMN hesaplanan ALTER TABLE ornek DROP COLUMN tel. önceki örneklerde oluşturulmuş ornek tablosunda bulunmakta olan “varchar(10) ve null” özelliğindeki ad alanın özelliği “varchar(25) ve not null” olarak değiştirilmiştir.boy Yukarıdaki deyimlerde belirtilen tablolardan birden fazla alan silme işlemi gerçekleştirilmiştir. Örnek : ALTER TABLE ornek ALTER COLUMN ad varchar(25) not null Yukarıdaki deyimde. Örnek: CREATE TABLE ornek2 ( Ad varchar(10). ALTER deyimi ile beraber kullanılarak nesneler içerisinden bazı yapısal parçaların silinmesi için de kullanılabilir. . Örnek: DROP TABLE MUSTERI Müşteri tablosunun verilerini ve tabloyu siler. DROP deyimi. ALTER TABLE mytable DROP COLUMN myavg. . Boy tinyint Constraint boykontrol Check (boy>0). Örnek: ALTER TABLE ornek ALTER COLUMN tel bigint Yukarıdaki deyimde daha önceden oluşturulmuş olan ornek tablosundaki “smallint ve not null” özelliğindeki tel alanının özelliği. “bigint ve null” olarak değiştirilmiştir.

drop ile silinmeye çalışıldığında hata verecektir.1 . 2.SELECT İfadesi SQL’in birkaç İngilizce kelimeden oluştuğunu belirtmiştik. Bu yüzden bu tür bir alanı silmek için tanımlı constraintin silinmesi gerekir. Aslında bu kelimelere anahtar sözcük denir. Hatalı alan silme (boy) ALTER TABLE ornek2 DROP column boy Doğru alan silme (boy) ALTER TABLE ornek2 DROP CONSTRAINT boykontrol. Örneğin SELECT adında bir tablo veya kolon kullanmamak gerekir. SELECT ProductName . Bir tablodan veri almak için iki bilgiye ihtiyaç vardır: Hangi tablodan ve hangi kolondan alınacağı. COLUMN boy B. Bu işlemin yapılışı da aşağıdaki şekilde gösterilmiştir.1: Sorgu 1: Ürünler tablosunda bulunan tüm ürünlerin adının listesini almak isteyelim. diğer programlama dillerinde olduğu gibi SQL’de de “reserverd keywords” yani değişken adı olarak kullanılması yasaklanmış sözcüklerdir. • • • • SELECT INSERT UPDATE DELETE 2 . SELECT ifadesinin sözdizimi (sentax): SELECT <kolon ad(lar)ı> FROM <tablo adı> Örnek 2. DML (Data Manipulation Language) Deyimleri Veritabanı içindeki verileri elde etmek ve değiştirmekle ilgili SQL deyimleridir.İl varchar(10) Constraint ilkontrol Default (‘Bolu’) ) Yukarıdaki deyimde ornek2 isimli tablo oluşturulurken tablo içerisindeki boy ve il alanlarına ilişkin check (boykontrol) ve default (ilkontrol) constraintleri de oluşturulmuştur. Bilgi: Anahtar sözcük. Tablolardan bilgi almak için SELECT anahtar sözcüğü kullanılır. Üzerinde bir constraint tanımlı herhangi bir alan.Veriye Ulaşmak Bir tablodan bir veya birden fazla kolona ait bilgiye ulaşabilmek için SELECT ifadesi kullanılır.

tablodaki tüm kolonlar görüntülenir.1 . 3 . veri tabanı yönetim sistemine göre değişir. Sonuç kümesinde görüntülenen veriler. Yani bir sıralama söz konusu değildir. SQL’de büyük harf küçük harf duyarlılığı.2: Sorgu 2 : Ürünler tablosunda bulunan ürünlerin kodunu. Ürünler tablosundan urun_adi olarak isimlendirilmiş kolondaki bilgilere ulaşmak için SELECT sorgusu kullanıldı. SELECT * FROM Products Sorguda * operatörü kullanınca.FROM Products. aralarında istenildiği kadar boşluk kullanılarak çalıştırılabilir. . Sıralanması ise tabloda bulunduğu gibidir. Bir tablodan birden fazla kolona ait bilgi almak için kolon adları arasına virgül konulur. SELECT ProductID. ORDER BY Sözdizimi: SELECT <kolon ad(lar)ı> FROM <tablo adı> ORDER BY <kolon adı> Örnek 3. 3.Sıralama İşlemi Sonuç kümesindeki verileri istenilen kritere göre sıralamak için ORDER BY deyimini kullanacağız. Bilgi: SQL ifadelerinde sorguları kuvvetlendirmek için çeşitli kalıplar kullanılır. veri tabanına girilişe göre listelenmiştir. SQL ifadeleri. ProductName.Verilerin Sıralanması SELECT sorgusu ile ORDER BY deyimini kullanarak sonuç kümesindeki verileri sıralamayı inceleyeceğiz. Bilgi: Bir sorgudan elde edilen bilgiler topluluğuna “sonuç kümesi” denir. Örnek 2.3: Sorgu 3: Ürünler tablosundaki tüm bilgileri görüntülemek isteyelim. Ürünler tablosundan almak istediğimiz kolonarı birbirinden virgül ile ayırdık. Bu kalıplara deyim (clause) da denebilir.1: Ürünler tablosundan alfabetik sıralı olarak ürün adlarını listeleyelim. Bir tabloya ait tüm kolonların bilgisini almak için ise * operatörü kullanılır. İleride sıralanmış bilgiyi elde edebileceğiz. Örnek 2. UnitPrice FROM Products. adını ve fiyatlarını listelemek isteyelim.

eğer ilk kritere göre sıralanan kayıtlarda aynı değere sahip kayıt varsa. SELECT listemizde yer almayan bir kolona göre sıralama yaptırmak pek kullanışlı olmayacaktır. Yani fiyatı 45 Ytl olan birden fazla ürün varsa. Örneğin bir personel tablosunda soyada göre sıralanıp listenenen personelin bir de adına göre sıralanması istenebilir.3: Ürünler tablosunda ürün kodu. Örnek 3. Çoklu kolona göre sıralama yapmak için. SELECT listesinde belirtilen ikinci kolon adına göre sıralama yapılacağı anlamına gelir. Tablo ismi belirtildikten sonra hangi kolona göre sıralandırma yapılmak isteniyorsa ORDER BY deyiminden sonra o kolonun adı belirtilir. fiyatı ve ismini. 3. ProductName. Sorgu 5: SELECT ProductName. 3.2: Ürünler tablosunda ürün kodu. Aynı soyada sahip işçiler için bu durum söz konusudur. Burada dikkat edilmesi gereken. Ancak sıralamada kolon adları yerine pozisyonları kullanalım. ORDER BY 2. UnitPrice FROM Products ORDER BY 2. UnitPrice FROM Products ORDER BY UnitPrice.Çoklu Kolonlara Göre Sıralama Bazı durumlarda tek bir sıralama kriteri yeterli olmaz. ProductName.Kolon Pozisyonuna Göre Sıralama ORDER BY deyiminden sonra kolon isimlerini sıralamak yerine. Birden fazla kolona göre sıralama yapıldığı durumlarda. sonra da ürün adına göre görüntülemek isteyelim. bu ürünler de kendi aralarında ürün adına göre sıralanacaktır.Sorgu 4: SELECT ProductName FROM Products ORDER BY ProductName. ORDER BY deyiminin en sonda kullanılıyor olmasıdır. . Örnek 3.2 . tıpkı çoklu kolon bilgilerini görüntülerken kolon isimleri arasına konulan virgüller gibi ORDER BY deyiminden sonra da kolonlar arasına virgül koymak gerekir. ürün isimlerine göre sıralandırma yapabiliyor olmasıdır. fiyatı ve ismini. 3. UnitPrice. Sorgu 6: SELECT ProductID. ikinci kritere göre sıralama yapılır. kolonun pozisyonuna göre de sıralama yapılabilir. Görüntülenmek istenen kolonlara göre sıralama yaptırılacağına göre. ifadesidir. ORDER BY ProductName. 3 ifadesinin eşdeğeri. ORDER BY 2. önce fiyata göre. önce fiyata göre. sonra da ürün adına göre görüntülemek isteyelim. Bu sorgunun diğer sorgularımızdan farkı.3 .

WHERE deyimi. Artan yönde sıralamak için ASC anahtar sözcüğü kullanılır. 4 . Arama kriteri veya filteleme ifadesi olarak da isimlendirilebilir.1: Sorgu 9: Ürünler tablosudan ürün fiyatı 2. FROM ifadesinin hemen sağında kullanılır. Örnek 3.5 Bu sorguda.Kolon pozisyonu belirterek yeniden kodlamadan uzaklaşmış olunur. Sorgu 8: SELECT ProductID.Arama WHERE deyimi kullanılarak veriler arasında çeşitli kriterlere göre sorgu yapmayı öğreneceğiz. UnitPrice FROM Products WHERE UnitPrice = 2. Örnek 3.Sıralama Yönünün Belirtilmesi Verilerin varsayılan sıralama yönü azdan çoğa artan (ascending) şekildedir. UnitPrice. ProductName FROM Products ORDER BY UnitPrice DESC. .5 olanları listelemek isteyelim.5: Ürünler tablosunu fiyata göre azalan sırada. 3.WHERE Deyiminin Kullanımı Tablodaki veriler arasında belirli kritere uygun sorgu yapmak için WHERE deyimi kullanılır. Bu sorguda tabiki aynı değere sahip kayıtlar kendi aralarında sıralanma kriteri belirtilmeden rastgelen listelenmiştir. UnitPrice.Veri Filtreleme . sonra da ürün adına göre sıralı listeleyelim. SELECT ProductID.1 . 4. ProductName FROM Products ORDER BY UnitPrice DESC. WHERE Söz dizimi: SELECT <kolon ad(lar)ı> FROM <tablo adı> WHERE <kolon adı ve koşulu> Örnek 4. ORDER BY deyiminde hiçbir yön belirtilmezse bu artan olarak algılanır. Ancak pozisyona karşılık gelen isimlere dönüp bakmak da bazı durumlarda oldukça zaman kaybettirebilir. ürünler tablosundan sadece ürün fiyatı 2. ProductName. Azalan yönde (descending) sıralamak için ise DESC anahtar sözcüğü kullanılır. Bu sorguda aynı değere sahip kayıtlar kendi aralarında artan yönde sıralanmıştır. SELECT ProductName.5 olan kayıtlar listelenecektir.4 .4: Sorgu 7: Ürünler tablosunu fiyata göre azalan sırada listeleyelim.

Örneğin <> ile !=. SELECT ProductName.3: Sorgu 11: Ürünler tablosundan fiyatı 15 liradan büyük ve eşit olanları listeleyelim. SELECT SupplierID. Bu operatörler tablo 4. 4.4: Sorgu 12: Satıcı numarası 4 olan hariç tüm satıclardan alınan ürünleri listelemek isteyelim. UnitPrice FROM Products WHERE UnitPrice >= 15.1 Tek Bir Değere Göre Arama Önceki örnekte 2. Örnek 4. Örnek 4. Operatör Açıklama = Eşitlik <> Eşit değil != Eşit değil < Küçüktür > Büyüktür <= Küçük eşittir >= Büyük eşittir !< Küçük değildir !> Büyük değildir BETWEEN İki değer arasında IS NULL NULL Değer Tablo 4. Örnek 4.5: Sorgu 13: Ürün adı Chang dışındaki tüm ürünleri listeleyelim.1’de listelenmiştir. 4. ProductName FROM Products WHERE (SupplierID <> 4). ve ! > ile <= aynı etkileri oluşturur.1: Where Deyimi Operatörleri Bu operatörlerden bazıları birbirleriyle aynı anlama gelmektedir. !< ile >=. Şimdi ise belirli bir fiyattan daha küçük fiyata sahip olanları listeleyelim. Fakat bunların hepsi bazı veri tabanı yönetim sistemleri tarafından desteklenmez. UnitPrice FROM Products WHERE UnitPrice < 5 Örnek 4.2.4.2 . !< ve !> operatörleri. SELECT ProductName.WHERE Deyiminde Kullanılacak Operatörler WHERE deyimi ile kombine edilebilecek çeşitli operatörler vardır. Örneğin !=.2: Sorgu 10: Ürünler tablosundan fiyatı 5 liradan küçük olanları listeleyelim. .2 Eşitsizlik Durumları Şimdi ise eşitsizlik durumlarını inceleyelim.2. Ms Access tarafından desteklenmez.5 liraya eşitliğe göre arama yaptık.

SELECT ProductName FROM Products WHERE ProductName <> 'Chang' Örnekten de gördüğünüz gibi. Bu sefer metinin alfabetik duruma göre arama yapılacaktır.3 Belirli Bir Değer Aralığındaki Verilerin Araştırılması Belirli bir değer aralığındaki verileri araştırmak için BETWEEN operatörü kullanılır. Ayrıca metin ifadeleri için de aralık belirtilebilir.7: Ürün Sorgu 15: adı “Chang” ile “Longlife Tofu” arasında yer alan ürünleri listeleyelim. Önemli olan başlangıç ve bitiş aralığını belirtmektir. FROM Suppliers WHERE Fax IS NULL. Arama yapılacak aralığın başlangıcı BETWEEN anahtar sözcüğünden sonra belirtilmeli ve AND anahtar sözcüğünden sonra ise aralığın bitiş noktası belirtilmelidir.2. Örnekte fiyat araması için nümerik değerler kullanıldı. UnitPrice FROM Products WHERE UnitPrice BETWEEN 10 and 20 BETWEEN operatörü sayesinde istenilen her aralıkta bulunan verileri ulaşabilirsiniz. Örneğin bir adres bilgisinde posta kodu alanı opsiyonel olarak bırakılabilir. Örnek 4. Bu operatörün kullanımı WHERE deyiminden biraz daha farklıdır. 4. metinsel ifadeler ile ilgili sorgu yaparken ayıraç olarak tekli tırnak kullanılır. SELECT ProductName . 4. . NULL bilgiya ulaşmak için WHERE deyimi ile IS NULL anahtar sözcüğü birlikte kullanılır.4 Değer Girilmemiş Kayıtların Bulunması Bir tablo oluşturulduğunda. Örnek 4.2. Bu şekilde hiç bir değer girilmemiş alanlarda saklanan değere NULL değer denir.6: Sorgu 14: Fiyatı 10 ve 20 lira arasında değişen ürünleri listeleyelim. bazı alanlara değer girilmemesine izin verilebilir. SELECT ProductName. Örnek 4.8: Tedarikçiler (Suppliers) tablosundan fax bilgisi girilmemiş tedarikçilerin listesini alalım. UnitPrice FROM Products WHERE ProductName BETWEEN 'Chang' AND 'Longlife Tofu'. Sorgu 16: SELECT SupplierID. CompanyName WHERE Fax IS NULL kodu sayesinde fax numarası girilmemiş tedarikçiler listelenir.

4.7.2. Gerektiğinde birden fazla şarta göre arama yapılmak istendiğinde aralarına AND/OR bağlaçları konularak şartlar belirtilebilir.3.2002 3.2009 Aşağıda verilmiş olan SQL cümlelerini çalıştırarak sonuçları inceleyiniz. ucret FROM Personel WHERE ( Gorev=’memur’ OR Gorev=’Şef’ ) AND ucret>3000 SELECT ad. ucret FROM Personel WHERE Gorev=’memur’ OR Gorev=’Şef’ AND ucret>3000 SELECT ad.8.5. İşlemlerde öncelik sırası aşağıda belirtilmiştir : 1234- Tüm karşılaştırmalar ve parentez içi işlemler NOT işlemi AND işlemi OR işlemi İşlemlerdeki öncelik sırasıyla ilgili örneklerde kullanılacak olan örnek PERSONEL tablosu aşağıda verilmiştir. gorev.6. Birden fazla şartın belirtildiği bu durumlarda bağlaçların kendi aralarındaki işlem öncelik sıralarına dikkat edilmeleri gerekir.’Şef’) AND ucret>3000 SELECT * FROM Personel WHERE gorev=’memur’ AND ucret>2500 SELECT * FROM Personel WHERE NOT(gorev=’memur’) AND ucret>2500 SELECT * FROM Personel WHERE NOT(gorev=’memur’) AND ucret>2500 SELECT * FROM Personel WHERE (ad like ‘a%’ AND gorev=’memur’) AND ucret>2500 SELECT * FROM Personel WHERE (ad like ‘a%’ AND gorev=’memur’) OR ucret>2500 SELECT * FROM Personel WHERE (ad like ‘a%’ OR gorev=’memur’) AND ucret>2500 SELECT * FROM Personel WHERE (ad like ‘a%’ AND NOT(gorev=’memur’)) OR ucret>2500 SELECT * FROM Personel . ucret FROM Personel WHERE Gorev IN (‘Memur’. gorev.2003 4.2008 9.9.2. PerID 1 2 3 4 5 6 7 8 9 Ad Ali Can Ali Cem Eda Ali Can Cem Can Gorev Memur Memur Şef Memur Şef Müdür Memur Şef Şef Ucret 2500 2000 3000 1500 2500 4000 1250 2250 2000 BasTar 1.2004 5.4.2007 8.1. 1 2 3 4 5 6 7 8 9 10 11 SELECT ad.2006 7. İşlem Öncelik Sırası WHERE deyiminde tek bir şart belirtme gibi bir zorunluluk yoktur. gorev.2001 2.2005 6.5.

column_2 varchar(30)) INSERT T1 (column_2. column_1) VALUES ('Row #1'. Tablo yapısındaki sütun sırasıyla aynı sırada olmayan veri girişi yapılması Tabloya veri girişinde sütun listesi (alan isimleri) ve Values ifadesinin kullanımı CREATE TABLE T1 ( column_1 int.column_4) VALUES ('Explicit value'.column_3.-44. 'Row #1') B. 'Explicit value') INSERT INTO T1 (column_2.’şef’) AND bastar<’5.5.2005 AND ad like ‘_ _ _’ SELECT * FROM Personel WHERE gorev IN (‘memur’. Silme Ve Değiştirme İşlemleri Select ifadesi ile tablodan veri çekme işlemleri yapılırken.5. SELECT cümlesinde TOP anahtarı kullanılarak veri girişi yapılması .2005 OR ad like ‘_ _ _’ SELECT * FROM Personel WHERE NOT(gorev IN (‘memur’. Basit bir INSERT ifadesi kullanımı Aşağıdaki örnek T1 tablosunu oluşturur ve tabloya bir kayıt ekler.2005) AND ad like ‘_ _ _’ 4.1 INSERT İfadesinin Kullanımı Bir tabloya veya görünüm’e (view) bir satır (kayıt) ekler. column_2 varchar(30) column_3 int NULL. veriler üzerinde değişiklikler yapma ve tablodan veri silme işlemleri yapılır. CREATE TABLE T1 ( column_1 int.’şef’) AND bastar<’5.'Explicit value') SELECT * FROM T1 C.’şef’) AND bastar<’5.5.3.3 Veriler Üzerinde Ekleme.12 13 WHERE gorev IN (‘memur’.1) CREATE TABLE T1 ( column_1 int identity. column_2 varchar(30)) INSERT T1 VALUES (1.column_4) VALUES ('Explicit value'. UPDATE ve DELETE ifadeleri ile de tabloya veri ekleme. A. INSERT. column_4 varchar(40) ) INSERT INTO T1 (column_4) VALUES ('Explicit value') INSERT INTO T1 (column_2. 4.

. bir UPDATE cümlesinden WHERE ifadesinin çıkarıldığında tablodaki tüm verilerin etkileneceğini gösterirler.USE pubs CREATE TABLE new_authors ( au_id id. Aşağıdaki örnek. Publishers tablosundaki tüm kayıtların değeri atar. UPDATE titles SET price = price * 2 B. tablodaki değiştirme yapılacak olan satırları belirtir. state char(2). Basit bir UPDATE kullanımı Aşağıdaki örnekler. Publisher tablosundaki tüm kayıtlar için city ve state alanlarının değerlerinin değişimini yapar. au_lname varchar(40). Aşağıdaki örnekte WHERE ifadesi kullanılarak tablodaki eyaleti ( state ) ‘CA’ ve şehri ( city ) ‘Oakland’ olan kayıtlardaki state ve city alanlarının ‘Pc’ ve ‘Bay City’ olarak değiştirilmesi yapılmaktadır. city varchar(20). Aşağıdaki örnek.2 UPDATE İfadesinin Kullanımı Tablo içerisindeki verilerin değiştirilmesi işlemlerini yapar. A. contract bit ) INSERT INTO new_authors SELECT TOP 10 * FROM authors 4. au_fname varchar(20). zip char(5). address varchar(40). pub_name alanlarına NULL UPDATE publishers SET pub_name = NULL Bir UPDATE cümlesi içerisinde hesaplamalar yaparak sonucu tekrar tabloya yazabilirsiniz.3. UPDATE publishers SET city = 'Atlanta'. Titles tablosundaki tüm price alanlarının ikiyle çarpılarak tablodaki verilerin değişimini yapar. state = 'GA' Aşağıdaki örnek. phone char(12). UPDATE ifadesinin WHERE anahtarı ile beraber kullanımı WHERE anahtarı.

UPDATE ifadesinin SELECT cümlesinde TOP anahtarı ile beraber kullanımı Aşağıdaki örnek. UPDATE authors SET state = 'ZZ' FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1 WHERE authors.title_id = sales. Titles tablosundaki ytd_sales sütununu Sales tablosundaki satışları yansıtacak şekilde değiştirilmesini yapar.au_id 4. USE pubs DELETE authors B. Authors tablosundaki tüm kayıtları siler. DELETE ifadesinin belirtilen kayıtlar üzerinde kullanımı Aşağıdaki örnek. city = 'Bay City' WHERE state = 'CA' AND city = 'Oakland' C.au_id = t1. state sütununun Authors tablosundaki ilk 10 kayıt için değiştirilmesini yapar.ord_date) FROM sales) D. UPDATE titles SET ytd_sales = titles.UPDATE authors SET state = 'PC'.ord_date = (SELECT MAX(sales. DELETE ifadesinin parametresiz kullanımı Aşağıdaki örnek. sales WHERE titles. au_lname’i ‘McBadden’ olan satırları tablodan siler.qty FROM titles.ytd_sales + sales. UPDATE ifadesinin başka bir tablodan bilgiyle beraber kullanımı Aşağıdaki örnek.title_id AND sales.3. USE pubs DELETE FROM authors WHERE au_lname = 'McBadden' /* SQL-92-Standard subquery */ USE pubs DELETE FROM titleauthor .3 DELETE İfadesinin Kullanımı Tablodan kayıt silme işlemini yapar. A.

Şimdi ise daha detaylı veri sorgulaması için gereken yöntemleri inceleyeceğiz. UnitPrice FROM Products WHERE SupplierID = 8 AND UnitPrice <= 40.1 . WHERE deyimi ile birlikte kullanılacaktır. ve fiyatı 40 liradan küçük olan ürünleri listelemek için ise WHERE UnitPrice <= 40 kodunu kullanmıştır. Daha önceki örneklerimizde satıcı kimlik numarası 8 olan satıcının ürünlerini listelemek için WHERE SupplierID = 8 kodunu. DELETE ifadesinin SELECT cümlesinde TOP anahtarı ile beraber kullanımı Aşağıdaki örnek. AND operatörü. DELETE authors FROM (SELECT TOP 10 * FROM authors) AS t1 WHERE authors. ProductName. DELETE ifadesi içerisinde SELECT cümlesi ve TOP anahtarının kullanımıyla authors tablosundaki ilk 10 kayıtın silinmesini yapar. . 5.title_id WHERE titles. SELECT SupplierID. 5.au_id = t1.au_id 5 .WHERE title_id IN (SELECT title_id FROM titles WHERE title LIKE '%computers%') /* Transact-SQL extension */ USE pubs DELETE titleauthor FROM titleauthor INNER JOIN titles ON titleauthor.DETAYLI VERİ ARAMA TEKNİKLERİ Önceki bölümlerde öğrenilen sorgulamanın temel yapılarını birleştirerek daha ileri seviyede ve detaylı sorguların nasıl yapılacağını göreceğiz.WHERE Deyimi ve Kullanımı WHERE deyiminin temel kullanım şeklini öğrendik. Örnek 5.title_id = titles.1. Örneğin WHERE deyiminin çeşitli operatörlerle birlikte kullanımına ilişkin teknikler vereceğiz.1: Sorgu 17: Satıcı kimlik numarası 8 olan ve fiyatı 40 liradan küçük olan ürünleri listeleyelim.title LIKE '%computers%' E.1 AND Operatörü Birden fazla kolona ait bilgileri sorgulamak için AND operatörü kullanılır.

1. UnitPrice FROM Products WHERE (SupplierID=8 OR SupplierID=10) AND UnitPrice >=20 Parantezlerin kullanılmasıyla önce satıcı kimlik numaralarına göre sorgu yapılacak. SQL de ve çoğu programlama dillerinde AND operatörü önceliğe sahiptir. İki farklı kolona ait sorguları birleştirmek için AND operatörünü WHERE deyimi ile birleştiririz.3: Satıcı kimlik numarası 8 ve 10 olan satıcılardan alınan ürünler arasından fiyatı 20 lira veya fazla olan ürünleri listeleyelim. Örnek 5. 5. ProductName. AND değil. sorgusu ile istenilen sonuca ulaşılır. WHERE deyimi ile sonsuz sayıda AND ve OR operatörü kullanılabilir. ProductName. OR operatörünün gerekliliğini anlamaktır. Bu sorguda fiyatı 20 liradan küçük olan sorgular da gelecektir. 5. SELECT SupplierID. WHERE SupplierID = 8 AND UnitPrice <= 40. aslında doğru sonuçları içermeyecektir. Burada dikkat edilecek konu. Ancak örneğimizde kurduğumuz cümlede satıcı kimlik kodu 8 ve 10 olan satıcılara ait ürünleri listelemek istediğimizi belirttik. ProductName. UnitPrice FROM Products WHERE SupplierID=8 OR SupplierID=10 AND UnitPrice >=20 Ancak bu sorgu sonucunda göreceğimiz küme. .Bu sorguda. Çünkü biz aslında satıcı kodu 8 olan veya satıcı kodu 10 olan satıcılara ait ürünleri listelemek istedik. Bilgi: Operant.2: Sorgu 18: Satıcı kimlik kodu 8 ve 10 olan ürünleri listeleyelim.2 OR Operatörü AND operatörünün mantıksal değili OR operatörüdür. Sorgu 20: SELECT SupplierID. Çünkü operatörlerin bir öncelik sırası vardır. OR operatörü. Yani AND ve OR operatörünün bir arada bulunduğu durumlarda önce AND operatörünün operantları ile işlem yapılır. satıcı kimlik kodu 8 olan ve fiyatı 40 liradan küçük olan ürünleri listelemek istiyorsak bu iki koşulu birleştirmemiz gerekmez mi? İşte bu gibi durumlarda AND operatörü kullanılır. operatörlerin önünde kullanılan değerlerdir. Bu cümleyi koda dökerken ise OR operatörünü kullandık. birden fazla koşuldan en az birine uyan koşulları listelemek için kullanılır.1. Sorgu 19: SELECT SupplierID. Bu önceliğin getireceği yanlış sonuçları ortadan kaldırmak için parantezleri kullanacağız.3 Sorgularda İşlem Sırası WHERE deyimi ile AND ve OR operatörlerini birlikte kullanabiliyoruz. Peki bu operatörlere birleştirilen sorgular hangi sırada işleme sokulur? Bunu bir örnekle açıklayalım. Kullanımı AND operatörüna oldukça benzer. sonra bu satıcılara ait ürünler arasından ürün fiyatı 10 liradan büyük olanlar listelenecektir. Örnek 5. UnitPrice FROM Products WHERE SupplierID=8 OR SupplierID=10 Bu sorguda iki satıcıya ait bilgiler listelendi.

Bu sorgunun sonuç kümesi Sorgu 18’in sonuç kümesi ile aynı olacaktır. Bilgi: NOT operatörünün bu şekilde kullanımı.1 . (WHERE SATICI In ("can". ."veli"). SELECT SupplierID.5: Sorgu 22: Satıcı kimlik kodu 8 dışındaki tüm satıcıları listeleyelim. metin aramalarında oldukça kolaylık sağlayacak ifadeler içeren karakter arama tekniğidir. 5. NOT operatörü MySql’de sadece EXISTS anahtar sözcüğünün önüne gelebilir ve ona negatif anlam katar. Örnek 5. Böylece ne yapmak istediğiniz bir başkası tarafından daha kolay anlaşılacaktır. Şimdi ise tam olarak bilinmeyen değerlere nasıl ulaşacağımızı öğreneceğiz. Birkaç özel karakterden oluşur.) OR operatörü yerine IN operatörünü kullanarak kodunuzun okunabilirliğini arttırabilirsiniz.LIKE Operatörü Bu zamana kadar yaptığımız sorgularda bilinen değerleri aradık. 10) ORDER BY ProductName Sorguda da görüldüğü gibi. Çünkü IN operatörü gereksiz OR kullanımlarını engellemek için kullanılmıştır.IN Operatörü IN operatörü ise. MySql veri tabanı yönetim sistemi tarafından desteklenmemektedir. NOT operatörünün kullanımında diğer operatörlerden farklı olarak kolon isimlerinin önüne gelir. İçinde food geçen ürünlere ulaşmak istediğimizde.3 . Örneğin fiyatı belirli bir değere aralığında olanlar. 6 . SELECT SupplierID.2 .NOT Operatörü NOT operatörünün sadece bir işlevi vardır. ProductName.5. sorgu 12’nin sonuç kümesi ile aynı olacaktır. Bu sorgunun sonuç kümesi. ProductName FROM Products WHERE NOT SupplierID = 8. belirli bir aralıktaki verileri kümelek için kullanılır. adı belirli olan bir ürünü aradık. Kendisinden sonra gelen ifadeyi olumsuz yapar.4: Sorgu 21: Satıcı kimlik kodu 8 ve 10 olan ürünleri IN operatörü kullanarak listeleyelim. İki parantez arasında kümenin elemanları virgül ile ayrılarak bildirilir.Wildcard ile Arama – Filtreleme Wildcard. wildcard kullanmak durumundayız. Aslında NOT operatörünün hiçbir avantajı yoktur. Ancak çok karmaşık sorgularda IN operatörüyle belirtilen kümenin dışındaki kayıtlara ulaşmak amacıyla kullanılabilir. belirli bir kümeye ait elemanlara ulaşmak için IN operatörü kullanıldı. Örnek 5. UnitPrice FROM Products WHERE SupplierID IN(8. 6.

Anlamı ise bir arama metninde herhangi bir karakterden herhangi bir sayıda bulunabileceğidir. 6. Daha önceden operatör olarak kullanılan karakterler. . yalnızca metin veri türü içeren alanların (yani kolonların) sorgularında kullanılabilir.Bilgi: Arama kriteri (Search pattern). O yüzden chef sözcüğünün başına ve sonuna birer yüzde karakteri konur ve ilgili kayıtlar listelenir. Wildcard ifadeleri. Örnek 6. içinde chef geçen ürünlerdir. SELECT ProductName FROM Products WHERE ProductName LIKE 'R%' Bu sorguda yüzde ifadesinden önce belirtilen karakter veya karakterler ile başlayan kayıtlara ulaşmak istedik. Sonuç kümesi hakkında tek bildiğimiz. sadece ürün adlarının ilk harfinin R olacağıdır.2: Sorgu 24: İçinde Chef geçen ürün isimlerinin listesini alalım. Örnek 6.1: Sorgu 23: R harfi ile başlayan ürünlerin listesini alalım. Yüzde karakteri ile bir metinin içinde geçen bir ifadeyi de arayabiliriz. O yüzden arama kriterini belirlerken buna dikkat etmek gerekebilir. Önemli Not: Ms Access veri tabanı yönetim sistemi. Örnek 6. istediğimizden daha fazla kayıt karşımıza çıkabilir. % karakteri yerine * karakteri kullanır.3: S ile başlayan ve s ile biten ürünleri listeleyelim. Yani R harfi ile başlayan ürünlerin listesi istendiğinde LIKE anahtar sözcüğü ile % karakteri kombine edilecektir. SELECT ProductName FROM Products WHERE ProductName LIKE '%chef%' Bu sorguda bulunmak istenen.1 Yüzde (%) (percent) Wildcard Karakteri Wildcard karakterleri arasında en çok kullanılanı. WHERE deyimlerinden kullandığımız sorgulardan farklı olarak wildcard ifadelerine karşılık gelen değerlere ulaşırken. wildcard ifadesi olarak kullanıldığında tamamen farklı görevlerle yüklenirler. Yani yukarıdaki sorgu Ms Access’de SELECT ProductName FROM Products WHERE ProductName LIKE 'R*' şeklinde olacaktır.1. Bazı veri tabanı yönerim sistemlerinde büyük harf – küçük harf duyarlılığı vardır. SQL ifadelerinde wildcard kullanabilmek için LIKE anahtar sözcüğü gereklidir. İkinci veya diğer herhangi bir karakter hakkında bir bilgi vermedik. arama ifadeleri ve/veya wildcard karakterleri içeren sorgu metinidir. yüzde karakteridir.

1.Sorgu 25: SELECT ProductName FROM Products WHERE ProductName LIKE 'S*s' LIKE ‘S*s’ diyerek. Bilgi: Köşeli parantez kullanımını her veri tabanı yönetim sistemi desteklemeyebilir. aradaki harflerle ve sayısıyla ilgili hiçbir kriter belirtilmesin. tek bir karaktere karşılık gelmesidir. ilk ve son harflerini bilmiyoruz ancak içinde “kur” sözcüğü geçiyor. Eğer başında ve sonunda birer karakter olan ve arasında bir metin parçası içeren arama yapmak istiyorsak. 6. Örnek 6. Bu ürünün adı nedir? Sorgu 27: SELECT ProductName FROM Products WHERE ProductName LIKE '_kur_' Örnek 6. SQL Server ve Sybase Adaptive Server veri tabanı yönetim sistemlerinin desteklediği bilinmektedir. 6. 5 harfli ve adını hatırlayamadım.6: Sorgu 28: Bir ürün var “Cha” ile başlıyor.3 Köşeli Parantez ( [ ] )(brackets) Wildcard Karakteri Köşeli parantez wildcard karakteri ile çeşitli karakterler bir küme halinde belirtilir. SELECT ProductName FROM Products WHERE ProductName LIKE 'Tof_' Ürün adı Tof ile başlıyor ancak son. SELECT ProductName FROM Products WHERE ProductName LIKE 'Cha__' Bu sorguda da. Access. wildcard ifademizin bir başına bir de sonuna birer alttire kullanacağız demektir.2 Alttire (_) (underscore) Wildcard Karakteri Alttire karakterinin kullanımı da yüzde karakterine oldukça benzemektedir. Örnek 6. Diğerleri için özelliklerini incelemenizi tavsiye ederiz. ve son harfi yine s olan kayıtları içersin demek istedik.5: 5 harfli bir ürün adı var. yani dördüncü karakteri neydi unuttum diyorsak alttire karakteri kullanmalıyız. herhangi sayıda değil de. .1. Bu karakter kümesinden herhangi biri eşleşebilir. her bir karakter için bir alttireyi arama kriterinin içerisine yerleştirdik. sonuç kümem ilk harfi S. Ancak yüzde karakterinden en önemli farkı. Önemli Not: Ms Access veri tabanı yönetim sisteminde _ yerine ? kullanılır.4: Sorgu 26: Ürün adı Tof ile başlayan ve 4 harften oluşan ürünleri listeleyelim.

Karat karakteri (^) yerine NOT operatörünü de kullanabiliriz. Sorgu 32: SELECT ContactName. Örnek 6. CompanyName FROM Customers WHERE ContactName LIKE '[RT]*' ORDER BY ContactName Bu sorguda köşeli parantezler içerisinde belirtilen R ve T harflerinden biriyle başlayan müşteri isimleri görüntülenmiştir. CompanyName FROM Customers WHERE ContactName LIKE 'R*' OR ContactName LIKE 'T*' ORDER BY ContactName Gördüğünüz gibi OR operatörü kullanmak yerine köşeli parantezler ile sorgumuzu daha okunabilir kıldık. Yani sorgu 31’in Access’de çalışabilmesi için SELECT ContactName. Bu küme istenildiği kadar genişletilebilir. CompanyName FROM Customers WHERE ContactName LIKE '[!RT]*' ORDER BY ContactName. . Sorgu 29: SELECT ContactName. Sorgu 30: SELECT ContactName.7: Müşteriler (Customers) tablosundan R veya T harfleriyle başlayan müşteri isimlerini bulalım. CompanyName FROM Customers WHERE ContactName LIKE '[^RT]%' ORDER BY ContactName ^ (karat karakteri) sayesinde bir kümenin değili elde edilir. Yani içinde R ve T olmayan elemanların oluşturduğu küme içerisinden değerler gelir. Bu sorgunun eşdeğeri sorgu 30’da belirtilmiştir. CompanyName FROM Customers WHERE NOT ContactName LIKE '[RT]%' ORDER BY ContactName.8: Sorgu 31: Adı R veya T ile başlamayan müşterilerimizi sorgulayalım.Örnek 6. Köşeli parantez içinde listelerken. IN operatöründeki gibi virgüller ile ayırmak sözkonusu değildir. şeklinde kodlanması gerekir. SELECT ContactName. Bilgi: Ms Access’de ise ^ operatörü yerine ! kullanılır.

onları biz istediğimiz şekilde görüntüleyebiliriz. Sorgu 33: SELECT CompanyName + ' (' + FROM Suppliers Country + ') ' Burada tedarikçiler tablosundan tedarikçi şirketin adı ve bulunduğu ülkenin bilgisi + operatörü ile birleşitirilerek sonuca varılmıştır. • Bir müşterinin adı. İstemeyerek yanlış sonuçlar elde edilebilir. Bilgi: Tablonun kolonlarını kastederek. 7. Örnek 7. Wildcard kullanmaya karar vermeden önce iki kere düşünün: • Aynı işlevi bir operatör ile yapabiliyorsanız. Örneğin. çeşitli hesaplamalar yapılarak yeni sonuçlar elde edilebilir. küçük parçalara ayrıştırılarak saklanır. bu sorgu performansını arttıracaktır.Karat karakteri kullandığımızda R ve T dışındaki elemanların oluşturduğu kümeyi elde ettiğimizi belirtmiştik. • CompanyName kolonunda bulunan bilgi alınır . Ve bir veri tabanında çoğu bilgiler. istenilen formatta değilse. Ve kimi zaman bu kolonlardaki bilgilerin birleşitirilmesi gerekir.2 Alanların Birleştirilmesi Alanlar ile yapacağımız ilk işlem. alan dediğimiz durumlar da olacaktır. 7 . Görüntülemek istediğimiz veriler.TABLONUN ALANLARI İLE ÇALIŞMAK Tablolarda bulunan kolonlar dışında. en yavaş çalışan görevdir.1 Tabloların Alanları ile Neden Çalışılır? Tablolar. NOT operatörü ise aynı görevi yapar ve R ve T ile başlamayan tüm kayıtlara ulaştır. soyadı ve bulunduğu şehri bir arada görüntülemek • Adresi oluşturan kolonları birleştirerek tam adres oluşturmak • Ürünleri ve isimlerini birlikte görüntülemek vs. Belki de bu alanlar üzerinde çeşitli hesaplamaların da yapılması gerekebilir. • Wildcard karakterlerini kullanırken çok dikkatli olunuz. 7. bilgileri kolonlar halinde saklar. iki alanı bir kolonda birleştirmek olacaktır. Yapılan işlemleri sıralayacak olursak.1: Tedarikçiler (Suppliers) tablosundan tedarikçi adını ve bulunduğu ülkeyi bir arada bulunduracak sorguyu oluşturalım. Çünkü wildcard ile arama yapmak.

Country. PostgreSQL ve Sybase ise metin ekleme işlemleri için || (pipe) operatörünü destekler. ‘( ‘.2: Tedarikçiler (Suppliers) tablosundan tedarikçi adını ve bulunduğu ülkeyi bir arada bulunduracak sorguyu oluşturalım. Bilgi: Ms Access. oluşturulan bu yeni kolona Supplier_Name adı verilmiştir. Sorgu 35: SELECT RTRIM(CompanyName)+' ('+RTRIM(Country)+') ' AS Supplier_Name FROM Suppliers ORDER BY CompanyName Sorguda da görüldüğü gibi. Bu işlem için CONCAT() fonksiyonu tanımlanmıştır. Sorgu 34: SELECT RTRIM(CompanyName) + ' (' + FROM Suppliers ORDER BY CompanyName RTRIM(Country) + ') ' RTRIM sağdaki. Oracle. MySql’de || operatörü OR operatörü ile aynı anlamdadır. Dikkat ettiyseniz bir metin ifadesini ayırmak için kullanılan tek tırnakları burada kullanmadık. SELECT CONCAT(CompanyName. Quantity. Ve son olarak da bir parantez ve bir boşluk karakterleri de eklenir.3: Sorgu 36: 10840 numaralı ürüne ait siparişlerin detaylarını görüntüleyelim.• • • Bir boşluk ve bir parantezden oluşan metin ifadesi eklenir. DB2.2 Matematiksel İfadelerin Hesaplanması Aslında alanlar üzerinde en çok yapılan işlemler matematiksel işlemlerdir. İstenmeyen boşlukları kaldırmak için. LTRIM soldaki ve TRIM hem baştaki hem de sondaki boşlukları yok eder. Örnek 7. 7. SQL Server ve Sybase veri tabanı yönetim sistemleri. Sonra Country kolonunda bulunan bilgi de alınıp eklenir. Ve yeni oluşan kolona “Supplier_Name” adı verelim. veri tabanı sistemlerinin kolonun maksimum karakter sayısına göre yerleştirmesinden kaynaklanır. Bu durum. Sipariş detaylarına ilişkin verilerin tutulduğu “Order Details” tablosu üzerinde çeşitli işlemler yapılabilir. RTRIM().2. SELECT ProductID. 7.1 Kolon İsimlerinde Takma Ad Kullanımı (Alias) Birleştirilen alanların oluşturduğu yeni kolona ait bir kolon ismi tanımlamak için AS anahtar sözcüğü kullanılır. metin ekleme işlemleri için bu iki operatörden hiçbirini desteklemez. UnitPrice FROM [Order Details] WHERE OrderID = 10840 . LTRIM() ve TRIM() SQL fonksiyonları kullanılabilir. Örnek 7. metin ekleme işlemleri için + operatörünü desteklerler. MySql ise. ‘) ’ ) Bazı veri tabanı yönetim sistemlerinde alanlar birleştirilirken aralara istenmeyen boşluklar gelebilir.2.

diğer bir sistemde çalışamayabilir. MySQL CURDATE(). Peki ya bu siparişin toplam tutarını görüntülemek için ne yapılmalı? Sorgu 37: SELECT ProductID. 8. DB2 ve PostgreSQL CURRENT_DATE. nümerik işlem yapan fonksiyonlar. Oracle SYSDATE. Sql Server ve Sybase CONVERT() fonksiyonlarını kullanır.Fonksiyonlar Üzerine SQL içerisinde dei programlama dillerinde olduğu gibi veriler üzerinde işlem yapmaya yarayan standart fonksiyonlar vardır. Aslında fonksiyon kullanmak kimi zaman da işleri oldukça ağırlaştırmaktadır.2 – Fonksiyon Kullanımı Fonksiyonlar. Ms SQL Server. MySQL ve Sybase ise SUBSTRING() fonksiyolarını kullanır.2. 8. fonksiyonlar standart değildir. mevcut kolonlardaki bilgiler kullanılarak yeni veriler elde edilmek isteniyorsa. Sql Server ve Sybase GETDATE() fonksiyonlarını kullanır. Fonksiyon Bir metnin bir kısmından yeni bir metin oluşturmak Tür Dönüştürme Söz dizimi Ms Access MID(). Access ve Oracle her dönüşüm türüne göre bir fonksiyon kullanır. Yani taşınabilir değildir. Quantity * UnitPrice AS Total_Price FROM [Order Details] WHERE OrderID = 10840 Sorgu sonucunda da görüldüğü gibi. DB2.1’de veri tabanı yönetim sistemlerinin fonksiyonları arasındaki farklılıklar belirtilmiştir. 8.1 Metinler Üzerinde İşlem Yapan Fonksiyonlar Önceki bölümde gördüğümüz TRIM() fonksiyonları. . DB2 ve PostgreSQL CAST(). yaptığı işlevlere göre gruplandırılabilir. Tarih Alma Access NOW(). Tablo 8. Örneğin metin üzerinde işlemler yapan fonksiyonlar. Örneğin SELECT deyimi standart bir deyimken.Veriler Üzerinde Değişiklik Yapan Fonksiyonlar Veri tabanı yönetim sistemleri tarafından desteklenen SQL fonksiyonlarını öğreneceğiz. Bu alanlarda istenilen tüm matematiksel hesaplamalar yapılabilir. Tablo 8.Bu sorgu sonucunda UnitPrice. LTRIM ve RTRIM fonksiyonlarından bahsetmiştik. 8 . Çünkü bir sistemde yazılmış kod. her bir ürün için geçerli olan fiyatları gösterir. SELECT deyiminin içerisinde bu işlemler tanımlanabilir.1: Veri Tabanı Yönetim Sistemlerinde Bazı Fonksiyonlar ve Farklılıkları Tablo 8. Quantity.1’den de görüldüğü gibi. zaman ve tarih fonksiyonları ve sistem fonksiyonları olarak gruplandırılabilir. MySQL. Oracle ve PostgreSQL SUBSTR(). bu gruba dahildir. Örneğin ele alınan metini tamamen küçük harfe dönüştüren LOWER() ve büyük harfe dönüştüren UPPER() fonksiyonları da bu gruptadır. SQL fonksiyonları kullanmak o kadar da avantajlı değildir.1 . Bir önceki konuda TRIM. UnitPrice.

Access’de LEN() Metinin uzunluğunu verir LOWER(). Tamamen küçük harfe dönüştürmek isteseydik LOWER() fonksiyonunu kullanacaktır. İfade1. ifade2[ .Örnek 8. Sıklıkla kullanılan metinsel veriler üzerinde değişiklik yapan fonksiyonlar tablo 8. İfade2 içinde bulunamazda 0 değeri döner. adi) FROM urun -. Fonksiyon LEFT() Açıklama Metinin sol tarafından karakter alır RIGHT() Metinin sağ tarafından karakter adır LENGHT().arama için başlangıç konumu belirtmek istersek .2: Metin üzerinde değişiklik yapan Fonksiyonlar CHARINDEX Bir karakter dize içinde belirtilen bir ifadenin (karakterin) başlangıç konumunu döndürür. Access’de Metini tamamen büyük UCASE() harflere dönüştürür LTRIM() Metinin solundaki boşlukları kaldırır RTRIM() Metinin sağındaki boşlukları kaldırır TRIM() Metinin başındaki ve sonundaki boşlukları kaldırır SOUNDEX() Bir metinin SOUNDEX değerini geri döndürür Tablo 8. Access’de Metini tamamen küçük LCASE() harflere dönüştürür UPPER(). İfade2: İfade1'deki karakterlerin aranacağı karakterleri belirtir. başlangıç konumu] ) İfade1: aranacak karakterleri belirtir. Kullanımı: CHARINDEX ( ifade1. SELECT UPPER(CompanyName) + ' (' + FROM Suppliers ORDER BY CompanyName UPPER(Country) + ') ' UPPER() fonksiyonu ile tüm karakterler büyük harfe dönüştürüldü.1: Sorgu 38: Sorgu 33’deki sorgumuzun sonuçlarını tamamen büyük harflerle görüntüleyelim. Başlangıç konumu ise aramanın başlanacağı konumu belirtir.2’de gösterilmiştir. Örnek: ADI alanında BOYASI sözcüğünün başladığı konumu döndürür. Döndürdüğü tür: Int İfadelerden birisi NULL ise CHARINDEX fonksiyonu NULL değerini döndürür. SELECT CHARINDEX('BOYASI'.

Kullanımı: LTRIM ( karakter dize) RIGHT Belirtilen dizenin sağ tarafından keser. tarmsayı) Örnek: Adların soldan beş karakteri: USE ornek GO SELECT LEFT(adi.charindex(' '. Kullanımı: LEN ( karakter dize) Örnek: Adı alanının uzunluğu: SELECT LEN(adi) AS 'Uzunluk' FROM cariana use ornek select substring (adi. adi.soyadını ayırmak LTRIM Önündeki boşlukları siler. tamsayı) .adi)+1. 5) FROM urun Yalnızca adlar listesi: select left (adi.adi))) from cariana -. Kullanımı: RIGHT ( karakter dizesi.(len(adi)-charindex(' '. Kullanımı: LEFT ( karakter dize. 5) FROM cariana ORDER BY kodu GO LEN Dize verinin uzunluğunu döndürür. adi)) from cariana LEFT Bir karakter dizesinin sol taraftan belirtilen sayı kadar keser.SELECT CHARINDEX('BOYASI'.charindex(' '.

başlangıç.telefon numarasında 7 karakteri 9 ile değiştirmek use SUBSTRING Bir karakter dizesinin içinden belli karakterleri seçer. 1. '8') from cariana -. 4) FROM cariana Adı soyadı alanından soyadını çekmek: select substring (adi. Kullanımı: RTRIM ( karakter dize) Örnek: Bir alan güncelleme: update deneme set alan1 = rtrim(alan1) + rtrim('a') STUFF Belirtilen uzunluktaki karakterleri siler ve yerine belirtilen diğer karakterleri ekler. karakter dize) Örnek: ornek SELECT STUFF(tel. uzunluk) Örnek: Adı alanının içinde üçüncü karakter başlayım 4 tane karakteri döndürmek: SELECT SUBSTRING(adi.charindex(' '.Arguments Örnek: Adı alanını sağlan 10 karakteri: SELECT RIGHT(adi. 10) FROM cariana RTRIM Karakter dizesinin arkasındaki boşlukları kaldırır.adi)+1.(len(adi)-charindex(' '. Syntax STUFF ( karaker dize. Kullanımı: SUBSTRING ( karakter dize.adi))) from cariana . 7. başlangıç. uzunluk. 3.

Tabiki bizi ilgilendiren bu verilerin nasıl tutulacağı ve nasıl ulaşılacağıdır.8. yyyy Quarter qq. y Day dd. ww Hour hh . m Dayofyear dy. d Week wk. tarih) Argümanları: Tarih kısmı Tarih Parçası Kısaltması Year yy. Kullanım biçimi: DATEADD ( tarihkısmı. Tarih ve zaman bilgisini ayrıştıran çeşitli fonksiyonlar vardır. sayı.2. Tarih ve zaman fonksiyonları şunlardır:          DATEADD DATEDIFF DATENAME DATEPART DAY GETDATE MONTH YEAR CONVERT DATEADD Belli bir tarihin üzerine değer eklenerek yeni bir tarih değeri üretir. TARİH VE ZAMAN FONKSİYONLARI (T-SQL) Bu fonksiyonlar tarih (date) ve zaman (time) üzerinde işlemler yapmayı sağlar.2 Tarih ve Zaman Üzerinde İşlem Yapan Fonksiyonlar Her bir veri tabanı yönetim sisteminin kendine has tarih ve zaman bilgilerini saklama yöntemi vardır. q Month mm.

Minute mi. 30. Örnek: Yayın tarihinin 30 gün sonrası: USE pubs GO SELECT DATEADD(day. y Day dd. ord_date FROM sales WHERE (ord_date >= DATEADD(day. pubdate) FROM titles GO Örnek: Son on gün içinde yapılan siparişler: SELECT ord_num. d Week wk. tarih Tarih değerini döndüren tarih bilgidi. q Month mm. bitiş tarihi) Argümanları: Tarih parçası Tarih Parçası Kısaltması Year yy. Kullanımı: DATEDIFF ( Tarih parçası. m Dayofyear dy. ww Hour hh Minute mi. -10. başlangıç tarihi. n . yyyy Quarter qq. s Millisecond ms sayı Tarih kısmını artırmak için kullanılan değer. GETDATE())) DATEDIFF İki tarih arasındaki gün sayısını verir. n Second ss.

Kullanım Biçimi: DATEPART(tarihparçası. y dd. n ss. yyyy qq. ww Dw Hh mi. Tarih bölümü year quarter month dayofyear day week weekday hour minute second millisecond Kısaltma yy. GETDATE()) Ayı verir: DAY (T-SQL) . q mm. s Ms Örnek: Aşağıdaki örnekte şu anki tarihin karşılık geldiği ay adı ve ay numarası bulunmaktadır: SELECT GETDATE() Tarihi verir: SELECT DATEPART(month. pubdate. tarih) Argümanları: Tarih parçası Tarih bilgisinin bir kısmını ifade eden bilgi. m dy. s millisecond Ms Örnek: Şu anki tarih ile yayın tarihi arasındaki fark: USE pubs GO SELECT DATEDIFF(day.Second ss. getdate()) FROM titles GO DATEPART (T-SQL) Belirtilen tarihin istenen parçasına karşılık olarak bir tamsayı döndürür. d wk.

Aşağıdaki örnekte verilen tarihin gün kısmı verilmektedir: SELECT DAY('26/03/1999') AS 'Gün' GO Sonuç: Gün -----------26 MONTH (T-SQL) Bir tarih bilgisinin ay kısmını verir.Bir tarih bilgisinin gün kısmını verir. Kullanım Biçimi: DAY(tarih) Argümanları: tarih datetime ya da smalldatetime tarih bilgisi. Kullanım Biçimi: MONTH(tarih) Argümanları: tarih datetime ya da smalldatetime tarih bilgisi. Aşağıdaki örnekte verilen tarihin ay kısmı verilmektedir: SELECT MONTH('26/03/1999') AS 'Ay' GO Sonuç: Ay -----------03 YEAR (T-SQL) .

SELECT OrderID FROM Orders WHERE DATEPART(yy. getdate()) . Kullanım Biçimi: YEAR(tarih) Argümanları: tarih Örnek 8.4: Sorgu 42: 1 Ocak 1996 ile 1 Ocak 1998 tarihleri arasındaki siparişleri listelemek isteyelim. Bu formu SQL Server ve Sybase de destekler. OrderDate FROM Orders WHERE OrderDate Between ‘1/1/1996’ And ‘1/1/1998’ Bilgi: Ms Access’de tarih belirtirken # işareti kullanılır.OrderDate)=1996. şeklide destekler. MySql ise SELECT OrderID FROM Orders WHERE YEAR(OrderDate)=1996.3: Sorgu 41: 1996 yılına ait tüm siparişleri listeleyelim. OrderDate) = 1996 Bilgi: Ms Access’de DATEPART fonksiyonunun kullanımında bir farklılık vardır. şeklinde belirtmek gerekir. SELECT OrderID. Örnek 8. pubdate. ‘YY’))=1996. Oracle ise SELECT OrderID FROM Orders WHERE to_number(to_char(OrderDate.Bir tarih bilgisinin yıl kısmını verir. SELECT OrderID FROM Orders WHERE DATEPART('yyyy'. WHERE OrderDate Between #1/1/1996# And #1/1/1998# Örnek: Şu anki tarih ile yayın tarihi arasındaki fark: USE pubs GO SELECT DATEDIFF(day. şeklinde destekler.

1’de toplam fonksiyonları listelenmiştir. Metin ve tarih fonksiyonları kadar çok kullanılmazlar. Tablo 8. Fonksiyon ABS() COS() SIN() TAN() EXP() SQRT() PI() Açıklama Sayının mutlak değerini verir Belirtilen açının trigonometrik kosinüs değerini verir Belirtilen açının trigonometrik sinüs değerini verir Belirtilen açının trigonometrik tanjant değerini verir Belirtilen sayının exp üstel değerini verir Belirtilen sayının karekök değerini verir Pi sayısını verir Tablo 8. Tablo 9.2. Fonksiyon AVG() COUNT() Açıklama Kolona ait ortalama değer Kolondaki satır sayısı . Bu gibi işlemler gerçekleştirmek için beş adet toplam fonksiyonu tasarlanmıştır.FROM titles GO 8.3’de nümerik fonksiyonlar listelenmiştir.1 Toplam Fonksiyonlarının Kullanımı Tablolarda saklanan veriler üzerinde sıklıkla gerçekleşen işlemler için tasarlanmış fonksiyonların nasıl kullanıldığını inceleyelim.3 Nümerik İşlem Yapan Fonksiyonlar Nümerik veriler üzerinde çeşitli cebirsel işlem yapan fonksiyonlardır. Bir veri tabanından istenen bilgilerin başında. en düşük ve ortalama değerleri elde etmek gelir. 9.3: Nümerik Fonksiyonlar 9 . kolonlar üzerinde toplam değer. • Bir tablodaki kayıt sayısını elde etmek • Belirli bir koşulu sağlayan kayıtların sayısını elde etmek • Tablonun kolonlarındaki verilerin toplamını elde etmek • Kolonlara ait en yüksek. ortalama değer gibi bilgileri geri döndüren işlemleri yapan fonksiyonlardır.Veriler Üzerinden Özet Bilgi Alınması Tabloların kolonlarında saklanan verilere ilişkin özet bilgi elde edebilemek için SQL’in çeşitli toplam fonksiyonlarından (aggregate functions) yararlanacağız. Bilgi: Aggregate Functions (toplam fonksiyonları).

9. SELECT AVG(UnitPrice) AS Ortalama_Fiyat FROM Products Sorgudan da görüldüğü gibi. SELECT AVG(UnitPrice) AS Ortalama_Fiyat FROM Products WHERE SupplierID = 3 Bu sorguda ise belirli bir kritere göre gelen sonuç kümesi üzerinde ortalama işlemi yapılmıştır.2: Tedarikçi Sorgu 44: kayıt numarası 3 olan ürünlerin ortalama fiyat bilgisine ulaşmak isteyelim. Örnek 9. . tablodaki kayıt sayısı elde edilir. AVG() fonksiyonu sadece nümerik değerler içeren kolon üzerinde işlem yapar ve bu kolon adı fonksiyon parametresinde belirtilmelidir.1. Yani değer girilmemiş satırlar işleme sokulmaz. • COUNT(*) ile. NULL değer içeren satırlar işlem dışı tutularak belirli bir kolondaki kayıt sayısı elde edilir. • COUNT (kolon_adı) ile. Örnek 9.1: Ortalama Sorgu 43: ürün fiyat bilgisini almak isteyelim. AVG() fonksiyonu tarafından işleme sokulmaz. belirli bir kolondaki kayıtları sayar. NULL değerler de sayılır.3: Sorgu 45: Kaç tane müşterimiz var acaba? SELECT COUNT(*) AS Müşteri_Sayısı FROM Customers COUNT(*) kullanılan sorgularda satır içerisinde veri girilip girilmediğine bakılmadan toplam satır sayısı geri döndürülür.2 COUNT() Fonksiyonu Adından da anlaşılacağı gibi COUNT() fonksiyonu.1.1 AVG() Fonksiyonu Tablonun belirli bir kolonuna ait veriler üzerinde. Ve hesaplanan bu değere Ortalama_Fiyat adında yeni bir kolon ismi verildi. Bilgi: NULL değer içeren satırlar. hesaplama yapılacak kolon ismi AVG() fonksiyonunun parantezleri içerisinde bildirildi. Örnek 9.1: Toplam Fonksiyonları (Aggregate Functions) 9.MAX() Kolondaki en yüksek değer MIN() Kolondaki en düşük değer SUM() Kolondaki değerlerin toplamı Tablo 9. Ayrıca birden fazla kolona ait ortalama değeri elde etmek için elbette birden fazla AVG() fonksiyonu kullanılmalıdır. Bu fonksiyonun iki farklı kullanım şekli vardır. o kolondaki tüm değerlerin toplanıp değer girilen satırların sayısına bölümünden elde edilen ortalama değeri geri döndürür.

Örnek 9.4 MIN() Fonksiyonu MIN() fonksiyonu. Örnek 9. tarih ve metinsel ifadelerde de kullanılır.1. MAX() fonksiyonu nümerik değerlerin yanı sıra. Örneğin metinsel ifadeler içeren bir kolona MIN() fonksiyonu uygulanırsa alfabedeki sıralamaya göre en öndeki kayıt görüntülenir. 9. Çoğu veri tabanı yönetim sistemi bunu destekler.5 SUM() Fonksiyonu SUM() fonksiyonu. tarih ve metinsel ifadelerde de kullanılır.1.4: Sorgu 46: Fax numarası girilmiş kaç tane müşterimiz var acaba? SELECT COUNT(Fax) AS Faxlı_Müşteri_Sayısı FROM Customers COUNT(kolon_adı) kullanılan sorgularda kolona ait veriler girilmişse sayım yapılır. belirtilen kolondaki en büyük değere ait veriyi geri döndürür.Örnek 9. 9. SELECT MIN(UnitPrice) AS Minimum_Fiyat FROM Products Bu örnekte en ucuz ürün görüntülenmiştir.3 MAX() Fonksiyonu MAX() fonksiyonu. zaman. zaman. Yani NULL değer içeren kayıtlar sayılmaz. SELECT SUM(Quantity) AS Toplam_Ürün . Çoğu veri tabanı yönetim sistemi bunu destekler.5: En Sorgu 47: yüksek fiyatlı ürünü öğrenmek isteyelim. MIN() fonksiyonu nümerik değerlerin yanı sıra.10: Sorgu 50: Toplam kaç adet malın sipariş verildiğini bulalım. SELECT MAX(UnitPrice) AS Maksimum_Fiyat FROM Products Bu örnekte en pahalı ürün görüntülenmiştir. Örnek 9. Örneğin metinsel ifadeler içeren bir kolona MAX() fonksiyonu uygulanırsa alfabedeki sıralamaya göre en son sıraya düşen kayıt görüntülenir. Örnek 9. SELECT MAX(CompanyName) AS En_Sondaki_Müşteri FROM Customers MAX() fonksiyonu NULL değer içeren kayıtlar ile işlem yapmaz. 9.6: Alfabetik Sorgu 48: listeye göre en sonda yer alan müşteriyi görüntüleyelim.1. belirtilen kolondaki en küçük değere ait veriyi geri döndürür.7: En Sorgu 49: düşük fiyatlı ürünü öğrenmek isteyelim. belirtilen kolondaki değerlerin toplamını geri döndürür.

kaç farklı ülke ile çalışıldı ekle DISTINCT anahtar sözcüğü COUNT(*) fonksiyonu ile kullanılamaz. SELECT SUM(Quantity * UnitPrice) AS Tutar FROM [Order Details] WHERE OrderID = 10255 Sorgudan da görüldüğü gibi.13: 15 kayıt numaralı tedarikçiye ait ürünlerin tekil değerilerinin ortalama fiyatını almak isteyelim. Örnek 9. Örnek 9. Yani aynı fiyattaki ürünler sadece bir kez toplanır. Ve tabiki ortalama değer bu şekilde hesaplanır. ALL değeri kullanılmış kabul edilir.Farklı Değerler Üzerinde Toplam İşlemleri Toplam fonksiyonları ile yaptığımız işlemler tüm kayıtlar üzerinde gerçekleştirildi. aslında toplam fonksiyonlar içerisinde varsayılan değer olarak ALL anahtar sözcüğünün kullanılmıştır. varsayılan değerdir. MS Access veri tabanı yönetim sistemi. . aynı değere ait kayıtlardan sadece birer tanesinin işleme koyulacağını belirtir. ALL anahtar sözcüğü kullanılmasa da. 9. SELECT SUM(Quantity) AS Toplam_Ürün FROM [Order Details] WHERE OrderID = 10255 Bu örnekte ise 10255 numaralı siparişe ait kayıtlardaki Quantity kolonuna ait değerler toplanmıştır. Ancak.12: Sorgu 52: 10255 numaralı siparişten elde edilecek tutarı bulalım. sayesinde farklı kolonlara ait matematiksel işlemler NULL değer içeren kayıtlar da SUM() fonksiyonu tarafından işleme sokulmazlar. Örnek 9.11: Sorgu 51: 10255 numaralı siparişte toplam kaç adet malın sipariş verildiğini bulalım.FROM [Order Details] Bu örnekte Order Details tablosu baştan sona dolaşılmış ve Quantity kolondaki tüm değerler toplanmıştır. Yani toplam fonksiyonlarında hiçbir değer belirtilmezse.2 . önce Quantity ile UnitPrice verileri çarpılarak her bir siparişin tutarı hesaplandı. toplam fonksiyonlarında DISTINCT anahtar sözcüğünü desteklemez. DISTINCT anahtar sözcüğü ise. Bilgi: ALL değeri. Ancak kolon adı belirtilerek COUNT(kolon_adı) şeklinde kullanılabilir. Ve bu alan SUM() fonksiyonu ile toplam tutar elde edildi. Toplam fonksiyonları gerçekleştirilebilir. Sorgu 53: SELECT AVG(DISTINCT UnitPrice) AS tekil_ortalama_deger FROM Products WHERE SupplierID = 15 Burada her bir fiyat değeri sadece bir kere işleme sokulmuştur.

MIN(UnitPrice) AS En_Düşük. SELECT ifadesi ile GROUP BY deyiminin birleşmesiyle oluşur.2 .Verilerin Gruplandırılması Tablolara ait içerikler üzerinde verileri nasıl gruplandırılacağını göreceğiz. ürün sayısını.9. Şimdi ise aynı ifadede birden fazla toplam fonksiyonunun nasıl kullanıldığına bakacağız. . sayımı yapar ve görüntüler. SELECT COUNT(*) AS Ürün_Sayısı FROM Products WHERE SupplierID = 4 Bu örnekte 4 numaralı tedakçiden gelen ürünlerin sayısını aldık. Yani kayıtlar. 10.3 . MAX(UnitPrice) AS En_Yüksek. GROUP BY deyimi ile belirtilen kolon adına göre kayıtlar ayrıştırılır.Veri Gruplama Nedir? SQL toplam fonksiyonları sayesinde verilere ait çeşitli özet bilgileri elde etmeyi öğrendik. GROUP BY ve HAVING deyimlerini kullanacağız. SELECT SupplierID.14: Ürünler tablosunda. Bu durumda SELECT deyiminin yanında.Toplam Fonksiyonlarının Beraber Kullanımı Toplam fonksiyonları ile yaptığımız örnekler bunların birer birer kullanılmasıyla ilgiliydi. en yüksek fiyatı ve ortalama değeri gösterelim. Örnek 10. en düşük. Örnek 9. her bir tedarikçi ve bu tedarikçilere ait ürün sayısı bilgisi listelenmiştir. Peki her bir tedarikçiden gelen ürünlerin sayısını ayrı ayrı olarak öğrenmek istesek ne yapacağız? 10.1: Sorgu 55: 4 kayıt numaralı tedarikçiye ait ürünlerin sayısını öğrenelim. Bu sorgular belirli bir değere ilişkin verileri içermişti. COUNT(*) AS Ürün_Sayısı FROM Products GROUP BY SupplierID Bu sorgunun sonucunda. Sorgu 54: SELECT COUNT(*) AS Ürün_Sayısı. Örnek 10. Şimdi ise verileri belirli bir kritere göre gruplayarak toplam fonksiyonlarını nasıl kullanacağımızı öğreneceğiz.1 .2: Sorgu 56: Her bir tedarikçiden gelen ürünlerin sayısını ayrı ayrı görüntülemek isteyelim. sonra SELECT ifadesinde belirtilen COUNT(*) fonksiyonu. 10 .Grup Oluşturmak Gruplar. GROUP BY ile belirtilen kolon sayısındaki farklı veriler kadar sayıda satır oluşacak ve her bir kayıtta kaç adet ürün bulunduğu da hemen yanındaki kolonda görüntülenecektir. AVG(UnitPrice) AS Ortalama_Deger FROM Products Sorgudan da görüldüğü gibi ürün fiyatlarına ilişkin kolona dört adet toplam fonksiyonu uygulanmıştır.

SELECT ProductID. NULL değeri de bir grup değeri olarak ayrılır. Birden fazla NULL değeri içeren kayıt varsa. SUM(Quantity) AS total_quantity FROM [Order Details] GROUP BY ProductID HAVING SUM(Quantity) > 1200 Sorguda da görüldüğü gibi. müşteri sayısına göre gruplayarak listeleyelim. hepsi bir grupta toparlanır. • GROUP BY deyimi kullanıldığında. Ancak bu durumda WHERE deyimi işe yaramayacaktır. ya geçerli bir kolon adı olmalıdır. Örnek 10. • GROUP BY deyiminin nümerik değer içeren kolonlara uygulanması gereklidir.3: Sorgu 57: Toplam sipariş miktarı 1200 adetten fazla olan ürün kodları listelenmiştir. O zaman her bir kayıtlar üzerinde tek tek değil. sipariş miktarı 1200’den fazla olan ürünleri al. şu bilgileri göz önünde bulundurmalıyız: • İstenildiği kadar sayıda GROUP BY deyimi iç içe kullanılabilir. Peki WHERE deyiminin yerini tutacak olan şey nedir? HAVING yan cümlesidir. WHERE deyimini biliyoruz. Örneğin.GROUP BY deyimini kullanmadan önce.4: 100’den fazla müşteriden sipariş alan çalışanları. Örnek 10. Sorguyu sondan başa doğru okursak.Grup Üzerinde Filtreleme Yapmak GROUP BY ile veri gruplarken hangi verilerin gruba katılacağı veya ayrı tutulacağı da belirtilebilir. COUNT(CustomerID) FROM Orders GROUP BY EmployeeID HAVING COUNT(CustomerID)>100 ORDER BY EmployeeID AS Müşteri_Sayısı Sorguda da görüldüğü gibi. • GROUP BY deyiminde belirtilen ifade.5: Onaltı veya daha fazla sipariş veren müşterileri listeleyelim. gruplar üzerinde filtreleme yapılacaktır. ya da toplam fonksiyonları dışında geçerli bir ifade olması gerekir. ProductID değerine göre grupla gibi bir cümle çıkar. . GROUP BY ve HAVING deyimleri ile de birleştirilmiştir. • GROUP BY deyimi WHERE anahtar sözcüğünden sonra ve ORDER BY deyiminden önce gelmelidir. SELECT ifadesinde kullanılan EmployeeID ve CustomerID alanları. WHERE deyimi ile kullandığımız tüm işlemleri HAVING yan cümlesi ile de kullanabileceğiz. gruplar üzerinde filtreleme yapamayacaktır. • Gruplandırılacak kolonda NULL değer varsa. Sorgu 58: SELECT EmployeeID. toplam fonksiyonu SELECT ifadesinin en son alanında bildirilmelidir. Çünkü WHERE deyimi kayıtlat üzerinde filtreleme yapabilirken. GROUP BY ve HAVING deyimleri ile de birleştirilmiştir.3 . Örnek 10. toplam sipariş miktarı 1200 adetten fazla olan ürün kodlarının görüntülenmesini isteyelim. SELECT ifadesinde kullanılan ProductID ve Quantity alanları. 10.

herhangi bir SQL ifadesine denir.4 SELECT İfadesinin İşlem Sırası Öğrendiğimiz deyimlerin bir arada kullanılmasına ilişkin bir tablo tanımlayalım. WHERE deyimi veri gruplandırılmadan önce filtreleme yapar.Alt Sorgular Bu bölümde alt sorgular ile çalışacağız. COUNT(*) AS Siparişler FROM Orders GROUP BY CustomerID HAVING COUNT(*) >= 16 Örneklerden de görüldüğü gibi.1 Alt Sorgu Nedir? Bu zamana kadar çalıştığımız örnekler sadece bir sorgu üzerinde gelen verileri içeriyordu. WHERE ve HAVING deyimlerinin birlikte kullanıldığı durumlar da olacaktır.1: Deyimlerin Kullanım Sırası 11 .Sorgu 59: SELECT CustomerID. Sorgu 60: SELECT SupplierID. HAVING ise veriyi gruplandırdıktan sonra filtreleme yapar.6: 15 lira ve daha yukarı fiyata sahip ürünleri tedarikçilerine göre gruplandırarak listeleyelim. COUNT(*) AS Ürün_Sayısı FROM Products WHERE UnitPrice >= 15 GROUP BY SupplierID HAVING COUNT(*) >=1 10. . WHERE ve HAVING anahtar sözcükleri arasındaki en büyük fark. Deyim SELECT Açıklama Gereklilik Geri döndürelecek kolon Evet veya ifadeler FROM Veri alınacak tablo Sadece tablodan veri seçimi yapılacağı durumlarda gerekli WHERE Filtreleme Hayır GROUP BY Grup tanımalam Gruplar ile toplam fonksiyonlarının kullanıldığı durumda HAVING Grup filtrelemesinde Hayır ORDER BY Sıralanarak görüntüleme Hayır Tablo 10. Bilgi: Sorgu. 11. Örnek 10.

fiyat ve indirim bilgilerini tutar. siparişi veren müşteriye ve zamana ait bilgileri tutar. 10966 den oluşur. Bu sorgunun sonuç kümesi.1: Sorgu 61: 37 numaralı ürüne ait siparişlerin sipariş numaralarını getirelim. 10523. SELECT OrderID FROM [Order Details] WHERE ProductID = 37 Şimdi ise 61 numaralı sorgunun sonuç kümesindeki her bir eleman için müşteri kimlik numaralarını almamız gerekir. Örneğin 37 numaralı ürünü sipariş veren tüm müşterileri listelemek için neler yapılmalıdır? 1 – 37 numaralı ürünü içeren tüm siparişleri getir. Order ve Order Details tablolarında müşteriye ait kimlik numarasına referans verildi. 4. 2 – Bir önceki adım sonucu gelen kümenin içerisinden müşteri kimlik numaraları alınır. 10337. adedini. Siparişlere ait bilgiler iki tabloda saklanmıştır. bu sorgudan oluşan sonuç kümesi içerisindeki bilgiler ise diğer sorguya veri olarak aktarılır. SELECT CustomerID FROM Orders WHERE OrderID IN(10259. Orders. Müşterilere ilişkin veriler ise Customers tablosunda tutuldu. . tabloları arasında ilişkiler kurulmuş bir veri tabanıdır. 10259. SELECT CustomerID FROM Orders WHERE OrderID IN ( SELECT OrderID FROM [Order Details] WHERE ProductID = 37) Bu sorguda ilk önce içeride bildirdiğimiz sorgu çalıştırılacak. 10408.2 Alt Sorgular ile Filtreleme Kullandığımız Northwind veritabanı. 11. 10847. Order Details tablosu ise bu sipariş içindeki ürünleri. bir sorgu içinda başka bir sorgunun yer alması durumudur. 10337. 10523. Yani önce “SELECT OrderID FROM [Order Details] WHERE ProductID = 37” sorgusu çalıştırılır. Örnek 11. Bu olayları gerçekleştirmek için 2 ayrı sorgu tasarlayabiliriz. Bilgi: MySQL kullanıcıları. 3 – Her bir müşterinin bilgisini bu şekilde al. 10966) verileri gelir. 10966) Peki bu iki ayrı sorguyu birlikte kullanarak daha verimli bir sorgu oluşturmak için ne yapmalıyız? Örnek 11. Alt sorgulara neden ihtiyaç duyulduğu ileriki örneklerde göreceğiz. 10408.Alt sorgu ise.3: Sorgu 63: 37 numaralı ürünü sipariş veren tüm müşterileri listelemek isteyelim. 10337. 10847. Bu sorgu sonucunda (10259.1’den önceki versiyonlar alt sorguları desteklemez. 10847.2: Sorgu 62: 61 numaralı sorgunun sonuç kümesindeki müşterilerin kimlik numaralarını alalım. 10523. Daha sonra ise bu siparişleri veren müşteri numaralarına erişmek için “SELECT CustomerID FROM Orders WHERE OrderID IN ( içteki sorgu sonucu)” sorgusu çalıştırılır. 10408. Örnek 11.

SELECT ad. ucret FROM Personel WHERE ucret> (SELECT avg(ucret) FROM Personel) Örnek : Personel tablosundaki kayıtlara göre en az ücret alan personelin ad ve ücret bilgisini listeleyen SQL sorgusunu yazınız.işe başlama tarihleri ve ücret kayıtlarının tutulduğu bir Personel tablosu üzerinde aşağıdaki sorgular yapılmaktadır.4’e bakalım. SELECT ad FROM Personel WHERE Bolumad= (SELECT bolumad FROM Personel WHERE personelkod=100) Örnek : Personel tablosundaki kayıtlara göre adı ‘Ali’ olan kişilerle aynı bölümde çalışan kişilerin ad’larını listeleyen SQL kodunu yazınız. işyeri ortalama ücretinden yukarıda ücret almakta olan personelin ad’larını listeleyen SQL sorgusunu yazınız. ucret FROM Personel WHERE ucret= (SELECT min(ucret) FROM Personel) Örnek : Personel tablosundaki kayıtlara göre personelkodu 100 olan kişi ile aynı bölümde çalışmakta olan personelin adlarını listeleyen SQL kodunu yazınız.İşleme her zaman en içteki sorgudan başlanır. ad. SELECT ad. Gördüğünüz gibi önce 37 numaralı ürüne ait sipariş numaraları. ve en sonunda ise bu numaralara sahip müşterilerin iletişim bilgileri alınır. bölümkodu. sonra bu numaralı siparişleri veren müşterilerin kayıt numaraları. ContactName FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE OrderID IN (SELECT OrderID FROM [Order Details] WHERE productID = 37)) Bu sorguda iç içe iki sorgu ile sonuca ulaşılmıştır. bölümadı.4: Sorgu 64: 37 numaralı ürünü sipariş veren her bir müşterinin adını ve kontak ismini alalım. Bu sorgular sonucunda müşteri numaralarını elde ettik. Müşteri numarasına göre ayrıntılı bilgi almak için ise Örnek 11. Açıklama : Bir işyerinde çalışmakta olan personelin personelkod. Örnek : Yukarıda oluşturulmuş olan personel tablosuna göre. SELECT ad FROM personel WHERE bolumad IN (SELECT bolumad FROM personel where ad='ali') AND ad<>'ali' . Örnek 11. SELECT CompanyName.

Orders tablosunda verilen siparişler hesaplanır Biliyoruz ki bir tablodaki kayıtları saymak için SELECT COUNT(*) deyimi kullanılır.Her bir müşteri için. . WHERE yan cümlesi ile her bir müşteri numarası için sipariş bilgilerini ulaşılır. Sorgu 66: SELECT CompanyName.3 Alt Sorguları Hesaplanmış Alanlar Olarak Kullanmak Alt sorguları kullanmanın bir diğer yolu ise.CustomerID) AS Toplam_Siparisler FROM Customers ORDER BY CompanyName Daha önce kullanmadığımız bir biçimde sorgu kalıbı kullandık.Customers tablosundan müşterilerin listesi gelir 2. Bu kolonu oluşturmak için bir iç sorgu yapıyoruz. Olayı şöyle canlandıralım: CompanyName.Örnek : Personel tablosundaki kayıtlara göre personel kodu 105 olan kişinin ücretinden daha fazla ücret alan kişilerin ad’larını listeleyen SQL kodunu yazınız.CustomerID = Customers. Örnek 11. Customers tablosunda her bir müşterinin verdiği toplam sipariş miktarını görüntülemek isteyelim. hesaplanmış alanlar içinde alt sorgulara yer vermektir. Bu işlemi gerçekleştirmek için şu adımları gerçekleştirmeliyiz: 1. Biz bu sorguyu her bir müşteri için elde etmek istesek ne yapmamız gerekir? İşte burada işimiz biraz daha karmaşıklaşacak. Country alalarının yanında bir de bu şirketlerden gelen toplam sipariş sayısını öğrenmek istiyoruz. (SELECT COUNT(*) FROM ORDERS WHERE Orders. Ancak görüyoruz ki bu sorgu sadece CACTU kodlu müşteriye ait siparişleri listeler. Örneğin. SELECT ad FROM personel WHERE ucret> (SELECT ucret FROM Personel WHERE personelkod=105) 11. SELECT COUNT(*) sorgusunu alt sorgu olarak kullanmamız gerekecek.5: Her bir müşteri tarafından verilen sipariş miktarını görüntüleyen sorgu oluşturalım. Örneğin kodu ‘CACTU’ olan müşteriye ait siparişleri listelemek için Sorgu 65: SELECT COUNT(*) AS Toplam_Siparis FROM Orders WHERE CustomerID = 'CACTU' sorgusu kullanılır. Biliyoruz ki siparişlerin hepsi Orders tablosunda tutulur ve OrderID anahtar değeri ile ulaşılır. Country.

tedarikçi bilgisi gibi verileri de bulundurmamız gerekir. parçalanabilecek en küçük parçalara ayrıştırılacak.1 Tablolar Arası Veri Birleştirme Nedir? SQL’in en güzel ve en güçlü yönlerinden biri.CustomerID ifadesi kullanılmasaydı bu işlem gerçekleşmezdi. her bir şirket için verilen sipariş sayısını hesaplar. 12. Peki nasıl? Dikkat ettiyseniz WHERE yan cümlesinden sonra Orders ve Customers tablolarının CustomerID alanları birbirlerine bağlanmış. SELECT CompanyName. Örneğin veri tabanımızda ürün kataloğu içeren bir veri tablomuz var. Burada pek çok şeye dikkat etmemiz gerekecek.SupplierID = Products.CustomerID = Customers. Aslında verinin nasıl birleştirileceğinden önce ilişkisel tablolar üzerinde biraz bilgi tazelemesi yapmak gerekiyor.2 Tablolar Arası Veri Nasıl Birleştirilir (Join)? Aslında join işlemi oldukça basittir. İşte bu gibi durumlarda veriler.1: Sorgu 67: Ürünlerimize ait tedarikçi firma adı. Hangi tablonun tekil anahtar değeri (primary key) ile hangi tablonun foreign key değerlerinin birleştirilmesi gerektiği bilgileri iyice belirlenmelidir. Peki. Suppliers tablosundan CompanyName.(SELECT COUNT(*) FROM Orders WHERE Orders. ve Products tablosundan ProductName. 12. Suppliers tablolarını ele alırsak. yani ilişkilendirilmiş. ProductName. ve bu tablolar birbirleriyle ilişkilendirilecektir. Burada en önemli olay. aynı tedarikçiye ait ürünlerimiz varsa ne olacak? Tedarikçi bilgilerini nerede tutacağız? Tabiki her bir ürün için tek tek bu bilgileri girmemiz gereksiz olacak. her bir tedarikçiye bir tekil kimlik numarası (ID) verilecek ve Products tablosunda ise her bir ürünün tedarikçi alanına ise tedarikçi adı değil. tablolara bölüştürülecek. Eğer burada Orders. . Suppliers tablosundaki SupplierID tekil anahtar (primary key) ve Products tablosundaki SupplierID ise foreign key vazifesindedir. ürün adı ve fiyatını görüntüleyelim.CustomerID AS Toplam_Siparisler) İşte bu sorgu. Örnek 12. Her bir katalog ürünü ise kendi sırasında yer almakta. Her bir ürüne ait tanımlama. Bu örneğimizde Products. UnitPrice alanlarının getirildiğini görürüz. fiyat. sorguların çalıştırıldığı zaman birden fazla tabloya ait verilerin bir sonuç kümesi içinde görüntülenebilmesidir. bu iki tablonun SupplierID alanları ile birleştirilebiliyor olmasıdır. Products WHERE Suppliers. UnitPrice FROM Suppliers. kimlik numarası girilecektir. Veri getirilecek tüm tabloların isimleri ve bu tabloların hangi alanlar vasıtasıyla birleştirileceği bilgisi belirtilmelidir.CustomerID = Customers.SupplierID Sonuç kümesini incelersek. 12 – Tabloları Birleştirme Bu bölümde tabloları birleştirerek yep yeni sorgular oluşturacağız.

Yani iki tablo arasında eşitliğin test edilmesi ile oluşturulan join.CompanyName. ProductName. Products Bu sonuç kümesi oldukça kalabalık değil mi? Sebebi ise. İşte bu gereksiz eşleşmeleri önlemek için WHERE yan cümlesinden sonra Suppliers.SupplierID İşte tablolar arasındaki ilişkiler için INNER JOIN anahtar sözcüğünü kullanmamız daha yararlı olacaktır. Örnek 12. Suppliers tablosundaki kayıtlar ile Products tablosundaki kayıtların kartezyen çarpılmasıdır.SupplierID = Products. ürün adı ve fiyatını görüntüleyelim.2: Sorgu 70: Ürünlerimize ait tedarikçi firma adı. unutulursa istenilenden fazla sayıda sonuç görüntüler. aynı kolon adına sahip olabilecek tablolarda sorun çıkmasını engelleriz. iki tablo arasındaki ilişkiyi belirtmek için tekil anahtar olan değeri tablo adı ile birleştirip. UnitPrice FROM Suppliers INNER JOIN Products ON Suppliers. Aslında bu sorguyu şu şekilde yeniden yazarsak. Sorgu 68: SELECT Suppliers. Tekrar belirtmeliyiz ki. SELECT CompanyName. sorgu çalıştığı zaman kurulur ve görüntülenir.4 INNER JOIN Bir önceki konuda iki tablo arasında kurduğumuz birleştirme ilişkisine “equijoin” denir. Products.SELECT anahtar sözcüğü ve WHERE yan cümlesini iki farklı tablodan veri alıp birleştirmek için kullandık. UnitPrice FROM Suppliers.SupplierID = Products.UnitPrice FROM Suppliers.SupplierID = Products. WHERE yan cümlesinden sonra belirtilen tablolar arası ilişki ifadesi.SupplierID ifadesi kullanılır. foreign key olarak kullanılacak alanı bu tablo adı ile birleştiririz. Products. Şimdi biraz daha farklı bir sentaks kullanacağız. ProductName. Products WHERE Suppliers. Products tablosundaki tüm kayıtlarla birer birer eşleşir.ProductName. Yani sonuç kümesindeki eleman sayısı (Suppliers tablosundaki kayıt sayısı) * (Products tablosundaki kayıt sayısı) na eşittir. 12.SupplierID 12. SELECT ifadesinde belirtilen ilişkiler. WHERE yan cümlesinden sonra bu tablolar arasında ilişki kuracak alanın belirtilmesidir. İlişkili tablolardan veri almak için gerekli olan. Sorgu 69: SELECT CompanyName. Yani Suppliers tablosundaki bir kayıt.3 WHERE Yan Cümlesinin Önemi İki tablo arasındaki ilişkiyi belirtmek için WHERE yan cümlesini kullanıyor olmamız ilk başta biraz tuhaf gelebilir. .

Sorguyu incelersek. Bu iki alan arasında ON anahtar sözcüğü kullanılır. Aynı şekilde Suppliers tablosundan CompanyName bilgisi alınır.3: Sorgu 71: 10274 numaralı siparişe ait ayrıntılı bilgi almak istiyoruz.SupplierID = Suppliers.Quantity FROM [Order Details]. Products. cümleyi okumaya en sondan başlamalıyız.SupplierID AND [Order Details].SupplierID = Products. [Order Details]. hangi tablodan hangi tabloya ilişki kurulacağı FROM anahtar sözcüğünden sonra belirtilir. Örnek 12.UnitPrice. Aslında bu sorgu.4: Sorgu 72: 9 numaralı ürünü sipariş veren müşterilere ait ayrıntılı bilgi almak istiyoruz. öncelikle tüm tablolar listelenir ve sonra birbirleri arasındaki ilişki tanımlanır. Suppliers WHERE Products. Bu kayıt üzerinden UnitPrice ve Quantity bilgisinin yanında Products tablosuna ulaşılır ve ProductName bilgisi alınır. Products tablosunda ise ürünün hangi tedarikçiye ait olduğu bilgisi yine SupplierID alanında tutuluyordu (foreign key). çoklu tablolarda o kadar da kolay olmayacaktır.SupplierID Burada kullanılan INNER JOIN ve ON anahtar sözcükleri. INNER JOIN Products ON Suppliers. Hatırlayacağınız gibi Suppliers tablosunda her bir tedarikçiye verilen numaralar SupplierID alanında tutuluyordu (primary key).İlişkinin yönü belirtildiği için bu tarz kullanım önerilmektedir. SELECT Products. daha önce kullandığımız WHERE Suppliers.ProductName. Örnek 12.5 Çoklu Tabloları JOIN ile Birleştirmek SELECT ifadesi içerisinde istenildiği kadar tablo arasında ilişki kurulabilir. ContactName FROM Customers WHERE CustomerID IN (SELECT CustomerID FROM Orders WHERE OrderID IN (SELECT OrderID FROM [Order Details] WHERE ProductID = 9)) Sonuca ulaşmak için hangi yolun kullanılacağı tamamen sizin deneyimlerinize dayanmaktadır. Sorgu 73 bu sonucu farklı yöntemle görüntüler. Sorgu 73: .[Order Details]. Olay aslında o kadar da karmaşık değildir. 12.CompanyName.SupplierID ile oluşturulan ilişki yerine kullanılır. Suppliers. Önemli olan doğru veriye ulaşmak. alt sorgular kullanılarak da çalıştırılabilirdi.ProductID AND OrderID = 10274 Unutmayalım ki sorguyu incelemek istiyorsak. Order Details tablosundan 10274 numaralı sipariş ele alınır. İki tablo arasında ilişki kurmak için WHERE geçerli olsa da. Bu sorguda. Yapılması gereken. SELECT CompanyName.ProductID = Products. SQL bunun için bir sınır belirlememiştir.SupplierID = Products.

birbirlerini de çağırabildikleri için iç içe veya peşpeşe de birden fazla stored procedureler çalıştırılabilir.farukcubukcu.com 2.SQL Server 2005 ve Veritabanı Programlama – Yaşar GÖZÜDELİ 5.CustomerID AND [Order Details].OrderID = Orders. SQL Server veritabanı içerisinde defalarca kullanılan ve farklı işlemler yapmak için kullanılan bir çok SQL koduna erişip kullanımını kolaylaştırmak ve hızlandırmak amaçlı olarak sunulan bir nesne türüdür.com 4. Programlama dillerindeki fonksiyon ve procedureler gibi düşünülebilir.www.Veri Tabanı Sistemleri – Dr. Oluşturulan stored procedureler. [Order Details] WHERE Customers.www. bir kere derlenip çalıştırıldıktan sonraki diğer çağırımlarda daha hızlı çalışırlar ve gerektiğinde direkt olarak ismi verilerek çalıştırılabilir ve hatta duruma göre kullanıcının göndereceği parametrelere göre farklı değerler üzerinden de çalıştırılabilir.SELECT CompanyName.com .SQL Server 2000 Books Online / Help 3.OrderID AND ProductID = 9 STORED PROCEDURE’LER Stored Procedure’ler. ContactName FROM Customers. Stored procedurler.www.sqlcourse. Orders. Yalçın ÖZKAN 6. KAYNAKLAR : 1.devguru.CustomerID = Orders.