Sql Sorgu OluŞturma

Katılım
10 Nisan 2008
Mesajlar
2
Excel Vers. ve Dili
access
Yardımınıza ihtiyacm vaar :( sqlde sorgu oluşturmalıyım bu benim haftalık projem örnek çalışma eklermisiniz yada nasıl oluşturacagım hakkında bilgi verirmisiniz :'( hiç bi bilgim yoook :'( lütfen çok aciiiil
 

beab05

Özel Üye
Katılım
19 Mart 2007
Mesajlar
1,418
Excel Vers. ve Dili
Office 2013
Merhaba;
Alttaki bilgiler "ceviz.net" ten alıntıdır.

SELECT / FROM / ORDER BY / DESC / ASC / DISTINCT


SELECT deyimi, Veritabanı içersinde olan ve FROM deyimi ile belirtilmiş olan Table içinden kayıtları seçmemizi sağlar. Burdan da veritabanını FROM ile bulduğumuz sonucunu çıkartabiliriz.Bunu bir örnekle daha iyi anlayacağız;

SELECT * FROM ceviz_uye

Bu sorguda, "*" işareti ile tıpkı DOS da da olduğu gibi, varolan bütün kayıtları FROM'la belirtilen Table içinden AL diyoruz.Bu sorgu, çok genel bir sorgudur. Netde zamanın bunca değerli olduğu bi zamanda şayet bu sorguyu -gereksiz- kullanırsanız, ziyaretçinizin bidaha sitenizin civarından bile geçmemesini sağlayabilirsiniz, Neden? Bunuda Tablelarımıza sadık kalarak bir örnekle Açıklayayım;
Nette sadece üyelerinizin adını, soyadını ve üye numarasını görmek, göstermek istiyorsunuz. Bunun için "*" imini kullanırsak eğer, server gerekenden çok kayıt'a ulaşacağı için, olması gerektiğinden daha uzun sürede sayfayı gösterecek ve böylece ziyaretçimizi siteden uzaklaştıracaktır.Çok sadık bir ziyaretçi ise eğer, o linkden uzak duracaktır.

SELECT * FROM ceviz_uye
SELECT uye,ad,soyad FROM ceviz_uye

SQL Sorgulama Dili ile verileri Artan ve Azalan şekilde sıralamamızda mümkündür.Bu sıralama harflerde alfabetik olarak ilk harfden son harfe veya son harfden ilk harfe,Sayılarda büyükden küçüğe veya küçükden büyüğe, tarihlerde yakın tarihden uzak olan tarihe veya uzak olan tarihden yakın tarih'e sıralama yapılabilir. Bu sıralama hangi veri kayıtlarına göre yapılacaksa ORDER BY deyimi ile belirtilir.Sıralama küçükden büyüğe doğru, ilkden sona doğru yapılacaksa ASC deyimi eklenir.tersi, sıralama büyükden küçüğe doğru, sondan ilke doğru yapılacaksa DESC deyimi kullanılır.
Bunları birer örnekle daha iyi kavrayacağız.

SELECT uye,ad,soyad,dtarihi FROM ceviz_uye ORDER BY ad ASC
Burada İsim kayıtları alfabetik olacak şekilde veriler sıralanıyor.

SELECT uye,ad,soyad,dtarihi FROM ceviz_uye ORDER BY uye ASC
Burada ilk üyeden son üyeye doğru sıralama yapılıyor.

SELECT uye,ad,soyad,dtarihi FROM ceviz_uye ORDER BY dtarihi ASC
Burada Doğum tarihi önceliğine göre sıralama yapılıyor.Önce doğan, ilk sırada...



SELECT uye,ad,soyad,dtarihi FROM ceviz_uye ORDER BY ad DESC
Burada İsim kayıtları sondan başa doğru alfabetik olacak şekilde veriler sıralanıyor.

SELECT uye,ad,soyad,dtarihi FROM ceviz_uye ORDER BY uye DESC
Burada son üyeden ilk üyeye doğru sıralama yapılıyor.

SELECT uye,ad,soyad,dtarihi FROM ceviz_uye ORDER BY dtarihi DESC
Burada Doğum tarihi önceliğine göre sıralama yapılıyor.En son doğan, ilk sırada

Örnekler çoğaltılabilir. Fakat temelde sıralama ORDER BY'a bağlı olarak, ASC ve DESC ile bu şekilde yapılır.Şayet sıralama yaparken birbiri ile eş olanların, aynı olanların görüntülenmesini istemiyorsanız. SQL bu sorguyla aynı olan verilerden sadece birini, sıralamaya göre ilk okuduğunu ekranda gösterir.Bunu DISTINCT deyimi ile yapar.Bu şekilde kategorilerin öğrenilmesi oldukça kolaylaşır. Örnek olarak veritabanımız içinde bulunan meslek gruplarını inceleyelim:

SELECT DISTINCT meslek FROM uye ORDER BY meslek DESC

Kategori gösterimi yapılırken Table üzerinden sadece sınıflandırmanın yapılacağı veritürü belirtilir.Aksi bir durum hataya sebebiyet verir.

WHERE / OR / AND / NOT / IN
Bir şart doğrultusunda verilerimizi sıralamak için WHERE deyimini kullanırız.Şarta bağlı kullanbileceğimiz operatörler ise şunlardır;

> Büyük
>= Büyük Eşit
< K&#252;&#231;&#252;k
<= K&#252;&#231;&#252;k E&#351;it
= E&#351;it
<> Farkl&#305;
Kar&#351;&#305;la&#351;t&#305;rma Say&#305;larda(integer) oldu&#287;u gibi, Metinlerde(String) tek t&#305;rnak i&#231;inde, Tarihlerde #(sharp) i&#351;aretleri aras&#305;nda yaz&#305;lmal&#305;d&#305;r sorguya. Bu kar&#351;&#305;la&#351;t&#305;rmalar opsiyonel olarak, istedi&#287;iniz &#351;ekilde yapabilirsiniz.&#304;lk &#246;rnek olarak Mesle&#287;i Bas&#305;n/Yay&#305;n olan &#252;yelerimizi listeliyelim:

SELECT ad,soyad,meslek FROM uye WHERE meslek='bas&#305;n/yay&#305;n' ORDER BY ad ASC


&#220;yelerimizi Do&#287;um Tarihlerini baz alarak, &#214;rnek olarak ve 1 Ocak 1978'den k&#252;&#231;&#252;k ya&#351;ta olanlar&#305; s&#305;ralayal&#305;m.

SELECT ad,soyad,dtarihi FROM uye WHERE dtarihi > #01/01/1978# ORDER BY dtarihi ASC


Mesle&#287;i Serbest olup Do&#287;um Tarihi 1.1.1965'den sonra olanlar&#305; g&#246;r&#252;nt&#252;lemek i&#231;in sorgumuz &#351;&#246;yle olmal&#305;;

SELECT ad,soyad,meslek,dtarihi FROM uye
WHERE dtarihi > #01/01/1965# AND meslek='serbest' ORDER BY dtarih ASC


Mesle&#287;i Bas&#305;n/Yay&#305;n olanlarla beraber, 1980'den sonra do&#287;anlar&#305; beraber g&#246;sterelim tablomuzda, ama unutmayal&#305;m ki Mesle&#287;i Bas&#305;n/Yay&#305;n olup 1980'den &#246;nce do&#287;anlarda tablomuzda g&#246;r&#252;lecek, Neden?

SELECT ad,soyad,meslek,dtarihi FROM uye
WHERE dtarihi > #01/01/1980# OR meslek='bas&#305;n/yay&#305;n' ORDER BY dtarih ASC


Bu &#351;ekilde &#246;rneklerimizi istedi&#287;imiz &#351;ekilde &#231;o&#287;altabiliriz.Scripting dillerinde kulland&#305;&#287;&#305;m&#305;z operat&#246;rlerden bir fark&#305; olmad&#305;&#287;&#305; a&#231;&#305;kca g&#246;r&#252;l&#252;yor.
IN de&#287;imi ile bir verik&#252;mesi tan&#305;mlay&#305;p, birden fazla sorguyu ayn&#305; anda yapt&#305;rabiliriz.&#214;rnek olarak tablomuzdan mesle&#287;i Bas&#305;n/Yay&#305;n ve Serbest olmayan ve 01.01.1979 y&#305;l&#305;ndan &#246;nce do&#287;mu&#351; olanlar&#305;, isimlerine g&#246;re listeleyelim;

SELECT ad,soyad,meslek,dtarihi FROM uye
WHERE NOTmeslek IN('bas&#305;n/yay&#305;n','serbest') AND dtarihi > #01/01/1979#
ORDER BY ad ASC


Bu operat&#246;r ve sorgular&#305; diledi&#287;imiz kadar kullan&#305;p verilerimizi s&#252;zebiliriz.olay&#305; kavraman&#305;n tek &#351;art&#305; bolca &#246;rnek yapmakt&#305;r.



LIKE


Tablelar&#305;m&#305;z i&#231;inde bulmam&#305;z gereken verileri LIKE deyimi ile arar&#305;z.Arama tek s&#252;tun veya OR la braber bir&#231;ok s&#252;tunda yap&#305;labilir. Arama kelime olarak yap&#305;lacaksa kelime t&#305;rnak i&#231;ersinde yaz&#305;l&#305;r ve sorgu &#231;al&#305;&#351;t&#305;r&#305;l&#305;r. Yok e&#287;er, i&#231;inde belirtti&#287;imiz karakterlerin ge&#231;ti&#287;i bir sorgulama yapmak istiyorsak, arayaca&#287;&#305;m&#305;z kelimeyi &#37; i&#351;aretleri aras&#305;na yazar&#305;z. &#214;rnek olarak uye numaras&#305; 128 olan &#252;yenin bilgilerini listeleyelim:

SELECT * FROM ceviz_uye WHERE uye LIKE '%128%'


G&#246;rd&#252;&#287;&#252;n&#252;z gibi sadece Uye numaras&#305; olan &#252;ye ekranda g&#246;sterildi. Bu &#351;ekilde kelimelerde aratabiliriz demi&#351;tik.Buna &#246;rnek olarak Table'&#305;m&#305;z i&#231;inde ad,soyad,meslek kay&#305;tkar&#305; i&#231;erisinde 'de' kelimesi ge&#231;en verileri listeliyelim;

SELECT * FROM ceviz_uye WHERE ad LIKE '%de%'
OR soyad LIKE '%de%' OR meslek LIKE '%de%'

Bu formatla, site i&#231;i aramalardan, b&#252;y&#252;k veritaban&#305;n&#305;z i&#231;ersinde aramalar&#305;n&#305;za olduk&#231;a h&#305;zl&#305; sonu&#231;larla ziyaret&#231;inize veya intranetinizde y&#246;neticinize bilgi sunabilirsiniz.



SUM / COUNT / MAX / MIN / AVG
SUM ile varsay&#305;lan kay&#305;t dizileri aritmatik olarak toplan&#305;r.Yaln&#305;z ger&#231;ekle&#351;tirdi&#287;imiz ba&#287;lant&#305;ya ilave kodlar eklememiz gerekecektir.Benim sorguyu ger&#231;ekle&#351;tirdi&#287;im kodlar&#305; g&#246;rmek i&#231;in buraya t&#305;klaman&#305;z yeterlidir.

SELECT SUM(maas) FROM data


Toplam kay&#305;t say&#305;m&#305;z&#305; herhangi bir &#351;arta ba&#287;l&#305; olarak &#246;&#287;renmek istersekde COUNT deyimini kullan&#305;r&#305;z.Webde genelde anket scriptlerinde g&#246;r&#252;yoruz bu sorguyu.&#214;rnek olarak veritaban&#305;m&#305;zdan mesle&#287;i serbest ve bas&#305;n/yay&#305;n olanlar&#305;n say&#305;s&#305;n&#305; &#246;&#287;renelim;

SELECT COUNT(*) FROM uye WHERE meslek='Bas&#305;n/yay&#305;n' AND meslek='serbest'


Veri kay&#305;tlar&#305; aras&#305;nda eny&#252;ksek ve end&#252;&#351;&#252;k de&#287;erleri bulmak i&#231;in kulland&#305;&#287;&#305;m&#305;z deyimler MAX ve MIN de&#287;imleridir. &#214;rnek olarak, i&#351;yerimizde ilk &#231;al&#305;&#351;maya ba&#351;lam&#305;&#351; ve enson i&#351;e giri&#351; yapm&#305;&#351; personelin kayd&#305;n&#305; bulmak amac&#305; ile sorgumuzu d&#252;zenleyelim,
&#304;lk olarak &#351;irkete ilk giri&#351; yapan personelin giri&#351; tarihini bulal&#305;m;

</A> SELECT MIN(giris_tarihi) FROM uye


Ve &#351;imdide &#351;irketimize en son giri&#351; yapan personelin giri&#351; tarihini bulal&#305;m;

SELECT MAX(giris_tarihi) FROM uye


Say&#305;sal olarak tuttu&#287;umuz verilerin Aritmatik ortalamas&#305;n&#305; AVG deyimi ile &#246;&#287;renebiliriz. Anket ortalamalar&#305;, ortalama maas hesaplar&#305; ve bir &#231;ok uygulamada s&#305;kca kullan&#305;l&#305;r. &#214;rnek olarak uyelerimizin maaslar&#305;n&#305;n Aritmatik ortalamas&#305;n&#305; alal&#305;m;

SELECT AVG(maas) FROM uye

GROUP BY / HAVING

Bazen verilerimizi belli kategorilerde toplamak ve ona g&#246;re i&#351;lem yapmak ihtiyac&#305; duyar&#305;z.Verileri s&#305;n&#305;fland&#305;rmak amac&#305; ile GROUP BY deyimi kullan&#305;l&#305;r. Veritaban&#305;m&#305;z &#252;zerinde bulunan kay&#305;tlar&#305; Mesleki olarak s&#305;n&#305;fland&#305;ral&#305;m;

SELECT meslek FROM uye GROUP BY meslek


G&#246;rd&#252;&#287;&#252;n&#252;z gibi tekrarlanan veriler gruplar olu&#351;turularak 1 kez ekrana yaz&#305;larak tamam&#305; listelenmi&#351;.Bu grupland&#305;rma ile beraber bir &#351;art kullanmak istersek HAVING deyimini kullan&#305;r&#305;z.HAVING de&#287;imini kullan&#305;rken dikkat etmemiz gereken detay MIN,MAX, SUM,AVG ve COUNT ifadelerinden birini kullanma zorunlulu&#287;umuzdur. &#214;rnek olarak her mesle&#287;in en&#231;ok kazanan&#305;n&#305;n listesini mesleklere g&#246;re verelim ekrana;

SELECT meslek,MAX(maas) AS ceviz FROM ceviz_uye
GROUP BY meslek HAVING AVG(maas)>500000000
 
Katılım
10 Nisan 2008
Mesajlar
2
Excel Vers. ve Dili
access
tsk ederim arkada&#351;&#305;m saol
 
Üst