Sql Notlarım

CoveRed

Kıdemli Üye
9 Eki 2008
2,451
7
!!! TANRI DAĞLARı !!!
SQL Hakkında Ders Bilgileri (Oldukça geniş kapsamlı ve örnekler ile açıklanmış.
SQL (Structured Query Language) kendisi bir programlama dili olmamasına rağmen bir çok kişi tarafından programlama dili olarak bilinir. SQL herhangi bir veri tabanı ortamında kullanılan bir alt dildir. (sub language) SQL ile yalnızca veri tabanı üzerinde işlem yapabiliriz. SQL cümlecikleri kullanarak veri tabanına kayıt ekleyebilir, olan kayıtları değiştirebilir, silebilir ve bu kayıtlardan listeler oluşturabiliriz. SQL cümlecikleri genellikle aynı olmakla birlikte farklı veri tabanı ortamlarında değişebilmektedir. Ayrıca veri tabanlarının kendilerine özgü sql komutlarıda vardır. Biz burada her ortamda geçerli olan temel sql komutları işleyeceğiz.Şimdi örnekler kullanacağımız bir database tanımlayalım.
Tablo adı : personel
Kolon : sicil_no:text (8)
Kolon : ad:text (8)
Kolon : soyad:text (8)
Kolon : dogum_tarihi:date
Kolon : dogum_yeri:text (8)
Kolon : cinsiyeti:text(1)
Kolon : medeni_hali:binary
Kolon : meslek_id:smallint
Kolon : egitim_durumu:binary
Kolon : adres:text (50)
Tablo adı : ucretler
Kolon : per_sicil_no:text (8)
Kolon : baslama_tarihi:date
Kolon : aylık_ucret:numeric
Kolon : aile_yardimi:numeric
Kolon : egitim_yardimi:numeric
Kolon : kesinti:numeric:
Tablo adı : meslekler
Kolon : meslek_id:smallint
Kolon : aciklama:text (23)
Kolon : taban_ücret:numeric

FROM
İlk önce bu komut ile başlayalım. Bu komut bütün SQL cümleciklerinde bulunması gerekli bir komuttur.Bu komut ile hangi tablolar üzerinde çalışacağımızı veri tabanına söylüyoruz. Eğer aynı sql cümleciği ile bir kaç tablo üzerinde işlem yapmak istersek tablo isimleri arasına virgül koymalıyız. Aşağıdaki örnekleri SELECT komutundan sonra açıklayacağız.

Örnek 1 :
SELECT * FROM personel;

Örnek 2 :
SELECT * FROM personel,ucretler;

SELECT
Bu komut ile database üzerindeki tablonun hangi kolonları alacağımız veritabanına söyleriz.Tablonun bütün kolonlarını görmek istiyorsak '*' karekterini kullanırız. Sadece belli kolonları görmek istiyorsak kolon isimlerini aralarına virgül koyarak yanyana yazmalıyız.Yukarıdaki örnekleri açıklayacak olursak birinci örnek personel tablosundaki bütün kayıtları getirecektir. İkinci örnekte ise personel ve ücretler tablosundaki bütün kayıtlar çekilecektir.

Örnek 3 :
SELECT * FROM meslekler ;

Bütün meslek bilgilerini almak istersek yukarıdaki gibi bir query yazmalıyız.

Örnek 4 :
SELECT ad,soyad FROM personel;

Bu query ise bize firmamızda çalışan bütün personeli listeler.

ORDER BY ... ASC/DESC
Bu komut ile belirtilen kolona göre artan veya azalan bir sıralama ile sorgulama yapabiliriz.

ASC : kullanarak küçükten büyüğe doğru artan sıralama yapabiliriz.
DESC : kullanarak büyükten küçüğe doğru azalan sıralama yapabiliriz.

Ancak ASC kullanmak zorunlu değildir. Çünkü default sıralama tipi ASC'dir. Aynı anda birkaç kolon üzerinden de sıralama yapabiliriz.
Örnek 1 :
SELECT * FROM personel ORDER BY ad ASC;

Bu query ile personel tablosundaki bütün kayıtları ad'a göre küçükten büyüğe dogru sıralarız.

Örnek 2 :
SELECT * FROM personel ORDER BY soyad DESC;

Bu query da yukarıdakinin tersine kayıtları büyükten küçüğe dogru sıralar.

Örnek 3 :
SELECT * FROM personel ORDER BY ad,soyad;

Bu query kayıları ad göre artan bir sıralama yapar. Ancak aynı ad ile yaratılmış birden fazla kayıt varsa ise bunlarıda soyad sırasına göre artan bir şekilde sıralar. Eğer her iki kolnda aynı ise o zaman okuduğu sırada sıralar.

Örnek 4 :
SELECT * FROM personel ORDER BY dogum_tarihi DESC,ad,soyad ;

Bu query'de ise pernel kayıtları büyükten küçüğe doğru sıralanıyor. Yani en genç eleman'dan başlanarak en yaşlı elemana doğru bir liste yapılıyor. Doğum tarihleri aynı olanlarda ise ad ve soyad'a göre bir sıralama yapılmaktadır.

WHERE
Yukarıda yaptığımız sorgulamaların hepsinde hiç bir koşul belirtmedik.Yani bütün kayıtları tablolardan çektik. Ancak gerçek hayat'ta bu kayıtların sadece bir kısmına ihtiyaç duyarız.Bize gerekli olan dataları diğerlerinden ayıran bazı özellikleri vardır. İşte bu özellikleri bu komut yardımı ile kullanarak gerekli datalara ulaşabiliriz.

Örnek 5 : Adı ahmet olan personeli listelemek istersek ne yapacağız.Aşagıdaki gibi bir sorgulama yapacağız.

SELECT * FROM personel WHERE ad='ahmet';

Örnek 6 : Yaşı 40'dan büyük personeli listeleme istersek;
SELECT * FROM personel WHERE dogum_tarihi < '01.01.1959'

sorgulamasını kullanmalıyız.Elemanın 40 yaşında büyük olması için 1959 yılından önce doğmuş olması gerekmektedir. O halde dogum_tarihi 1959 yılından küçük olmalıdır.

Örnek 7 : Adana'da doğmuş personeli listelemek istersek
SELECT * FROM personel WHERE dogum_yeri = 'Adana'

Örnek 8 : 300 milyondan fazla maaş alan kişileri işe maaşa göre sıralamak istersek;

SELECT * FROM ucretler WHERE aylik_ucret >= 300000000 ORDER BY aylik_ucret;

SQL OPERATORLER VE TABLOLAR ÜZERİNDE İŞLEMLER
Her programlama dilinde olduğu gibi SQL'de de operatörler bulunur. Üç çeşit operatör mevcuttur. Karşılaştırma oparatörleri , mantıksal operatörler ve kümeleme operatörleri.Bu karşılaştırma operatörleri aşağıdaki gibidir ;
operatör anlamı
a>X ... X... a'dan küçük
a<X ... X... a'dan büyük
a=X ... X... a'ya eşit
a=>X ... X... a'dan küçük eşit
a<=X ... X... a'dan büyük eşit
a<>X ... X... a'ya eşit değil
Mantıksal operatörler ise AND,OR,NOT olarak verilebilir. Bu operatörler burada anlatmayacağız. Bunlar standart bütün dillerde aynı olan operatörlerdir.Kümeleme operatörleri ise datalar üzerinde gruplama yapmamızı sağlayan operatörlerdir.Bu operatörler Between , In , Like operatörleridir. Bu operatörlerin hepsini where ile birlikte kullanmalıyız.

BETWEEN
Aralıklı sorgulama yapmak istersek kullanabilecegimiz bir operatördür.

Örnek 1 :
SELECT * FROM ucretler WHERE aylik_ucret BETWEEN 200000000 AND 300000000

Bu cümlecik ile 200 ile 300 milyon arasında maaş alanlar listelenecektir.

Örnek 2 :
SELECT *
FROM fat_bsl
WHERE ft_tar BETWEEN '01.01.1998' AND '04.06.1999'

Bu sorgulamada ise fatura tarihi 01.01.1998 ve 04.06.1999 tarihleri arasındaki faturalar listelenmiştir.Verilen tarih formatının sistemde kullanılan tarih formatı ile aynı olmasına dikkat edilmelidir. Yoksa sizin verdiğiniz tarih doğru olsa bile format farklı ise sorgulamanız geriye data döndürmez.

IN
Bu komut ile belli bir kolonun kümesini vererek işlemimizi daha kolay bir şekilde yapabiliriz.

Örnek 3 :
SELECT * FROM personel WHERE meslek_id IN (1,2,3)

Buradaki örnek 'te 1,2 veya 3 meslek grubundan herhangi birine dahil olan personel listelenemektedir.Bu örnek aşagıdaki şekildeki gibide yapabiliriz;

SELECT * FROM personel
WHERE meslek_id=1 OR meslek_id=2 OR meslek_id=3

devam edecekk
 

CoveRed

Kıdemli Üye
9 Eki 2008
2,451
7
!!! TANRI DAĞLARı !!!
LIKE
Bu ise içinde belli bir karakter dizisi bulunan datalara ulaşmak istersek kullanabileceğimiz bir operatördür.

Örnek 4 :
SELECT * FROM personel WHERE adres LIKE '%İstanbul%'

Bu sorgulama ile adres alanında İstanbul geçen kayıtları listelemiş oluruz.

Örnek 5 :
SELECT * FROM personel WHERE adres LIKE '%İstanbul'

Bu sorgulama ile adres alanının sonunda İstanbul geçen kayıtları listelemiş oluruz.

Örnek 6 :
SELECT * FROM personel WHERE adres LIKE 'İstanbul%'

Bu sorgulama ile adres alanının başında İstanbul geçen kayıtları listelemiş oluruz.

Tablolar Üzerinde İşlem Yapma
Genellikle veri tabanı kayıtları oluştururken bütün bilgileri bir tabloda değilde birkaç tablo üzerinde tutarız.Bu dataların hem daha
düzenli durmasını hemde gereksiz veri tekrarlarını engellemiş olur.Şimdi farklı tablolara bölünmüş datalar üzerinde işlem yapmamız gerekirse ne yapmamız gerekir.Aslında fazla bir şey yapmamız gerekmez.Tek yapacağımız hangi tabloları kullanacaksak bunları from cümleceğinde belirtmemizdir.Tabloları belirtirken aralarıda , koymayı unutmazsak o zaman sorun yok.

Örnek 1 : Hangi personelin ne kadar maaş aldığını listelemek istersek;

SELECT ad,soyad,aylik_ucret
FROM personel,ucretler
WHERE sicil_no=per_sicil_no

Örnek 2 : İstanbul'da yaşayan Adana doğumlu personelin maaşlarını listelemek istersek;

SELECT ad,soyad,aylik_ucret
FROM personel,ucretler
WHERE sicil_no=per_sicil_no AND adres LIKE '%İstanbul%' AND
dogum_yeri = 'Adana'

Örnek 3 : 300 milyondan fazla maaş alan ve 2 nolu meslek grubuna ait personeli listelemek istersek;

SELECT ad,soyad,aylik_ucret
FROM personel,ucretler
WHERE sicil_no=per_sicil_no AND aylik_ucret>300000000 AND meslek_id=2

Örnek 4 : Muhasebe meslek grubuna ait personel listesi;

SELECT ad,soyad
FROM personel,meslekler
WHERE meslek_id=meslek_id AND meslek_aciklama='Muhasebe'

Şimdi buradaki sorgulamımızda bir karışıklık söz konusu olacak.İki tane aynı isimde meslek_id oldu.Bunu şu şekilde engelleyebiliriz.
Tablolarda aynı isimde iki kolon varsa bu kolanları kullanırken başlarıda tablo ismini getiririz araya bir nokta koyarak kolon adını yazarız.

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama='Muhasebe'

Örnek 5 : Şirketimizde 30 yıldır çalışan ve 200 milyon altında maaş alan personeli ödüllendirecegiz.
Bunun için nasıl bir sorgulama yapmalıyız.

SELECT ad,soyad
FROM personel,ucretler
WHERE sicil_no=per_sicil_no AND baslama_tarihi < '01.01.1969'
AND aylik_ucret < 200000000

Örnek 6 : 22 yaşından büyük bilgi işlemde çalışan bayan personeli listelemek istersek
(NOT : cinsiyet= 0 : bayan 1 : erkek
medeni_hal= 0 : bekar 1 : evli )

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama='Bilgi İşlem' AND cinsiyet=0
AND dogum_tarihi < '01.01.1977'

Örnek 7 : 40 yaşından küçük ,bilgi işlem veya muhasebe bölümünde çalışan,erkek,200 milyondan
fazla maaş alan ,Ankara doğumlu ,Sarıyer'de oturan,10 yıldan fazla şirkette çalışan , bekar
,10 milyondan fazla kesinti yapılan personeli listelemek istersek;

SELECT ad,soyad
FROM personel,meslekler,ucretler
WHERE dogum_tarihi > '01.01.1959'
AND personel.meslek_id=meslekler.meslek_id
AND (meslek_aciklama='Bilgi İşlem' OR meslek_aciklama='Muhasebe')
AND cinsiyet=1
AND sicil_no=per_sicil_no AND aylik_ucret > 200000000
AND dogum_yeri='Ankara'
AND adres LIKE '%Sarıyer%'
AND baslama_tarihi > '01.01.1989'
AND medeni_hal=0
AND kesinti>10000000

Örnek 8 : Muhasebe ve Pazarlama bölümü dışında çalışan personeli listelemek istersek;

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama<>'Pazarlama' AND meslek_aciklama<>'Muhasebe'

Örnek 9 : 40 yaşları arasında İzmir veya Bursa doğumlu adayları listelemek istersek;

SELECT ad,soyad
FROM personel
WHERE dogum_tarihi BETWEEN '01.01.1959' AND '01.01.1969'
AND (dogum_yeri='İzmir' OR dogum_yeri='Bursa')

Örnek 10 : Adı E ile başlayan, 3,5 ve 7 nolu meslek grubuna ait ,bayan,bekar,30 yaşından küçük ,
100 milyondan fazla maaş alan personel listesi ;

SELECT ad,soyad
FROM personel,ucretler
WHERE ad LIKE 'E%'
AND meslek_id IN (3,5,7)
AND cinsiyet=0
AND medeni_hal=0
AND dogum_tarihi > '01.01.1969'
AND sicil_no=per_sicil_no
AND aylik_ücret > 100000000

Örnek 11 : Evli ve aile yardımı almayan personel listesi;

SELECT ad,soyad
FROM personel,ucretler
WHERE medeni_hal=1 AND aile_yardim=0

TEK TABLODAN SORGULAMALAR:

SELECT SEÇ

FROM GELİŞ

ÖRNEK: 1) Bütün bilgileri personel tablosundan koşulsuz olarak listele.

SELECT * SEÇ *

SELECT * SEÇ *
FROM personel GELİŞ personel

ÖRNEK:2) Personel tablosundan SEÇ komutuyla istenen sütun adlarını belirt.

SELECT sicil,sosy_g_no,ad,soyad,dog_tar, SEÇ sicil,sosy_g_no,ad,soyad,dog_tar, adres,cins,brüt,böl_no,yön_s_g_n adres,cins,brüt,böl_no,yön_s_g_n
FROM personel; GELİŞ personel;


ÖRNEK:3)Personel tablosundan istenen sütün başlıklarını listele.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel; GELİŞ personel;


DISTINCT TEKRARSIZ
SQL’de tablo içinde birbirinin aynı datalar bulunabilir.Aynı satırların listeleme esnasında bir kez yazılması

ÖRNEK: 1)Par _sat dosyasından sat_no’ları tekrarsız olarak listelenecektir.

SELECT DISTINCT sat_no SEÇ TEKRARSIZ sat_no
FROM par_sat; GELİŞ par_sat;


i)TABLO BİLGİLERİNİN SIRALANMIŞ OLARAK LİSTELENMESİ:
ORDER BY SIRALA

TANIM:Tablodaki sütunlardan ,belirli bir sütuna göre listelemek için SEÇ komutuna ,SIRALA eklenir.

ÖRNEK: 1)Personel dosyasından,sicil,ad,soyad,brüt sütunlarını seç ve brüt(maaşa)göre büyükten küçüğe sırala.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY brüt ASC; SIRALA brüt B-K;

DESC Küçükten büyüğe sırala ASC Büyükten küçüğe sırala


İİ)BİRDEN ÇOK ALANA GÖRE SIRALAMA:
TANIM:Bir tablo içinde ,birden fazla sütundan aynı anda sıralamak için kullanılır.

ÖRNEK 1)Personel dosyasından seçilen sütunlarını aynı anda hem ad,hem de otomatik olarak sıralar.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY ad,brüt; SIRALA ad,brüt;

ÖRNEK 2)Personel tablosundan seçili sütunları öncelik adda olmak üzere (B-K) adı bozmadan soyadı (K-B) sıralı listeler.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY ad ASC,soyad DESC, SIRALA ad B-K,soyad K-B,
brüt ASC; brüt B-K;

veya;

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY ad,soyad DESC,brüt; SIRALA ad,soyad K-B,brüt;

DESC’li durumda yanına yazıp belirtilir,yazılmazsa ASC direct kabul edilir.

KOŞULA BAĞLI OLARAK LİSTELEME:
WHERE OLAN

TANIM:Verilen koşulu sağlayanlar listelenir.İki veri birbiriyle karşılaştırılmaktadır. Karşılaştırılan verilerin türü aynı olmalıdır.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > 5000000; OLAN brüt > 5000000;

ÇEŞİTLİ VERİ TİPLERİ İÇİN BASİT SORGULAMALAR:

i)NÜMERİK VERİ TİPLERİ:
ÖRNEK: Maaşı 8000000TL’den fazla olmayan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt <= 8000000; OLAN brüt <= 8000000;

ii)KARAKTER VERİ TİPLERİ (CHAR):
Karakter çift veya tek tırnak ile gösterilir.

ÖRNEK: Adı Ali olmayan personele ait kayıtları listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE ad <> “Ali”; OLAN ad <> “Ali”;

İİİ)TARİH VERİ TİPİ:
Tarih veri tipleri { } sembolleri içinde yazılır.

ÖRNEK: Hangi personelin doğum tarihi 1960 yılından daha öncedir?

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE dog_tar <={12/31/59}; OLAN dog_tar <={12/31/59};


MANTIKSAL (LOJİK) VERİ TİPİ:
Mantıksal veriler için mümkün olabilen sadece iki değer sözkonusudur.DOĞRU D(TRUE T) , YANLIŞ Y (FALSE F) ile simgelenir.

ÖRNEK: Personel tablosunda personelin cinsiyetini belirten cins adlı alan mantıksal(logical) olarak tanımlanmıştır.Cinsiyeti erkek olanları D,kadın olanları y ile tanımlarsak erkek olanları listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE cins = .T.; OLAN cins =.D.;


BİRDEN ÇOK KOŞULA DAYALI SORGULAMALAR: (NOT,AND,OR)
TANIM:Mantıksal operatörlerin yardımı ile birden çok koşulun gerçekleştirmesine bağlı olarak ifade edilebilecek (karmaşık yada birleşik koşullu listelemeleri gerçekleştirilmektedir.)

AND VE

ÖRNEK:Maaşı 5000000’dan fazla olan ve cinsiyeti erkek olan personelin listelenmesi istenir yani iki koşul verilmektedir ve ikisinin de olması istenir.
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt >5000000 AND cins =.T.; OLAN brüt > 5000000 AND cins =.D.

NOT DEĞİL

OR VEYA

ÖRNEKLER:
i)Doğum tarihi 1960’dan önce olan maaşı 6000000 - 10000000 arasındaki bayan personelin listele.

SELECT * SEÇ *
FROM dog_tar < {01/01/60} AND GELİŞ dog_tar < {01/01/60} VE
brüt > = 6000000 AND brüt < =10000000 brüt > = 6000000 VE brüt < =10000000
AND cins = .F.; VE cins =.Y.;

İİ)Satış bölümüyle muhasebe bölümündekiler kimlerdir?
(Satış bölümünün böl_no’sunun 1 ve muhasebe bölümünün böl_no’sunun 2 olduğu varsayılmaktadır.)

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE bol_no =1 OR bol_no = 2; OLAN bol_no = 1 VEYA bol_no =2;

İİİ)Bölümü Satış yada Muhasebe olamayan 1960’dan sonra doğmuş bayan personeli listele.

1.YAZILIM:
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE NOT (böl_no =1 OR OLAN DEĞİL (böl_no =1 VEYA
böl_no =2) AND dog_tar > ={01/01/60} böl_no =2)VE dog_tar >={01/01/60}
AND cins =.F.; VE cins=.Y.;

2.YAZILIM:
SELECT * SEÇ *
FROM personel FROM personel
WHERE böl_no <> 1 AND OLAN böl_no <> 1 VE
böl_no <> 2 AND dog_tar > ={01/01/60} böl_no <> 2 AND dog_tar > = {01/01/60}
AND cins =.F.; VE cins =.Y.;

BİR VERİ KÜMESİNDE ARAMA -IN OPERATÖRÜ
IN İÇİNDE

“IN” operatörü DEĞİL(NOT) ile kullanılılabilir.
ÖRNEK:i) Bölümü 1,2,3 olmayan personel kimlerden oluşmaktadır?

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE bol_no NOT IN (1,2,3); OLAN böl_no DEĞİL İÇİNDE (1,2,3);

ÖRNEK:ii) Böl_no’su 1,2 yada 3 olan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE böl_no = 1 OR böl_no= 2 OR OLAN böl_no =1 VEYA böl_no =2 VEYA
böl_no = 3; böl_no = 3;

Bu örneğin IN ile yapılmış şekli daha kısadır.
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE NOT böl_no IN (1,2,3); OLAN DEĞİL böl_no İÇİNDE (1,2,3);
ARALIK SORGULAMA SÖZCÜĞÜ:

BETWEEN ARASINDA

ÖRNEK:Maaşı 5- 10 milyon arasında olan personel kimlerdir?

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > =5000000 AND OLAN brüt > =5000000 VE
brüt < = 10000000; brüt < = 10000000;

BETWEEN (ARASINDA) komutu ile daha kısa olacaktır.


SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt BETWEEN 5000000 OLAN brüt ARASINDA 5000000
AND 10000000; VE 10000000;

KARAKTER TÜRÜ BİLGİ İÇİNDE ARAMA YAPMA -LIKE SÖZCÜĞÜ:

TANIM ÖRNEĞİ: Adres sutunu içerisinde semt bölümüne ait ayrıca bir sutun olmadığını varsayarak semt adı adres sutunu içerisinde yer alır ve buradan da LIKE (BULUNAN) komutuyla adres sutunu içerisinde Taksim semtinde oturan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE adres LIKE ‘% TAKSİM %’ ; OLAN adres LIKE ‘% TAKSİM%’ ;

Adres LIKE ‘%TAKSİM%’ ifadesi adres içinde her hangi bir yerde TAKSİM yazan yerde oturan personeli listeleyecektir.
LIKE sözcüğünü ,alt çizgi (-) sembolü ile birlikte kullanmakta mümkündür.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE ad LIKE ‘Mehmet -----‘; OLAN ad BULUNAN ‘Mehmet ----‘;

Şekildeki 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
listeleyecektir.Anlaşılacağı gibi - sembolü , tek karakterlik bir bilgiyi temsil etmektedir.

SQL’DE ARİTMETİKSEL İFADELER VE FNKSİYONLAR :

KÜME FONKSİYONLARI:
SUM FONKSİYONU: SUM TOPLA
Fonksiyonun argümanı olarak belirtilen sütun ile ilişkili olana toplama işlemini gerçekleştirir.

ÖRNEK:İşletmedeki personelin brüt maaşlar toplamı ne kadardır?

SELECT SUM (brüt) SEÇ TOPLA(brüt)
FROM personel; GELİŞ personel;

AVG FONKSİYONU: AVG ORT
Aritmetiksel ortalama (average) hesaplamak için kullanılır.

SELECT AVG(brüt) SEÇ ORT (brüt)
FROM personel; GELİŞ personel;

MAX FONKSİYONU: MAX ÜST
Tablo içinde ,belirtilen sutun (alan)içindeki en büyük değeri bulur.
ÖRNEK:İşletme içindeki en yüksek maaş ne kadardır?

SELECT MAX (brüt) SEÇ ÜST (brüt)
FROM personel; GELİŞ personel;

MIN FONKSİYONU: MIN ALT
Tablo içinde,belirlenen sutun alan içindeki en küçük değeri bulur.
ÖRNEK:İşletme içinde 4 Mayıs 1970’den önce doğanlar için,asgari ücret nedir?

SELECT MIN(brüt) SEÇ ALT(brüt)
FROM personel GELİŞ personel
WHERE dog_tar < {05/04/70}; OLAN dog_tar < {05/04/70};

COUNT FONKSİYONU: COUNT SAY
Tablo içinde ,her hangi bir sayma işlemi gerçekleştirmek için kullanılır.

ÖRNEK:Ücreti 6000000’dan olan personel sayısı nedir?

SELECT COUNT (*) SEÇ SAY(*)
FROM personel GELİŞ personel
WHERE brüt > 6000000; OLAN brüt > 6000000;

COUNT (SAY) fonksiyonu DISTINCT (TEKRARSIZ)sözcüğü ile de kullanılır.

ÖRNEK:personel tablosunda mevcut personelin işletme içinde kaç tane farklı bölümde çalıştığını bul.

SELECT COUNT(DISTINCT böl_no) SEÇ SAY (TEKRARSIZ böl_no)
FROM personel; GELİŞ personel;
COUNT (böl_no) SAY (böl_no)


GRUPLANDIRARAK İŞLEM YAPMA: GROUP BY GRUPLA
ÖRNEK: Her bölümdeki ortalama maaş nedir?

SELECT böl_no,AVG (brüt) SEÇ böl_no
FROM personel GELİŞ personel
GOUP BY böl_no; GRUPLA böl_no;

HAVING: HAVING SAHİP
Gruplandırarak kümeleme fonksiyonunu uygularken koşulda verilebilir.Bu durumda grup üzerindeki hesaplamalarla ilgili koşul belirtilirken HAVING (SAHİP) sözcüğü kullanılır.

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

SELECT böl_no,AVG (brüt) SEÇ böl_no, ORT(brüt)
FROM personel GELİŞ personel
GROUP BY böl_no GRUPLA böl_no
HAVING AVG(brüt)> 9000000; SAHİP ORT(brüt)> 9000000;
HAVING(SAHİP) sözcüğü SELECT(SEÇ) konusunda GROUP BY(GRUPLA) bulunmadığı zaman geçersizdir.HAVING(SAHİP) sözcüğünü izleyen ifade içinde ,SUM(TOPLA), COUNT(*)(SAY),AVG(ORT),MAX(ÜST) yada MIN(ALT) fonksiyonlarından en az biri bulunmalıdır.
HAVING (SAHİP) sözcüğü sadece gruplanmış veriler üzerindeki işlemlerde geçerlidir.
WHERE (OLAN) sözcüğü bir tablonun tek tek satırları üzerinde işlem yapan koşullar içinde geçerlidir.
Bazı durumlarda HAVING(SAHİP) ve WHERE(OLAN) sözcükleri ile birlikte SELECT(SEÇ) komutu içinde kullanılabilir.

ÖRNEK:personel tablosu içinde her bölümde erkek personele ait maaşlar için ortalamanın 9000000’dan fazla olduğu bölümleri listele.

SELECT böl_no, AVG (brüt) SEÇ böl_no, ORT (brüt)
FROM personel GELİŞ personel
WHERE cins= .T. OLAN cins= .D.
GROUP BY böl_no GRUPLA böl_no
HAVING AVG (brüt) > 9000000; SAHİP ORT(brüt) > 9000000;

BİRDEN FAZLA TABLOYU İLİŞKİLENDİRMEK: JOIN İLİŞKİLENDİR
ÖRNEK: Personel ve bölüm adlı 2 tablo bulunmaktadır.
Çalışan her personel ve personelin yöneticisi ile ilişkili bilgiler nelerdir?

SELECT * SEÇ *
FROM personel,bölüm GELİŞ personel,bölüm
WHERE personel .böl_no=bölüm.bölüm_no ; OLAN personel.böl_no = bölüm.bölüm_no;
TABLO ADI KOLON ADI

ÖRNEK: JOIN (İLİŞKİLENDİR) işleminde arzu edilen(sicil,ad,soyad,böl_no,yön_s_g_n) alanların listele.

SELECT sicil,ad,soyad,böl_no,yön_s_g_n SEÇ sicil,ad,soyad,böl_no,yön_s_g_n
FROM personel,bölüm GELİŞ personel,bölüm
WHERE personel .böl_no = bölüm .bölüm_no; OLAN personel .böl_no = bölüm .bölüm_no;

SELF-JOIN: KENDİSİYLE -İLİŞKİLENDİR
TANIM:Bir tablonun kendisi ile birleştirilmesine “KENDİSİYLE-İLİŞKiLENDİR” denir.(SELF-JOIN)

SELECT A. sicil , A.ad , A.soyad,
B .ad , B.soyad , B.dog_tar SEÇ A. sicil , A.ad , A.soyad,
FROM personel A , personel B B .ad , B.soyad , B.dog_tar
WHERE A. yon_sos_g_n =B .sosy_g_no; GELİŞ personel A , personel B
OLAN A. yon_sos_g_n =B .sosy_g_no;

NESTED SELECTS: İÇİÇE
TANIM:İç içe geçmiş SELECT(SEÇ)komutlarından oluşur.İçteki. seç komutunun bulduğu sonucu dış takı SEÇ komutumuz işlevini yerine getirmesi için kullanılır.

ÖRNEK:parça numarası 24 olan parçayı ,projelerde kullanan çalışan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE sosy_g_no OLAN sosy_g_no
IN(SELECT per_s_g_no İÇİNDE(SEÇ per_s_g_no
FROM parça,proje,çalışma GELİŞ parça,proje,çalışma
WHERE pr_no = proj_no AND OLAN pr_no = proj_no VE
proj_no =proj_no AND proj_no = proj_no VE
par_no =24); par_no =24);

ÖRNEK: Fatih’te oturan personelin çalıştığı projelerin adlarını ve yerlerini listele.

SELECT proj_ad,yer SEÇ proj_ad,yer
FROM proje GELİŞ proje
WHERE proj_no IN OLAN proj_no İÇİNDE
(SELECT proje_no (SEÇ proje_no
FROM personel,çalışma GELİŞ sosy_g_no = per_s_g_no
WHERE sosy_g_no = per_s_g_no OLAN sosy_g_no = per_s_g_no
AND adres LIKE “% fatih %”); VE adres BULUNAN “% fatih %);

UNION SÖZCÜĞÜ: UNION BİRLEŞİM
TANIM:İki ayrı SEÇ komutunun sonucunda elde edilen tabloların birleşimi işlemini gerçekleştirir.


ÖRNEK:Adı Ahmet ve Soyadı Caner olan kişi yada kişileri işletmenin yürüttüğü projelerde çalışan bir kişi (sıradan bir personel yada bölüm yöneticisi)olarak bulunduran projelerin isimlerini ve projelerin yürütüldüğü yerleri listele.

(SELECT proj_ad,yer (SEÇ proj_ad,yer
FROM proj,bölüm,personel GELİŞ proj,bölüm,personel
WHERE bl_no=bölüm_no AND OLAN bl_no=bölüm_no VE
y_sos gno = sosy_g_no y_sos gno = sosy_g_no
AND ad =”Ahmet”AND soyad =”Caner”) VE ad =”Ahmet” VE soyad =”Caner”)
UNION (SELECT proj_ad,yer BİRLEŞİM (SEÇ proj_ad,yer
FROM proje,çalışma,personel GELİŞ proje,çalışma,personel
WHERE proj_no = proje_no AND OLAN proj_no = proje_no VE
Per_s_g_no = sosy_g_no AND ad =”Ahmet” Per_s_g_no = sosy_g_no VE ad =”Ahmet”
AND soyad =”Caner”) VE soyad =”Caner”)

devam edecek
 

CoveRed

Kıdemli Üye
9 Eki 2008
2,451
7
!!! TANRI DAĞLARı !!!
sql devam

LIKE
Bu ise içinde belli bir karakter dizisi bulunan datalara ulaşmak istersek kullanabileceğimiz bir operatördür.

Örnek 4 :
SELECT * FROM personel WHERE adres LIKE '%İstanbul%'

Bu sorgulama ile adres alanında İstanbul geçen kayıtları listelemiş oluruz.

Örnek 5 :
SELECT * FROM personel WHERE adres LIKE '%İstanbul'

Bu sorgulama ile adres alanının sonunda İstanbul geçen kayıtları listelemiş oluruz.

Örnek 6 :
SELECT * FROM personel WHERE adres LIKE 'İstanbul%'

Bu sorgulama ile adres alanının başında İstanbul geçen kayıtları listelemiş oluruz.

Tablolar Üzerinde İşlem Yapma
Genellikle veri tabanı kayıtları oluştururken bütün bilgileri bir tabloda değilde birkaç tablo üzerinde tutarız.Bu dataların hem daha
düzenli durmasını hemde gereksiz veri tekrarlarını engellemiş olur.Şimdi farklı tablolara bölünmüş datalar üzerinde işlem yapmamız gerekirse ne yapmamız gerekir.Aslında fazla bir şey yapmamız gerekmez.Tek yapacağımız hangi tabloları kullanacaksak bunları from cümleceğinde belirtmemizdir.Tabloları belirtirken aralarıda , koymayı unutmazsak o zaman sorun yok.

Örnek 1 : Hangi personelin ne kadar maaş aldığını listelemek istersek;

SELECT ad,soyad,aylik_ucret
FROM personel,ucretler
WHERE sicil_no=per_sicil_no

Örnek 2 : İstanbul'da yaşayan Adana doğumlu personelin maaşlarını listelemek istersek;

SELECT ad,soyad,aylik_ucret
FROM personel,ucretler
WHERE sicil_no=per_sicil_no AND adres LIKE '%İstanbul%' AND
dogum_yeri = 'Adana'

Örnek 3 : 300 milyondan fazla maaş alan ve 2 nolu meslek grubuna ait personeli listelemek istersek;

SELECT ad,soyad,aylik_ucret
FROM personel,ucretler
WHERE sicil_no=per_sicil_no AND aylik_ucret>300000000 AND meslek_id=2

Örnek 4 : Muhasebe meslek grubuna ait personel listesi;

SELECT ad,soyad
FROM personel,meslekler
WHERE meslek_id=meslek_id AND meslek_aciklama='Muhasebe'

Şimdi buradaki sorgulamımızda bir karışıklık söz konusu olacak.İki tane aynı isimde meslek_id oldu.Bunu şu şekilde engelleyebiliriz.
Tablolarda aynı isimde iki kolon varsa bu kolanları kullanırken başlarıda tablo ismini getiririz araya bir nokta koyarak kolon adını yazarız.

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama='Muhasebe'

Örnek 5 : Şirketimizde 30 yıldır çalışan ve 200 milyon altında maaş alan personeli ödüllendirecegiz.
Bunun için nasıl bir sorgulama yapmalıyız.

SELECT ad,soyad
FROM personel,ucretler
WHERE sicil_no=per_sicil_no AND baslama_tarihi < '01.01.1969'
AND aylik_ucret < 200000000

Örnek 6 : 22 yaşından büyük bilgi işlemde çalışan bayan personeli listelemek istersek
(NOT : cinsiyet= 0 : bayan 1 : erkek
medeni_hal= 0 : bekar 1 : evli )

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama='Bilgi İşlem' AND cinsiyet=0
AND dogum_tarihi < '01.01.1977'

Örnek 7 : 40 yaşından küçük ,bilgi işlem veya muhasebe bölümünde çalışan,erkek,200 milyondan
fazla maaş alan ,Ankara doğumlu ,Sarıyer'de oturan,10 yıldan fazla şirkette çalışan , bekar
,10 milyondan fazla kesinti yapılan personeli listelemek istersek;

SELECT ad,soyad
FROM personel,meslekler,ucretler
WHERE dogum_tarihi > '01.01.1959'
AND personel.meslek_id=meslekler.meslek_id
AND (meslek_aciklama='Bilgi İşlem' OR meslek_aciklama='Muhasebe')
AND cinsiyet=1
AND sicil_no=per_sicil_no AND aylik_ucret > 200000000
AND dogum_yeri='Ankara'
AND adres LIKE '%Sarıyer%'
AND baslama_tarihi > '01.01.1989'
AND medeni_hal=0
AND kesinti>10000000

Örnek 8 : Muhasebe ve Pazarlama bölümü dışında çalışan personeli listelemek istersek;

SELECT ad,soyad
FROM personel,meslekler
WHERE personel.meslek_id=meslekler.meslek_id
AND meslek_aciklama<>'Pazarlama' AND meslek_aciklama<>'Muhasebe'

Örnek 9 : 40 yaşları arasında İzmir veya Bursa doğumlu adayları listelemek istersek;

SELECT ad,soyad
FROM personel
WHERE dogum_tarihi BETWEEN '01.01.1959' AND '01.01.1969'
AND (dogum_yeri='İzmir' OR dogum_yeri='Bursa')

Örnek 10 : Adı E ile başlayan, 3,5 ve 7 nolu meslek grubuna ait ,bayan,bekar,30 yaşından küçük ,
100 milyondan fazla maaş alan personel listesi ;

SELECT ad,soyad
FROM personel,ucretler
WHERE ad LIKE 'E%'
AND meslek_id IN (3,5,7)
AND cinsiyet=0
AND medeni_hal=0
AND dogum_tarihi > '01.01.1969'
AND sicil_no=per_sicil_no
AND aylik_ücret > 100000000

Örnek 11 : Evli ve aile yardımı almayan personel listesi;

SELECT ad,soyad
FROM personel,ucretler
WHERE medeni_hal=1 AND aile_yardim=0

TEK TABLODAN SORGULAMALAR:

SELECT SEÇ

FROM GELİŞ

ÖRNEK: 1) Bütün bilgileri personel tablosundan koşulsuz olarak listele.

SELECT * SEÇ *

SELECT * SEÇ *
FROM personel GELİŞ personel

ÖRNEK:2) Personel tablosundan SEÇ komutuyla istenen sütun adlarını belirt.

SELECT sicil,sosy_g_no,ad,soyad,dog_tar, SEÇ sicil,sosy_g_no,ad,soyad,dog_tar, adres,cins,brüt,böl_no,yön_s_g_n adres,cins,brüt,böl_no,yön_s_g_n
FROM personel; GELİŞ personel;


ÖRNEK:3)Personel tablosundan istenen sütün başlıklarını listele.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel; GELİŞ personel;


DISTINCT TEKRARSIZ
SQL’de tablo içinde birbirinin aynı datalar bulunabilir.Aynı satırların listeleme esnasında bir kez yazılması

ÖRNEK: 1)Par _sat dosyasından sat_no’ları tekrarsız olarak listelenecektir.

SELECT DISTINCT sat_no SEÇ TEKRARSIZ sat_no
FROM par_sat; GELİŞ par_sat;


i)TABLO BİLGİLERİNİN SIRALANMIŞ OLARAK LİSTELENMESİ:
ORDER BY SIRALA

TANIM:Tablodaki sütunlardan ,belirli bir sütuna göre listelemek için SEÇ komutuna ,SIRALA eklenir.

ÖRNEK: 1)Personel dosyasından,sicil,ad,soyad,brüt sütunlarını seç ve brüt(maaşa)göre büyükten küçüğe sırala.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY brüt ASC; SIRALA brüt B-K;

DESC Küçükten büyüğe sırala ASC Büyükten küçüğe sırala


İİ)BİRDEN ÇOK ALANA GÖRE SIRALAMA:
TANIM:Bir tablo içinde ,birden fazla sütundan aynı anda sıralamak için kullanılır.

ÖRNEK 1)Personel dosyasından seçilen sütunlarını aynı anda hem ad,hem de otomatik olarak sıralar.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY ad,brüt; SIRALA ad,brüt;

ÖRNEK 2)Personel tablosundan seçili sütunları öncelik adda olmak üzere (B-K) adı bozmadan soyadı (K-B) sıralı listeler.

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY ad ASC,soyad DESC, SIRALA ad B-K,soyad K-B,
brüt ASC; brüt B-K;

veya;

SELECT sicil,ad,soyad,brüt SEÇ sicil,ad,soyad,brüt
FROM personel GELİŞ personel
ORDER BY ad,soyad DESC,brüt; SIRALA ad,soyad K-B,brüt;

DESC’li durumda yanına yazıp belirtilir,yazılmazsa ASC direct kabul edilir.

KOŞULA BAĞLI OLARAK LİSTELEME:
WHERE OLAN

TANIM:Verilen koşulu sağlayanlar listelenir.İki veri birbiriyle karşılaştırılmaktadır. Karşılaştırılan verilerin türü aynı olmalıdır.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > 5000000; OLAN brüt > 5000000;

ÇEŞİTLİ VERİ TİPLERİ İÇİN BASİT SORGULAMALAR:

i)NÜMERİK VERİ TİPLERİ:
ÖRNEK: Maaşı 8000000TL’den fazla olmayan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt <= 8000000; OLAN brüt <= 8000000;

ii)KARAKTER VERİ TİPLERİ (CHAR):
Karakter çift veya tek tırnak ile gösterilir.

ÖRNEK: Adı Ali olmayan personele ait kayıtları listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE ad <> “Ali”; OLAN ad <> “Ali”;

İİİ)TARİH VERİ TİPİ:
Tarih veri tipleri { } sembolleri içinde yazılır.

ÖRNEK: Hangi personelin doğum tarihi 1960 yılından daha öncedir?

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE dog_tar <={12/31/59}; OLAN dog_tar <={12/31/59};


MANTIKSAL (LOJİK) VERİ TİPİ:
Mantıksal veriler için mümkün olabilen sadece iki değer sözkonusudur.DOĞRU D(TRUE T) , YANLIŞ Y (FALSE F) ile simgelenir.

ÖRNEK: Personel tablosunda personelin cinsiyetini belirten cins adlı alan mantıksal(logical) olarak tanımlanmıştır.Cinsiyeti erkek olanları D,kadın olanları y ile tanımlarsak erkek olanları listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE cins = .T.; OLAN cins =.D.;


BİRDEN ÇOK KOŞULA DAYALI SORGULAMALAR: (NOT,AND,OR)
TANIM:Mantıksal operatörlerin yardımı ile birden çok koşulun gerçekleştirmesine bağlı olarak ifade edilebilecek (karmaşık yada birleşik koşullu listelemeleri gerçekleştirilmektedir.)

AND VE

ÖRNEK:Maaşı 5000000’dan fazla olan ve cinsiyeti erkek olan personelin listelenmesi istenir yani iki koşul verilmektedir ve ikisinin de olması istenir.
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt >5000000 AND cins =.T.; OLAN brüt > 5000000 AND cins =.D.

NOT DEĞİL

OR VEYA

ÖRNEKLER:
i)Doğum tarihi 1960’dan önce olan maaşı 6000000 - 10000000 arasındaki bayan personelin listele.

SELECT * SEÇ *
FROM dog_tar < {01/01/60} AND GELİŞ dog_tar < {01/01/60} VE
brüt > = 6000000 AND brüt < =10000000 brüt > = 6000000 VE brüt < =10000000
AND cins = .F.; VE cins =.Y.;

İİ)Satış bölümüyle muhasebe bölümündekiler kimlerdir?
(Satış bölümünün böl_no’sunun 1 ve muhasebe bölümünün böl_no’sunun 2 olduğu varsayılmaktadır.)

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE bol_no =1 OR bol_no = 2; OLAN bol_no = 1 VEYA bol_no =2;

İİİ)Bölümü Satış yada Muhasebe olamayan 1960’dan sonra doğmuş bayan personeli listele.

1.YAZILIM:
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE NOT (böl_no =1 OR OLAN DEĞİL (böl_no =1 VEYA
böl_no =2) AND dog_tar > ={01/01/60} böl_no =2)VE dog_tar >={01/01/60}
AND cins =.F.; VE cins=.Y.;

2.YAZILIM:
SELECT * SEÇ *
FROM personel FROM personel
WHERE böl_no <> 1 AND OLAN böl_no <> 1 VE
böl_no <> 2 AND dog_tar > ={01/01/60} böl_no <> 2 AND dog_tar > = {01/01/60}
AND cins =.F.; VE cins =.Y.;

BİR VERİ KÜMESİNDE ARAMA -IN OPERATÖRÜ
IN İÇİNDE

“IN” operatörü DEĞİL(NOT) ile kullanılılabilir.
ÖRNEK:i) Bölümü 1,2,3 olmayan personel kimlerden oluşmaktadır?

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE bol_no NOT IN (1,2,3); OLAN böl_no DEĞİL İÇİNDE (1,2,3);

ÖRNEK:ii) Böl_no’su 1,2 yada 3 olan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE böl_no = 1 OR böl_no= 2 OR OLAN böl_no =1 VEYA böl_no =2 VEYA
böl_no = 3; böl_no = 3;

Bu örneğin IN ile yapılmış şekli daha kısadır.
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE NOT böl_no IN (1,2,3); OLAN DEĞİL böl_no İÇİNDE (1,2,3);
ARALIK SORGULAMA SÖZCÜĞÜ:

BETWEEN ARASINDA

ÖRNEK:Maaşı 5- 10 milyon arasında olan personel kimlerdir?

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > =5000000 AND OLAN brüt > =5000000 VE
brüt < = 10000000; brüt < = 10000000;

BETWEEN (ARASINDA) komutu ile daha kısa olacaktır.


SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt BETWEEN 5000000 OLAN brüt ARASINDA 5000000
AND 10000000; VE 10000000;

KARAKTER TÜRÜ BİLGİ İÇİNDE ARAMA YAPMA -LIKE SÖZCÜĞÜ:

TANIM ÖRNEĞİ: Adres sutunu içerisinde semt bölümüne ait ayrıca bir sutun olmadığını varsayarak semt adı adres sutunu içerisinde yer alır ve buradan da LIKE (BULUNAN) komutuyla adres sutunu içerisinde Taksim semtinde oturan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE adres LIKE ‘% TAKSİM %’ ; OLAN adres LIKE ‘% TAKSİM%’ ;

Adres LIKE ‘%TAKSİM%’ ifadesi adres içinde her hangi bir yerde TAKSİM yazan yerde oturan personeli listeleyecektir.
LIKE sözcüğünü ,alt çizgi (-) sembolü ile birlikte kullanmakta mümkündür.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE ad LIKE ‘Mehmet -----‘; OLAN ad BULUNAN ‘Mehmet ----‘;

Şekildeki 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
listeleyecektir.Anlaşılacağı gibi - sembolü , tek karakterlik bir bilgiyi temsil etmektedir.

SQL’DE ARİTMETİKSEL İFADELER VE FNKSİYONLAR :

KÜME FONKSİYONLARI:
SUM FONKSİYONU: SUM TOPLA
Fonksiyonun argümanı olarak belirtilen sütun ile ilişkili olana toplama işlemini gerçekleştirir.

ÖRNEK:İşletmedeki personelin brüt maaşlar toplamı ne kadardır?

SELECT SUM (brüt) SEÇ TOPLA(brüt)
FROM personel; GELİŞ personel;

AVG FONKSİYONU: AVG ORT
Aritmetiksel ortalama (average) hesaplamak için kullanılır.

SELECT AVG(brüt) SEÇ ORT (brüt)
FROM personel; GELİŞ personel;

MAX FONKSİYONU: MAX ÜST
Tablo içinde ,belirtilen sutun (alan)içindeki en büyük değeri bulur.
ÖRNEK:İşletme içindeki en yüksek maaş ne kadardır?

SELECT MAX (brüt) SEÇ ÜST (brüt)
FROM personel; GELİŞ personel;

MIN FONKSİYONU: MIN ALT
Tablo içinde,belirlenen sutun alan içindeki en küçük değeri bulur.
ÖRNEK:İşletme içinde 4 Mayıs 1970’den önce doğanlar için,asgari ücret nedir?

SELECT MIN(brüt) SEÇ ALT(brüt)
FROM personel GELİŞ personel
WHERE dog_tar < {05/04/70}; OLAN dog_tar < {05/04/70};

COUNT FONKSİYONU: COUNT SAY
Tablo içinde ,her hangi bir sayma işlemi gerçekleştirmek için kullanılır.

ÖRNEK:Ücreti 6000000’dan olan personel sayısı nedir?

SELECT COUNT (*) SEÇ SAY(*)
FROM personel GELİŞ personel
WHERE brüt > 6000000; OLAN brüt > 6000000;

COUNT (SAY) fonksiyonu DISTINCT (TEKRARSIZ)sözcüğü ile de kullanılır.

ÖRNEK:personel tablosunda mevcut personelin işletme içinde kaç tane farklı bölümde çalıştığını bul.

SELECT COUNT(DISTINCT böl_no) SEÇ SAY (TEKRARSIZ böl_no)
FROM personel; GELİŞ personel;
COUNT (böl_no) SAY (böl_no)


GRUPLANDIRARAK İŞLEM YAPMA: GROUP BY GRUPLA
ÖRNEK: Her bölümdeki ortalama maaş nedir?

SELECT böl_no,AVG (brüt) SEÇ böl_no
FROM personel GELİŞ personel
GOUP BY böl_no; GRUPLA böl_no;

HAVING: HAVING SAHİP
Gruplandırarak kümeleme fonksiyonunu uygularken koşulda verilebilir.Bu durumda grup üzerindeki hesaplamalarla ilgili koşul belirtilirken HAVING (SAHİP) sözcüğü kullanılır.

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

SELECT böl_no,AVG (brüt) SEÇ böl_no, ORT(brüt)
FROM personel GELİŞ personel
GROUP BY böl_no GRUPLA böl_no
HAVING AVG(brüt)> 9000000; SAHİP ORT(brüt)> 9000000;
HAVING(SAHİP) sözcüğü SELECT(SEÇ) konusunda GROUP BY(GRUPLA) bulunmadığı zaman geçersizdir.HAVING(SAHİP) sözcüğünü izleyen ifade içinde ,SUM(TOPLA), COUNT(*)(SAY),AVG(ORT),MAX(ÜST) yada MIN(ALT) fonksiyonlarından en az biri bulunmalıdır.
HAVING (SAHİP) sözcüğü sadece gruplanmış veriler üzerindeki işlemlerde geçerlidir.
WHERE (OLAN) sözcüğü bir tablonun tek tek satırları üzerinde işlem yapan koşullar içinde geçerlidir.
Bazı durumlarda HAVING(SAHİP) ve WHERE(OLAN) sözcükleri ile birlikte SELECT(SEÇ) komutu içinde kullanılabilir.

ÖRNEK:personel tablosu içinde her bölümde erkek personele ait maaşlar için ortalamanın 9000000’dan fazla olduğu bölümleri listele.

SELECT böl_no, AVG (brüt) SEÇ böl_no, ORT (brüt)
FROM personel GELİŞ personel
WHERE cins= .T. OLAN cins= .D.
GROUP BY böl_no GRUPLA böl_no
HAVING AVG (brüt) > 9000000; SAHİP ORT(brüt) > 9000000;

BİRDEN FAZLA TABLOYU İLİŞKİLENDİRMEK: JOIN İLİŞKİLENDİR
ÖRNEK: Personel ve bölüm adlı 2 tablo bulunmaktadır.
Çalışan her personel ve personelin yöneticisi ile ilişkili bilgiler nelerdir?

SELECT * SEÇ *
FROM personel,bölüm GELİŞ personel,bölüm
WHERE personel .böl_no=bölüm.bölüm_no ; OLAN personel.böl_no = bölüm.bölüm_no;
TABLO ADI KOLON ADI

ÖRNEK: JOIN (İLİŞKİLENDİR) işleminde arzu edilen(sicil,ad,soyad,böl_no,yön_s_g_n) alanların listele.

SELECT sicil,ad,soyad,böl_no,yön_s_g_n SEÇ sicil,ad,soyad,böl_no,yön_s_g_n
FROM personel,bölüm GELİŞ personel,bölüm
WHERE personel .böl_no = bölüm .bölüm_no; OLAN personel .böl_no = bölüm .bölüm_no;

SELF-JOIN: KENDİSİYLE -İLİŞKİLENDİR
TANIM:Bir tablonun kendisi ile birleştirilmesine “KENDİSİYLE-İLİŞKiLENDİR” denir.(SELF-JOIN)

SELECT A. sicil , A.ad , A.soyad,
B .ad , B.soyad , B.dog_tar SEÇ A. sicil , A.ad , A.soyad,
FROM personel A , personel B B .ad , B.soyad , B.dog_tar
WHERE A. yon_sos_g_n =B .sosy_g_no; GELİŞ personel A , personel B
OLAN A. yon_sos_g_n =B .sosy_g_no;

NESTED SELECTS: İÇİÇE
TANIM:İç içe geçmiş SELECT(SEÇ)komutlarından oluşur.İçteki. seç komutunun bulduğu sonucu dış takı SEÇ komutumuz işlevini yerine getirmesi için kullanılır.

ÖRNEK:parça numarası 24 olan parçayı ,projelerde kullanan çalışan personeli listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE sosy_g_no OLAN sosy_g_no
IN(SELECT per_s_g_no İÇİNDE(SEÇ per_s_g_no
FROM parça,proje,çalışma GELİŞ parça,proje,çalışma
WHERE pr_no = proj_no AND OLAN pr_no = proj_no VE
proj_no =proj_no AND proj_no = proj_no VE
par_no =24); par_no =24);

ÖRNEK: Fatih’te oturan personelin çalıştığı projelerin adlarını ve yerlerini listele.

SELECT proj_ad,yer SEÇ proj_ad,yer
FROM proje GELİŞ proje
WHERE proj_no IN OLAN proj_no İÇİNDE
(SELECT proje_no (SEÇ proje_no
FROM personel,çalışma GELİŞ sosy_g_no = per_s_g_no
WHERE sosy_g_no = per_s_g_no OLAN sosy_g_no = per_s_g_no
AND adres LIKE “% fatih %”); VE adres BULUNAN “% fatih %);

UNION SÖZCÜĞÜ: UNION BİRLEŞİM
TANIM:İki ayrı SEÇ komutunun sonucunda elde edilen tabloların birleşimi işlemini gerçekleştirir.


ÖRNEK:Adı Ahmet ve Soyadı Caner olan kişi yada kişileri işletmenin yürüttüğü projelerde çalışan bir kişi (sıradan bir personel yada bölüm yöneticisi)olarak bulunduran projelerin isimlerini ve projelerin yürütüldüğü yerleri listele.

(SELECT proj_ad,yer (SEÇ proj_ad,yer
FROM proj,bölüm,personel GELİŞ proj,bölüm,personel
WHERE bl_no=bölüm_no AND OLAN bl_no=bölüm_no VE
y_sos gno = sosy_g_no y_sos gno = sosy_g_no
AND ad =”Ahmet”AND soyad =”Caner”) VE ad =”Ahmet” VE soyad =”Caner”)
UNION (SELECT proj_ad,yer BİRLEŞİM (SEÇ proj_ad,yer
FROM proje,çalışma,personel GELİŞ proje,çalışma,personel
WHERE proj_no = proje_no AND OLAN proj_no = proje_no VE
Per_s_g_no = sosy_g_no AND ad =”Ahmet” Per_s_g_no = sosy_g_no VE ad =”Ahmet”
AND soyad =”Caner”) VE soyad =”Caner”)

devam edecek
 

CoveRed

Kıdemli Üye
9 Eki 2008
2,451
7
!!! TANRI DAĞLARı !!!
sql devam

KOŞULLAR:
UNION (BİRLEŞİM) sözcüğü ile ,iki yada daha çok kişi SELECT (SEÇ)’in sonucu olan tabloların küme birleşimi işlemine tabi tutulması için 2 koşul gereklidir.
1)SELECT (SEÇ) komutları sonucunda elde edilecek tablolar aynı sayıda kolon içermelidirler.
2)Sonuç tabloları karşılıklı olarak kolonların aynı veri tipi ve aynı genişlikte olmalıdır.

ANY : ANY HER HANGİ BİRİ
ÖRNEK:Satış bölümünde çalışan personelin her hangi birinden daha düşük maaş alan ve mühendislik bölümündeki kişileri listele.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt < ANY OLAN brüt < HER HANGİ BİRİ
(SELECT brüt (SEÇ brüt
FROM personel GELİŞ personel
WHERE böl_no = 2) AND OLAN böl_no = 2) VE
böl_no =1; böl_no = 1;

EŞ DEĞERİ İFADE:
SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt < (SELECT MAX (brüt ) OLAN brüt < (SEÇ ÜST (brüt )
FROM personel GELİŞ personel
WHERE böl_no = 2) AND böl_no =1; OLAN böl_no = 2)VE böl_no =1;

ALL: ALL HEPSİ
ÖRNEK:Satış bölümünde çalışan ve mühendislik bölümündeki personelin hepsinden daha fazla maaş alan personeli listele.Bu örnekte satış bölümü kodu = 2 ve mühendislik bölümü kodu = 1 alınmıştır.
YAPILIŞ YOLU:

1)SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > OLAN brüt >
ALL (SELECT brüt HERSİ (SEÇ brüt
FROM personel GELİŞ personel
WHERE böl_no = 1) OLAN böl_no =1)
AND böl_no = 2; VE böl_no =2;

2)SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE brüt > OLAN brüt >
(SELECT MAX (brüt) (SEÇ ÜST (brüt)
FROM personel GELİŞ personel
WHERE böl_no = 1) OLAN böl_no = 1)
AND böl_no =2; VE böl_no =2;
EXISTS: EXISTS MEVCUT
VE ,VEYA ,DEĞİL operatörleri ile kullanılabilir.

ÖRNEK: 27 no’lu parçayı satan satıcılarla ilişkili tüm bilgileri listele.

SELECT * SEÇ *
FROM satıcı GELİŞ satıcı
WHERE EXISTS OLAN MEVCUT
(SELECT * (SEÇ *
FROM par_sat GELİŞ par_sat
WHERE sat_no = satıcı_n OLAN sat_no = satıcı_n
AND parça_n =27); VE parça_n = 27);

NOT EXISTS: NOT EXISTS MEVCUT DEĞİL
VE ,VEYA ,DEĞİL operatörleri ile kullanılabilir.

ÖRNEK: 27 no’lu parçayı satmayan satıcılar kimlerdir?

SELECT * SEÇ *
FROM satıcı GELİŞ satıcı
WHERE NOT EXISTS OLAN MEVCUT DEĞİL
(SELECT * (SEÇ *
FROM par_sat GELİŞ par_sat
WHERE sat_no = satıcı_n OLAN sat_no = satıcı_n
AND parça_n =27); VE parça_n = 27);
EXCEPT:

EXCEPT FARKLI
Tablo-1 - Tablo-2 işlemi sonuç(iki kümenin farkı) elde edilecek tabloda,Tablo-1’de bulunup, Tablo-2’de bulunmayan veriler mevcut olacaktır.

ÖRNEK:Satış bölümündeki personel adlarından,mühendislik bölümünde bulunmayanları listele.

SELECT * FROM SEÇ * GELİŞ
(SELECT ad FROM personel (SEÇ ad GELİŞ personel
WHERE bol_no=1 OLAN böl_no = 1
EXCEPT FARKLI
SELECT ad FROM personel SEÇ ad GELİŞ personel
WHERE bol_no =2); OLAN böl_no =2);

INTERSECT: INTERSECT KESİŞİM

ÖRNEK: Hem Ankara’da,hem de İstanbul’daki projelerde görev alan bölümleri listele.

SELECT * FROM SEÇ * GELİŞ
(SELECT bl_no FROM proje (SEÇ bl_no GELİŞ proje
WHERE yer LIKE “%Ankara%” OLAN yer BULUNAN “%Ankara%”
INTERSECT KESİŞİM
SELECT bl_no FROM proje SEÇ bl_no GELİŞ proje
WHERE yer LIKE “%İstanbul%”); OLAN yer BULUNAN “%İstanbul%”);

SAVE TO TEMP: SAVE TO TEMP SAKLA
ÖRNEK: Bayan personeli,bayan adlı bir tablo içinde sakla.

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE cins =.F. SAVE TO TEMP bayan; OLAN cins =.Y. SAKLA bayan;

KEEP: KEEP KALICI
ÖRNEK:

SELECT * SEÇ *
FROM personel GELİŞ personel
WHERE cins = .F. OLAN cins =.Y.
SAVE TO TEMP bayan KEEP; GEÇİCİ SAKLA bayan KALICI;
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.