Like Joker Karakterler, Order By, Group By

Like joker karakterler, order by, group by

Karakter Türü Bilgi İçinde Arama Yapma (Like Sözcüğü)

            Personel tablosu içinde adres adlı 50 karakter uzunluğunda bir alanımız olsun. Adres bilgisinin aşağıdaki şekilde verildiğini varsayalım:

            Cumhuriyet Cad. 46/9 Taksim/İSTANBUL

            Burada, adres içinde, semtinde belirtildiğini ve bunun ayrı bir sütun (alan) olmadığına dikkat çekelim. Şimdi belirli bir semtte ikamet eden personeli listelemek istersek, semt adını, adres alanı içinde aramak gerekecektir. Bu işlemi gerçekleştirmek için SQL’de LIKE sözcüğü kullanılır. Aşağıdaki SELECT komutunu inceleyelim:

               

SELECT *
FROM Personel
WHERE adres LIKE
‘%Taksim%’;

 

Bu komut ile “Taksim” semtinde ikamet eden personel listelenmek istenmektedir. Bu komut gerçektende “Taksim” de oturan kişileri listeleyecektir. Ama bu arada

            “Taksim Caddesi 22-7 Kadıköy - İST”

şeklindeki adresleri de listeleyecektir.

            adres LIKE ‘%Taksim%’

ifadesi, adres içinde Taksim’i arayacaktır. Adres içinde, herhangi bir yerde, bulduğu takdirde, bu satırı (bu kayıt, personeli) listeleyecektir.

            % sembolü, Taksim sözcüğünün öncesi ve sonrasındaki karakterler ne olursa olsun anlamındadır.

            LIKE sözcüğünü, alt çizgi ( _ ) sembolü ile birlikte kullanmak da mümkündür.

 

ÖRNEK:           

SELECT *

FROM Personel

WHERE ad LIKE 
‘Mehmet----’;

 

şeklindeki komut ile ad alanı “Mehmet” ile başlayan ve ad alanı uzunluğu 10 karakter olan isimlere sahip personeli listeleyecektir. ”Mehmet Ali”, “Mehmet Can”, “Mehmetcik” gibi isimler listelenecektir. Anlaşılacağı gibi - sembolü, tek karakterlik bir bilgiyi temsil etmektedir.

Joker Karakterler

%: Birden fazla harf veya rakamın yerini tutar.

*: Bazı sistemlerde, birden fazla harf ve rakam yerini tutar.

_: Bir tek harf veya rakam yerini tutar (Bir çok sistemde)

?: Bir tek harf veya rakam yerini tutar (Bazı diğer sistemlerde)

[ABC]: Herhangi bir harf yerine gelebilecek harfleri belirtir.(SQLServer,Sybase)

[^ABC]: Herhangi bir harf yerine gelemeyecek harfleri belirtir.(SQL Server, Sybase)

 

Tablo Bilgilerinin Sıralanmış Olarak Listelenmesi

            Tablodan listelenecek bilgilerin, belirli bir sütun adına göre (ad’a göre v.b.) sıralanmış olarak görüntülenmesi için, SELECT komutuna ORDER BY sözcüğü ilave edilir.

 

ÖRNEK: Personel isimli bir tabloda sicil, ad, soyad, maas sütunları olsun. Maaşa göre artan sırada (küçükten büyüğe doğru) sıralı olarak listeleyiniz.

 

sicil

ad

soyad

maas

2746

Ali

Can

7800000

1728

Ayşe

Şener

5600000

1116

Mert

Okan

8950000

1022

Melih

Berkan

7500000

...

...

...

...

...

...

...

...

               

SELECT sicil,ad,soyad,maas

FROM Personel

ORDER BY maas ASC;

 

SONUÇ:

sicil

ad

soyad

maas

1728

Ayşe

Şener

5600000

1022

Melih

Berkan

7500000

2746

Ali

Can

7800000

1116

Mert

Okan

8950000

...

...

...

...

...

...

...

...

               

ASC sözcüğü ascending (artan) anlamındadır. Veriler azalan sırada (büyükten küçüğe ya da alfabetik olarak Z’den A’ya doğru) sıralamak için ASC yerine DESC (descending) sözcüğü kullanılmalıdır.

Birden Çok Alana Göre Sıralama

            Bir tablo içinde verilerin aynı anda birden çok sütun (alana) göre sıralamakta mümkündür. Örneğin Personel tablosunu ad ve maas alanlarına göre sıralamak isteyelim.

 

SELECT sicil,ad,soyad,maas

FROM Personel

ORDER BY ad,brüt;

 

Burada tablo öncelikle ad’a göre artan sırada (A’dan Z’ye doğru) sıralanacak, sadece aynı ad’a sahip olanlar kendi aralarında maas’a göre küçükten büyüğe (artan) sıralanacaktır.

 

sicil

ad

soyad

maas

1215

Ali

Can

2000000

3712

Ali

Okan

6000000

1152

Ali

Mert

8000000

3712

Birol

Akın

4000000

8145

Birol

Çelen

8500000

1248

Birol

Okur

11000000

...

...

...

...

Şekil 2.1 Ad ve Maaş’a Göre Sıralama.

 

Burada, çok sayıda alana göre sıralama, farklı sıralama kriterlerine göre gerçekleştirilebilir. Örneğin aşağıdaki SELECT komutu ile ad alanına göre artan, soyad alanına göre azalan, maas alanına göre artan sıralanmış tablo elde edilmektedir.

 

SELECT sicil,ad,soyad,maas

FROM Personel

ORDER BY ad ASC,soyad DESC,maas ASC;

 

veya aynı komut için alternatif yazılış:

SELECT sicil,ad,soyad,maas


FROM Personel
ORDER BY ad,soyad DESC,maas;

 

şeklinde olacaktır. Örnek çıktı aşağıdaki gibidir.

 

sicil

ad

soyad

maas

2742

Ahmet

Kaner

8000000

1712

Ahmet

Kaner

16000000

3112

Ahmet

Berk

17000000

2712

Melih

Caner

12000000

1317

Melih

Berat

18000000

2718

Zerhan

Şen

7000000

Şekil 2.2 Ad’a Göre Artan, Soyad’a Göre Azalan, Maaş’a Göre Artan Sıralama.

 

3.3 Gruplandırarak İşlem Yapma

            SUM, AVG, MAX, MIN, COUNT fonksiyonları, tablodaki bilgileri, bazı özelliklere göre gruplandırarak bu gruplandırılmış veri üzerine de uygulamak mümkündür. Bu işlem, GROUP BY sözcükleri yardımı ile gerçekleştirilebilir. Örneğin, aşağıdaki soru bu konuda bir fikir verecektir:

           

SORU: Her bölümdeki ortalama maaş nedir?

Burada istene, bölümler bazında ortalama maaş olduğuna göre, personel tablosundaki satırlar, bölüm numaralarına göre (bol_no) gruplandırarak, her bir grubun maaş ortalaması ayrı ayrı hesaplanarak listelenebilir. Aşağıdaki SELECT komutu bu işlemi gerçekleştirmektedir.

           SELECT bol_no,AVG(maas)

            FROM Personel

            GROUP BY bol_no;

 

SONUÇ:

                                bol_no                         AVG(maas)

                                -------------               ---------------

                                  1                                  2500000

                                  2                                  6800000     

   3                                  7400000

4                                   12500000   

 

Her bölümdeki en yüksek maaşı alan kişiler listelenmek istenirse, aşağıdaki

komut kullanılabilir:

 

SELECT bol_no,MAX(maas),ad,soyad

FROM Personel

GROUP BY bol_no;

 

Personel tablosundaki bilgiler

maas

ad

soyad

bol_no

5000000

Ali

Can

1

3000000

Ayşe

Okan

1

8000000

Akın

Oran

2

10000000

Yeşim

Şensoy

2

 

şeklinde ise, yukarıdaki SELECT komutunun çıktısı;

 

bol_no

Max_maas

ad

soyad

1

5000000

Ali

Can

2

10000000

Yeşim

Şensoy

 

şeklinde olacaktır.

Gruplandırarak, kümeleme fonksiyonlarını uygularken, koşul da verilebilir. Bu durumda, grup üzerindeki hesaplamalarla ilişkili koşul belirtirken, HAVING sözcüğü kullanmak gerekir. Aşağıdaki örnek soru, bu konuda fikir vermektedir.

 

SORU: En yüksek maaşın, 9000000’dan fazla olduğu bölümlerdeki personele ait ortalama maaşları listeleyiniz.

ÇÖZÜM:     

SELECT bol_no,AVG(maas)

FROM Personel

GROUP BY bol_no

HAVING AVG(maas)>9000000;

 

Personel tablosunda aşağıdaki veri mevcut olsun:

 

..........

bol_no

.........

maas

 

1

 

6000000

 

1

 

17000000

 

2

 

7500000

 

2

 

8000000

 

3

 

12000000

 

3

 

11000000

 

1

 

14000000

 

1

 

18000000

 

Yukarıdaki SELECT komutu sonucunda

 

bol_no

AVG_maas

1

13750000

3

11500000

 

tablosu elde edilecektir.

HAVING sözcüğü, SELECT komutunda GROUP BY sözcükleri bulunmadığı zaman, geçersizdir. HAVING sözcüğünü izleyen ifade içinde, SUM, COUNT (*), AVG, MAX ya da MIN gibi kümeleme fonksiyonlarından en az biri bulunmalıdır.

            WHERE sözcüğü bir tablonun tek tek satırları üzerinde işlem yapan koşullar için geçerli iken, HAVING sözcüğü sadece, gruplanmış veriler üzerindeki işlemlerde geçerlidir.

            Bazı durumlarda, HAVING ve WHERE sözcükleri birlikte, SELECT komutu içinde kullanılabilir.

           

SORU: Personel tablosu içinde, her bölümde, erkek personele ait maaşlar için, ortalamanın 9000000’den fazla olduğu bölümleri listeleyiniz.

ÇÖZÜM:       

SELECT bol_no,AVG(maas)

FROM Personel

WHERE cinsiyet=.T.

GROUP BY bol_no

HAVING AVG(maas)>9000000;

 

Personel tablosunda aşağıdaki bilgiler olsun:

........

bol_no

maas

cinsiyet

.........

 

1

6000000

.T.

 

 

1

17000000

.F.

 

 

2

7500000

.F.

 

 

2

8000000

.F.

 

 

3

12000000

.T.

 

 

3

11000000

.F.

 

 

1

14000000

.T.

 

 

1

18000000

.T.

 

 

Yukarıdaki uygulanan SELECT komutu, her bölümdeki erkek personele ait ortalama maaşı hesaplayacak (erkek personel .T. ile belirtilmiştir) ve erkek personel maaş ortalaması, 9000000’den olan bölümler listelenecektir. Komutun çıktısı, aşağıdaki gibidir.

 

bol_no

AVG_maas

1

12666666.67

3

12000000

Yorumunuzu Ekleyin

Temel Sql Komutları
Yükleniyor...