- Katılım
- 10 Nisan 2013
- Mesajlar
- 20,055
Veri ListelemeWHERE – koşullu olasılıklarGROUP BY- grup özellikleriORDER BY- kriter özellikleriLIMIT- veri alış sınırlandırma
Oluşturduğumuz tablo içerisindeki verileri listelemek için önce SELECT komutunu kullanıp, veri almak istediğimiz sütun adını giriyoruz FROM komutundan sonrada tablomuzun adını girip veri tabanındaki verileri listeliyoruz. SQL tablosunda birden çok sütunun verilerini listelemek için sütun adları arasına (,) konularak listeleme yapılır. Tablodaki tüm sütunların verilerini listelemek istediğimizde (*) parametresi kullanılır.
SELECT adi,soyadi FROM Tablo_adiSELECT*FROM Tablo_adi
Belirli bir sütundaki verileri alfabetik sıra ile listelemek istediğimizde ORDER BY veya GROUP BY komutu kullanılır.
ORDER BY komutunu tablo adından sonra girip alfabetik veya rakamsal olarak verilerin sıralanmasını istediğimiz sütun adını giriyoruzSELECT adi FROM tablo_adi ORDER BY adiVerilerimizi alfabetik veya sayısal olarak tersi bir şekilde sıralamak istediğimizde DESC komutundan yararlanıyoruz.Bu komut tersine sıralama yapılacak Sütun adını girdikten sonra yazılır.SELECT adi FROM tablo_adi ORDER BY soyadi DESC
Bazı durumlarda SQL tablosu içerisinde bulunan sütunlardaki verilerden birini veri girişi sıralamasına göre, diğerini de tersine çevirerek listelemek gerekebilir.
SELECT adi,soyadi FROM tablo_adi ORDER BY soyadi DESC,ASC
Kıyaslama ile Veri Listeleme
SQL’ de yer alan veri kümesi içerisinde istediğimiz veriyi listelemek istediğimizde WHERE kalıbından yararlanırız.SELECT*FROM tablo_adi WHERE adi=”Cihan”
Birden çok kriterle listeleme için OR veya AND parametrelerinden faydalanırızSELECT*FROM tablo_adi WHERE adi=”Cihan” AND soyadi “Kurşun”SELECT*FROM tablo_adi WHERE adi=”Oytun” OR soyadi ”Civelek”SELECT* FROM tablo_adi WHERE adi IN (“Cihan”,”Oytun”)
Sütundaki veriler arasında birden çok sınama yapacaksak OR parametresi kullanılacağına IN parametresi yardımı ile işimizi daha da kolaylaştırırız.= Sağdaki değer ile soldaki değer eşittir!= Sağdaki değer ile soldaki değer eşit değildir.< Sağdaki değer soldaki değerlerden büyüktür.> Sağdaki değer soldaki değerlerden küçüktür.<= Sağdaki değer soldaki değerle büyük veya eşittir.>= Sağdaki değer soldaki değerle küçük veya eşittir.<> Eşit değil, yok sayar.BETWEN Değer aralığı.IN Değişik verilerde seçme olanağı sunarAND Birden fazla sütunda sorgulama yapar “ve”OR Birden fazla sütunda sorgulama yapar “veya”LIKE Belirtilen sütunda arama yaparIS NULL Belirtilen sütunda boş olanları listeler.IS NOT NULL Belirtilen sütunda dolu olanları listeler.DESC Belirtilen sütundaki verileri belirli kriterlerin tersine listeler.ASC DESC komutunun tersi görevi üstlenir. SQL default olarak ASC olarak verileri listeler.
SELECT*FROM tablo_adi WHERE adi !=”Cihan”SELECT*FROM tablo_adi WHERE adi<>”Cihan”
Birinci komut satırı ile ikinci komut satırını çalıştırdığımızda aynı sonucu alırız.
SELEC*FROM tablo_adi WHERE no<5 GROUP BY no DESC
Üstte oluşturduğumuz SQL cümleciğinde görüldüğü gibi önce 5’ten küçük olan verileri seçiyoruz daha sonrada bu verileri tersine listelemek için ORDER BY no DESC komutu kullanıyoruz.
Soru: Adı Murat veya İlker soyadı Kara veya AK sıra numarası 5ve 5 ten küçük tüm verileri sıra numarası, adı ve soyadı kriterlerine göre listeleyerek verileri tersine çevirecek SQL komutunu yazın.Cevap:SELECT*FROM tablo_adi WHERE adi IN(“Murat”,İlker”) OR soyadi IN (“Kara”,”Ak”) OR no=<5 ORDER BY adi,soyadi,no DESC
SQL de belirli aralıklarla verileri listelemek istediğimizde BETWEEN komutundan yararlanılır.SELECT * FROM tablo_adi WHERE no BETWEEN 10 AND 15
BETWEEN kalıbı, sadece iki rakam arasındaki verileri listelemek için kullanılmaz. Bu komutla alfabetik karakterler arasında da sıralama yapılabilir.
SINIRLI VERİ LİSTELEMEVerilerimizin bizim istediğimiz aralıklarda listelenmesi için LIMIT komutu kullanılır.SELECT*FROM tablo_adi LIMIT 0,5
Örnekte görüldüğü üzere SQL’ deki verilerin ilk veri giriş sıralaması ile ilk 5veriyi listeliyoruz.Buradaki mantık genel programlama mantığı dışında ilk veri için sıra numarası 0 değildir.Tıpk ı günlük hayatta sayı sayıyormuş gibi hareket edebilir. Eğer veri kümesindeki verilerin ilk X adedini listeleyeceksek LIMIT komutuna tek X yazarak ta aynı sonucu alabiliriz. Yani 0 rakamını koymaya gerek yok.
SELECT*FROM veri LIMIT 8Veri listeleme programlama dilleriyle tüm verilere ulaşmak söz konusu olduğunda ikili parametre kullanılması gerekir. Onun için genel kullanım iki parametreli olandır. Belli bir miktarda veri olan bir tablodaki 50 veriden sonraki tüm verileri listelemek için ne yapacağız?
SELECT* FROM tablo_adi LIMIT 50,-1Bu komut satırında 50. Veriden sonraki tüm veriler listelenecektir.SELECT*FROM veri WHERE no<15 ORDER BY adi DESC LIMIT 4No sütunundaki verilerin 15’ den küçük ilk 4 veriyi , adi sütunundaki verilerin alfabetik sıralamasının tersi bir şekilde sıralama yapıyor.
Not: tek Tırnağın ayırt edici karakter olmadığını belirtmek için işareti kullanılır.
VERİ ARAMAGenel olarak SQL ‘ de arama fonksiyonunu yerine getirmek için LIKE kalıbı kullanılır. Yalnız bu komut tek başına bir anlam ifade etmez. SQL de arama yapmak istiyorsak hangi sütun içerisinde arama yapacağımızı belirtmek için WHERE kalıbının kullanılması gerekir.
SELECT adi FROM tablo_adi WHERE adi LİKE ‘%tun%’SELECT adi FROM tablo_adi WHERE adi LİKE ‘%tun’SELECT adi FROM tablo_adi WHERE adi LİKE ‘tun%’
MySQL de kullanabileceğimiz bir diğer komutta REGEXP komutudur. LIKE komutu sadece % işareti kullanılırken bu komutta daha çok karakter grupları kullanılır.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘^j’Adi kolonunda yer alan veriler içerisinde j harfi ile başlayan tüm veriler listelenmektedir. Eğer aramak istediğimiz veriler içerisinin herhangi bir yerinde arama yapmak istiyorsak herhangi bir karakter grubu kullanılmaz.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘j’
Bu komut satırı adi sütunu içerisinde j harfi içeren tüm verileri listeler.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘j$’‘j’ nin sonuna ‘$’ işareti konduğunda sadece ‘j’ ile biten veri listelenir.
Tablolar içerisindeki verileri oluşturdukları karakter sayılarına göre listeletmemiz mümkün Örneğin adi içerisinde 9 karakter içeren verileri listeletmemiz mümkün.Bu işlem için ^ işareti ile $ işaretinin yanında kaç karakter aramak istiyorsak o kadar nokta karakteri kullanılır.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘^………$’İstenilen noktayı tek tek yazmak yerine daha basit bir yöntem vardır. ‘{9}$’SELECT adi FROM tablo_adi WHERE adi REGEXP ‘^.{9}$’
İSTATİSTİKSEL VERİ LİSTELEMEMIN Sütundaki verilerin en küçüğünü seçerMAX Sütundaki verilerin en büyüğünü seçerSUM Sütundaki verileri toplarAVG Sütunlar arasındaki değerlerin aritmetik ortalamalarını verirCOUNT Tablodaki veri sayısını verirSTTDDEV Sütundaki verilerin standart sapmasını verirVARIANCE Sütundaki verilerin sayısını verir
(+) Toplama yapar(-) Çıkarma yapar.(/) Bölme yapar(*) Çarpma yapar(<) Büyüktür(>) Küçüktür(^) üst alma 2²
SQL de belirli bir sütundaki verileri toplamak için SUM komutu kullanılır.
SELECT SUM (no-1) FROM tablo_adiSELECT SUM (no-1) AS Toplam FROM tablo_adi
Bütün sütunlardaki verileri toplamak istediğimizde
SELECT SUM (no1+no2) FROM tablo_adiSELECT SUM (no1+ no2) AS Gtoplam FROM tablo_adi
Aritmetik ortalamalar için AVG komutu kullanılır
SELECT AVG(no1+no2)/2 AS Ortalama FROM tablo_adi WHERE id=1SELECT AVG (no1+no2)/2 AS tum_ortalama FROM tablo_adi
SQL de bulunan satır sayısını yani veri sayısını verir.
SELECT COUNT(*) AS veri_sayısı FROM tablo_adi
GROUP FONKSYONELLİĞİ
GROUP BY komutu ile SQL deki verileri belirli kriterlere göre numaralandırmak mümkün.
SELECT no3 , COUNT (no3) AS no FROM sayilar GROUP BY no3
No3 sütunundaki bulunan tüm verilerden kaçar adet olduğunu belirlemek COUNT ve GROUP BY komutlarını kullandık GROUP BY komutunu kullanarak istediğimiz istatistiğini tutturabiliriz. Şimdide GROUP BY fonksiyonelliğini kullanarak no3 ile no1 sütunundaki aynı verileri toplayalım
SELECT no3 SUM (no1) AS toplam FROM tablo_adi GROUP BY no3
Somut olarak bir örnek vermek gerekirse bir bölgede seçim yapıldığını var sayalım A,B,C adında üç parti seçimlere katıldığını göz önüne aldığımızda tüm illerde hangi parti kaç oy aldığını belirlemek istediğimizde GROUP BY komutundan yararlanırızARİZE3210AKARS4210ASİVAS3899BRİZE1210BKARS2007BSİVAS707CRİZE397CKARS8007CSİVAS1908
SELECT parti_adi AS isim, SUM (oy_sayisi) AS oy FROM tablo_adi GROUP BY parti_adi
Seçimlerde oy oranları 500 den fazla olan partileri listelemek istediğimizde HAVİNG kalıbını kullanırız.
İSİMOYA11319B3924C10312
SELECT parti_adi AS isim, SUM (oy_sayisi) AS oy FROM tablo_adi GROUP BY parti_adi HAVİNG SUM(oy_sayisi)>=5000
AYNI OLAN VERİLERİ AYIKLAMA
Veritabanı içerisinde aynı olan verileri listelemek istediğimiz durumda neler yapabiliriz.Mesela bir sanal alışveriş sitesi yapıyorsunuz ve aynı kategoride değişik markalardan değişik ürünler satmaktasınız. Her kategoride bulunana ürünleri listelemek için doğru bir kulanı olması gerek.Sanal alışveriş sitesinde 5 değişik marka televizyon tanıtıyorsanız ve ürünleri kriterlere göre listelemek istediğinizde düz veri listelemede tüm markalar listelenecektir. SQL de aynı kriterdeki verileri listelemek için DISTINCT sözcüğünden yararlanılır.
SELECT DISTINCT no3 FROM tablo_adiböylece aynı tür veriler kesinlikle olmayacak.
İSTATİSTİK ÇIKTILARI YUVARLAMA
Verilerin ortalamaları veya standart sapmalarını alırken küsuratlı sayıları tam sayıya çevirebilir.
SELECT AVG (no) AS düz_ortalama FROM tablo_adiFLOOR (AVG (no)) AS asagı_ortalama FROM tablo_adiCEIL(AVG(no)) AS yukarı_ortalama FROM tablo_adi
Düz Ortalama 43.5 Aşağı Ortalama 43 Yukarı Ortalama 44
Matematiksel işlemler
SELECT 2+2SELECT 3+5*8Bu örnekte dikkat edilecek tek unsur çarpma ve bölme işlemlerinin önce yapılmasıdır.
ABS(X)X in mutlak değeriSIGN(X)X negatifse -1 pozitifse 1 sıfırsa 0 değerini üretirMOD(X,Y)X in Y ile bölümünden kalanı verirCEILING(X)X i yukarı doğru yuvarlarFLOOR(X)X i aşağı doğru yuvarlarROUND(X)X i mantıksal olarak aşağı veya yukarı doğru yuvarlarLN(X)ex “ln”LOG2(X)X in 2 tabanında logaritmasıLOG10(X)X in 10 tabanında logaritmasıLOG(X,Y)X tabanlı logaritmanın Y sayısının değeri “LogxY” wLogxy=a xa=yPOW(X,Y)X in Y inci kuvveti “POWER de aynı işlevi görür.SQRT(X)X in kareköküPI()P sayısıLEAST(X,Y,Z)Dizinin en küçük değerini verirGREATEST(X,Y,Z)Dizinin en büyük değerini verirRADIANS(X)X derecesini radyana çevirirRAND(X)X in rastgele değerini üretirACOS(X)X in ters çevrilmiş kosinüsüASIN(X)X in ters çevrilmiş sinüsüATAN(X)X in ters çevrilmiş teğetiATAN2(X,Y)X ve Y bölümünün ters çevrilmiş teğetiCBRT(X)X in küp kökü SADECE POSTGRESQL için çalışırCOS(X)X in kosinüsüCOT(X)X in kotanjantıTAN(X)X in tanjantıDEGREES( r)Radyanın r derecesi (c)
UNİON İLE TABLOLARI BİRLEŞTİRME
Birden çok tablo içerisinde belirtilen sütun veya sütunlar içerisindeki verilerden birini almak kaydıyla verileri listelemek için kullanılır. Bu komut sadece birden çok tablodan aynı olan verileri listelemek için kullanılır.
SELECT no FROM tablo_adi UNİON SELECT no FROM tablo_adi1
UNION komutu ile tablodaki verilerde istatistiksel işlemlerde kullanılabilir. Mesela bir tablodaki en büyük veri ile diğer tablodaki en küçük veriyi listeleyebiliriz.
SELECT max(no) FROM tablo_adi UNION SELECT mın(no) FROM tablo_adi1
İKİ TABLODAN KIYAS YAPARAK VERİ LİSTELEMEKÖrneğin a tablosundaki en küçük değerin b tablosundaki en küçük değerinin b tablosundaki bu bu verileri listelemek istediğimizde aşağıdaki gibi bir kullanıma gitmemiz gerek.
A B15 2525 45 sayi=2535 5545 2555 25
SELECT * FROM a WHERE sayi = (SELECT min (sayi) FROM b)
SELECT sayi AS sonuc FROM a WHERE sayi BETWEEN (SELECT min (sayi) FROM b) AND (SELECT max (sayi) FROM b )
Burada b tablosundaki en küçük değer ile en büyük değer aralığındaki verileri a tablosundan çekiyoruz. Sonuç olarak b tablosundaki en küçük veri 25, en büyük veri ise 55 olduğu için a tablosunda ilk veri hariç tüm değerler listelenebilir.
SONUÇ25354555
TARİH ZAMAN FONKSİYONLARIDATE “2005-12-31 zamanın rakamsal değeriniTIME “00:00:00” zamanın saat değeriniTIMESTAMP “2005:12:30 00:00:00” zaman ve saatin aynı anda değerini verir
*** tarih alanında veri girerken dikkat etmemiz gereken bir husus, tarih alanını tutan DATE tipindeki alanlarda yıl ay gün şeklinde, saat içeriğini tutan TIME veri alanında ise saat dakika ve saniye olmak üzere elle veri girişinde bulunabiliriz. Günün tarihi ve saatini otomatik olarak veri girişinde gerçekleştirmek için NOW() komutunu tırnak içine almadan giriyoruz.
SELECT* FROM tablo_adi WHERE tarih <2002-01-01
Burada görüldüğü gibi SQL de tutulan tarihler içerisinde 2002-01-01 tarihinden küçük verileri işliyoruz
SELECT* FROM tablo_adi WHERE MONTH (tarih)=8
SQL de bulunan tablonun tarihleri içerisinde 8. Ay olan verileri listelemek için WHERE şartından sonra MONTH komutunu kullanıyoruz. Yıl alanını tespit etmek içinde WHILE komutundan sonra YEAR komutundan yararlanılır. Bulunduğumuz yılın SQL deki tabloda bulunan veriler arasında olanları listelemek içinse NOW() komutundan yararlanılır.
SELECT*FROM tablo_adi WHERE YEAR (tarih)=YEAR (NOW())
KOMUTAÇIKLAMADATETarih çıktısı verir 2003-10-19TIMESaat çıktısı verir 23:59:59DAYOFWEEKBelirtilen tarihin gün sayısını verir (Pazar günü 1 rakamı olarak listelenebilir.WEEKDAYBelirtilen tarihin gün sayısını verir(pazartesi 0 rakamı alınarak listelenebilir.DAYOF MONTHBelirtilen tarihin gün sayısını alırDAYOFYEARBelirtilen tarihin yılın kaçıncı günü olduğunu çıkarırMONTHBelirtilen tarihin ay rakamını alırDAYNAMEBelirtilen tarihin gün adını verir(Thursday gibi)MONTHNAMEBelirtilen tarihin ay adını verir (February gibi)WEEKBelirtilen tarihin kaçıncı hafta olduğunu gösterirYEARBelirtilen tarihin yılını çıkartırHOURBelirtilen zamanın saatini çıkartırMINUTEBelirtilen zamanın saatini çıkartırSECONDBelirtilen zamanın saniyesini çıkartırPERIOD_ADD(X,y)Belirtilen tarihte belirtilen ay sayısını eklerPERIOD_DIFF(X,y)Belirtilen tarihten belirtilen tarihi çıkartırDATE_ADD(X,INTERVAL,y)Belirtilen tarihe belirtilen “y” tip tarih ekler (y için : YEAR MONTH WEEK DAY ve komutlar kullanılırDATE_SUB(X,INTERVAL,y)Belirtilen tarihe belirtilen “y” tip tarih çıkartır(y için: YEAR MONTH WEEK DAY ve komutlar kullanılır
SQL i bir hesap makinesi olarak nasıl kullandığımızı göstermiştik SQL sayılar arasında hesap yapabileceği gibi harf ve tarihler arasında da hesap yapabilmesi mümkün.SELECT adi, dogum_tarihi, CURRENT_DATE as bugun,(YEAR(CURRENT_DATE)) –(YEAR(dogum_tarihi))-(RIGHT(CURRENT_DTE,5))
Oluşturduğumuz tablo içerisindeki verileri listelemek için önce SELECT komutunu kullanıp, veri almak istediğimiz sütun adını giriyoruz FROM komutundan sonrada tablomuzun adını girip veri tabanındaki verileri listeliyoruz. SQL tablosunda birden çok sütunun verilerini listelemek için sütun adları arasına (,) konularak listeleme yapılır. Tablodaki tüm sütunların verilerini listelemek istediğimizde (*) parametresi kullanılır.
SELECT adi,soyadi FROM Tablo_adiSELECT*FROM Tablo_adi
Belirli bir sütundaki verileri alfabetik sıra ile listelemek istediğimizde ORDER BY veya GROUP BY komutu kullanılır.
ORDER BY komutunu tablo adından sonra girip alfabetik veya rakamsal olarak verilerin sıralanmasını istediğimiz sütun adını giriyoruzSELECT adi FROM tablo_adi ORDER BY adiVerilerimizi alfabetik veya sayısal olarak tersi bir şekilde sıralamak istediğimizde DESC komutundan yararlanıyoruz.Bu komut tersine sıralama yapılacak Sütun adını girdikten sonra yazılır.SELECT adi FROM tablo_adi ORDER BY soyadi DESC
Bazı durumlarda SQL tablosu içerisinde bulunan sütunlardaki verilerden birini veri girişi sıralamasına göre, diğerini de tersine çevirerek listelemek gerekebilir.
SELECT adi,soyadi FROM tablo_adi ORDER BY soyadi DESC,ASC
Kıyaslama ile Veri Listeleme
SQL’ de yer alan veri kümesi içerisinde istediğimiz veriyi listelemek istediğimizde WHERE kalıbından yararlanırız.SELECT*FROM tablo_adi WHERE adi=”Cihan”
Birden çok kriterle listeleme için OR veya AND parametrelerinden faydalanırızSELECT*FROM tablo_adi WHERE adi=”Cihan” AND soyadi “Kurşun”SELECT*FROM tablo_adi WHERE adi=”Oytun” OR soyadi ”Civelek”SELECT* FROM tablo_adi WHERE adi IN (“Cihan”,”Oytun”)
Sütundaki veriler arasında birden çok sınama yapacaksak OR parametresi kullanılacağına IN parametresi yardımı ile işimizi daha da kolaylaştırırız.= Sağdaki değer ile soldaki değer eşittir!= Sağdaki değer ile soldaki değer eşit değildir.< Sağdaki değer soldaki değerlerden büyüktür.> Sağdaki değer soldaki değerlerden küçüktür.<= Sağdaki değer soldaki değerle büyük veya eşittir.>= Sağdaki değer soldaki değerle küçük veya eşittir.<> Eşit değil, yok sayar.BETWEN Değer aralığı.IN Değişik verilerde seçme olanağı sunarAND Birden fazla sütunda sorgulama yapar “ve”OR Birden fazla sütunda sorgulama yapar “veya”LIKE Belirtilen sütunda arama yaparIS NULL Belirtilen sütunda boş olanları listeler.IS NOT NULL Belirtilen sütunda dolu olanları listeler.DESC Belirtilen sütundaki verileri belirli kriterlerin tersine listeler.ASC DESC komutunun tersi görevi üstlenir. SQL default olarak ASC olarak verileri listeler.
SELECT*FROM tablo_adi WHERE adi !=”Cihan”SELECT*FROM tablo_adi WHERE adi<>”Cihan”
Birinci komut satırı ile ikinci komut satırını çalıştırdığımızda aynı sonucu alırız.
SELEC*FROM tablo_adi WHERE no<5 GROUP BY no DESC
Üstte oluşturduğumuz SQL cümleciğinde görüldüğü gibi önce 5’ten küçük olan verileri seçiyoruz daha sonrada bu verileri tersine listelemek için ORDER BY no DESC komutu kullanıyoruz.
Soru: Adı Murat veya İlker soyadı Kara veya AK sıra numarası 5ve 5 ten küçük tüm verileri sıra numarası, adı ve soyadı kriterlerine göre listeleyerek verileri tersine çevirecek SQL komutunu yazın.Cevap:SELECT*FROM tablo_adi WHERE adi IN(“Murat”,İlker”) OR soyadi IN (“Kara”,”Ak”) OR no=<5 ORDER BY adi,soyadi,no DESC
SQL de belirli aralıklarla verileri listelemek istediğimizde BETWEEN komutundan yararlanılır.SELECT * FROM tablo_adi WHERE no BETWEEN 10 AND 15
BETWEEN kalıbı, sadece iki rakam arasındaki verileri listelemek için kullanılmaz. Bu komutla alfabetik karakterler arasında da sıralama yapılabilir.
SINIRLI VERİ LİSTELEMEVerilerimizin bizim istediğimiz aralıklarda listelenmesi için LIMIT komutu kullanılır.SELECT*FROM tablo_adi LIMIT 0,5
Örnekte görüldüğü üzere SQL’ deki verilerin ilk veri giriş sıralaması ile ilk 5veriyi listeliyoruz.Buradaki mantık genel programlama mantığı dışında ilk veri için sıra numarası 0 değildir.Tıpk ı günlük hayatta sayı sayıyormuş gibi hareket edebilir. Eğer veri kümesindeki verilerin ilk X adedini listeleyeceksek LIMIT komutuna tek X yazarak ta aynı sonucu alabiliriz. Yani 0 rakamını koymaya gerek yok.
SELECT*FROM veri LIMIT 8Veri listeleme programlama dilleriyle tüm verilere ulaşmak söz konusu olduğunda ikili parametre kullanılması gerekir. Onun için genel kullanım iki parametreli olandır. Belli bir miktarda veri olan bir tablodaki 50 veriden sonraki tüm verileri listelemek için ne yapacağız?
SELECT* FROM tablo_adi LIMIT 50,-1Bu komut satırında 50. Veriden sonraki tüm veriler listelenecektir.SELECT*FROM veri WHERE no<15 ORDER BY adi DESC LIMIT 4No sütunundaki verilerin 15’ den küçük ilk 4 veriyi , adi sütunundaki verilerin alfabetik sıralamasının tersi bir şekilde sıralama yapıyor.
Not: tek Tırnağın ayırt edici karakter olmadığını belirtmek için işareti kullanılır.
VERİ ARAMAGenel olarak SQL ‘ de arama fonksiyonunu yerine getirmek için LIKE kalıbı kullanılır. Yalnız bu komut tek başına bir anlam ifade etmez. SQL de arama yapmak istiyorsak hangi sütun içerisinde arama yapacağımızı belirtmek için WHERE kalıbının kullanılması gerekir.
SELECT adi FROM tablo_adi WHERE adi LİKE ‘%tun%’SELECT adi FROM tablo_adi WHERE adi LİKE ‘%tun’SELECT adi FROM tablo_adi WHERE adi LİKE ‘tun%’
MySQL de kullanabileceğimiz bir diğer komutta REGEXP komutudur. LIKE komutu sadece % işareti kullanılırken bu komutta daha çok karakter grupları kullanılır.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘^j’Adi kolonunda yer alan veriler içerisinde j harfi ile başlayan tüm veriler listelenmektedir. Eğer aramak istediğimiz veriler içerisinin herhangi bir yerinde arama yapmak istiyorsak herhangi bir karakter grubu kullanılmaz.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘j’
Bu komut satırı adi sütunu içerisinde j harfi içeren tüm verileri listeler.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘j$’‘j’ nin sonuna ‘$’ işareti konduğunda sadece ‘j’ ile biten veri listelenir.
Tablolar içerisindeki verileri oluşturdukları karakter sayılarına göre listeletmemiz mümkün Örneğin adi içerisinde 9 karakter içeren verileri listeletmemiz mümkün.Bu işlem için ^ işareti ile $ işaretinin yanında kaç karakter aramak istiyorsak o kadar nokta karakteri kullanılır.
SELECT adi FROM tablo_adi WHERE adi REGEXP ‘^………$’İstenilen noktayı tek tek yazmak yerine daha basit bir yöntem vardır. ‘{9}$’SELECT adi FROM tablo_adi WHERE adi REGEXP ‘^.{9}$’
İSTATİSTİKSEL VERİ LİSTELEMEMIN Sütundaki verilerin en küçüğünü seçerMAX Sütundaki verilerin en büyüğünü seçerSUM Sütundaki verileri toplarAVG Sütunlar arasındaki değerlerin aritmetik ortalamalarını verirCOUNT Tablodaki veri sayısını verirSTTDDEV Sütundaki verilerin standart sapmasını verirVARIANCE Sütundaki verilerin sayısını verir
(+) Toplama yapar(-) Çıkarma yapar.(/) Bölme yapar(*) Çarpma yapar(<) Büyüktür(>) Küçüktür(^) üst alma 2²
SQL de belirli bir sütundaki verileri toplamak için SUM komutu kullanılır.
SELECT SUM (no-1) FROM tablo_adiSELECT SUM (no-1) AS Toplam FROM tablo_adi
Bütün sütunlardaki verileri toplamak istediğimizde
SELECT SUM (no1+no2) FROM tablo_adiSELECT SUM (no1+ no2) AS Gtoplam FROM tablo_adi
Aritmetik ortalamalar için AVG komutu kullanılır
SELECT AVG(no1+no2)/2 AS Ortalama FROM tablo_adi WHERE id=1SELECT AVG (no1+no2)/2 AS tum_ortalama FROM tablo_adi
SQL de bulunan satır sayısını yani veri sayısını verir.
SELECT COUNT(*) AS veri_sayısı FROM tablo_adi
GROUP FONKSYONELLİĞİ
GROUP BY komutu ile SQL deki verileri belirli kriterlere göre numaralandırmak mümkün.
SELECT no3 , COUNT (no3) AS no FROM sayilar GROUP BY no3
No3 sütunundaki bulunan tüm verilerden kaçar adet olduğunu belirlemek COUNT ve GROUP BY komutlarını kullandık GROUP BY komutunu kullanarak istediğimiz istatistiğini tutturabiliriz. Şimdide GROUP BY fonksiyonelliğini kullanarak no3 ile no1 sütunundaki aynı verileri toplayalım
SELECT no3 SUM (no1) AS toplam FROM tablo_adi GROUP BY no3
Somut olarak bir örnek vermek gerekirse bir bölgede seçim yapıldığını var sayalım A,B,C adında üç parti seçimlere katıldığını göz önüne aldığımızda tüm illerde hangi parti kaç oy aldığını belirlemek istediğimizde GROUP BY komutundan yararlanırızARİZE3210AKARS4210ASİVAS3899BRİZE1210BKARS2007BSİVAS707CRİZE397CKARS8007CSİVAS1908
SELECT parti_adi AS isim, SUM (oy_sayisi) AS oy FROM tablo_adi GROUP BY parti_adi
Seçimlerde oy oranları 500 den fazla olan partileri listelemek istediğimizde HAVİNG kalıbını kullanırız.
İSİMOYA11319B3924C10312
SELECT parti_adi AS isim, SUM (oy_sayisi) AS oy FROM tablo_adi GROUP BY parti_adi HAVİNG SUM(oy_sayisi)>=5000
AYNI OLAN VERİLERİ AYIKLAMA
Veritabanı içerisinde aynı olan verileri listelemek istediğimiz durumda neler yapabiliriz.Mesela bir sanal alışveriş sitesi yapıyorsunuz ve aynı kategoride değişik markalardan değişik ürünler satmaktasınız. Her kategoride bulunana ürünleri listelemek için doğru bir kulanı olması gerek.Sanal alışveriş sitesinde 5 değişik marka televizyon tanıtıyorsanız ve ürünleri kriterlere göre listelemek istediğinizde düz veri listelemede tüm markalar listelenecektir. SQL de aynı kriterdeki verileri listelemek için DISTINCT sözcüğünden yararlanılır.
SELECT DISTINCT no3 FROM tablo_adiböylece aynı tür veriler kesinlikle olmayacak.
İSTATİSTİK ÇIKTILARI YUVARLAMA
Verilerin ortalamaları veya standart sapmalarını alırken küsuratlı sayıları tam sayıya çevirebilir.
SELECT AVG (no) AS düz_ortalama FROM tablo_adiFLOOR (AVG (no)) AS asagı_ortalama FROM tablo_adiCEIL(AVG(no)) AS yukarı_ortalama FROM tablo_adi
Düz Ortalama 43.5 Aşağı Ortalama 43 Yukarı Ortalama 44
Matematiksel işlemler
SELECT 2+2SELECT 3+5*8Bu örnekte dikkat edilecek tek unsur çarpma ve bölme işlemlerinin önce yapılmasıdır.
ABS(X)X in mutlak değeriSIGN(X)X negatifse -1 pozitifse 1 sıfırsa 0 değerini üretirMOD(X,Y)X in Y ile bölümünden kalanı verirCEILING(X)X i yukarı doğru yuvarlarFLOOR(X)X i aşağı doğru yuvarlarROUND(X)X i mantıksal olarak aşağı veya yukarı doğru yuvarlarLN(X)ex “ln”LOG2(X)X in 2 tabanında logaritmasıLOG10(X)X in 10 tabanında logaritmasıLOG(X,Y)X tabanlı logaritmanın Y sayısının değeri “LogxY” wLogxy=a xa=yPOW(X,Y)X in Y inci kuvveti “POWER de aynı işlevi görür.SQRT(X)X in kareköküPI()P sayısıLEAST(X,Y,Z)Dizinin en küçük değerini verirGREATEST(X,Y,Z)Dizinin en büyük değerini verirRADIANS(X)X derecesini radyana çevirirRAND(X)X in rastgele değerini üretirACOS(X)X in ters çevrilmiş kosinüsüASIN(X)X in ters çevrilmiş sinüsüATAN(X)X in ters çevrilmiş teğetiATAN2(X,Y)X ve Y bölümünün ters çevrilmiş teğetiCBRT(X)X in küp kökü SADECE POSTGRESQL için çalışırCOS(X)X in kosinüsüCOT(X)X in kotanjantıTAN(X)X in tanjantıDEGREES( r)Radyanın r derecesi (c)
UNİON İLE TABLOLARI BİRLEŞTİRME
Birden çok tablo içerisinde belirtilen sütun veya sütunlar içerisindeki verilerden birini almak kaydıyla verileri listelemek için kullanılır. Bu komut sadece birden çok tablodan aynı olan verileri listelemek için kullanılır.
SELECT no FROM tablo_adi UNİON SELECT no FROM tablo_adi1
UNION komutu ile tablodaki verilerde istatistiksel işlemlerde kullanılabilir. Mesela bir tablodaki en büyük veri ile diğer tablodaki en küçük veriyi listeleyebiliriz.
SELECT max(no) FROM tablo_adi UNION SELECT mın(no) FROM tablo_adi1
İKİ TABLODAN KIYAS YAPARAK VERİ LİSTELEMEKÖrneğin a tablosundaki en küçük değerin b tablosundaki en küçük değerinin b tablosundaki bu bu verileri listelemek istediğimizde aşağıdaki gibi bir kullanıma gitmemiz gerek.
A B15 2525 45 sayi=2535 5545 2555 25
SELECT * FROM a WHERE sayi = (SELECT min (sayi) FROM b)
SELECT sayi AS sonuc FROM a WHERE sayi BETWEEN (SELECT min (sayi) FROM b) AND (SELECT max (sayi) FROM b )
Burada b tablosundaki en küçük değer ile en büyük değer aralığındaki verileri a tablosundan çekiyoruz. Sonuç olarak b tablosundaki en küçük veri 25, en büyük veri ise 55 olduğu için a tablosunda ilk veri hariç tüm değerler listelenebilir.
SONUÇ25354555
TARİH ZAMAN FONKSİYONLARIDATE “2005-12-31 zamanın rakamsal değeriniTIME “00:00:00” zamanın saat değeriniTIMESTAMP “2005:12:30 00:00:00” zaman ve saatin aynı anda değerini verir
*** tarih alanında veri girerken dikkat etmemiz gereken bir husus, tarih alanını tutan DATE tipindeki alanlarda yıl ay gün şeklinde, saat içeriğini tutan TIME veri alanında ise saat dakika ve saniye olmak üzere elle veri girişinde bulunabiliriz. Günün tarihi ve saatini otomatik olarak veri girişinde gerçekleştirmek için NOW() komutunu tırnak içine almadan giriyoruz.
SELECT* FROM tablo_adi WHERE tarih <2002-01-01
Burada görüldüğü gibi SQL de tutulan tarihler içerisinde 2002-01-01 tarihinden küçük verileri işliyoruz
SELECT* FROM tablo_adi WHERE MONTH (tarih)=8
SQL de bulunan tablonun tarihleri içerisinde 8. Ay olan verileri listelemek için WHERE şartından sonra MONTH komutunu kullanıyoruz. Yıl alanını tespit etmek içinde WHILE komutundan sonra YEAR komutundan yararlanılır. Bulunduğumuz yılın SQL deki tabloda bulunan veriler arasında olanları listelemek içinse NOW() komutundan yararlanılır.
SELECT*FROM tablo_adi WHERE YEAR (tarih)=YEAR (NOW())
KOMUTAÇIKLAMADATETarih çıktısı verir 2003-10-19TIMESaat çıktısı verir 23:59:59DAYOFWEEKBelirtilen tarihin gün sayısını verir (Pazar günü 1 rakamı olarak listelenebilir.WEEKDAYBelirtilen tarihin gün sayısını verir(pazartesi 0 rakamı alınarak listelenebilir.DAYOF MONTHBelirtilen tarihin gün sayısını alırDAYOFYEARBelirtilen tarihin yılın kaçıncı günü olduğunu çıkarırMONTHBelirtilen tarihin ay rakamını alırDAYNAMEBelirtilen tarihin gün adını verir(Thursday gibi)MONTHNAMEBelirtilen tarihin ay adını verir (February gibi)WEEKBelirtilen tarihin kaçıncı hafta olduğunu gösterirYEARBelirtilen tarihin yılını çıkartırHOURBelirtilen zamanın saatini çıkartırMINUTEBelirtilen zamanın saatini çıkartırSECONDBelirtilen zamanın saniyesini çıkartırPERIOD_ADD(X,y)Belirtilen tarihte belirtilen ay sayısını eklerPERIOD_DIFF(X,y)Belirtilen tarihten belirtilen tarihi çıkartırDATE_ADD(X,INTERVAL,y)Belirtilen tarihe belirtilen “y” tip tarih ekler (y için : YEAR MONTH WEEK DAY ve komutlar kullanılırDATE_SUB(X,INTERVAL,y)Belirtilen tarihe belirtilen “y” tip tarih çıkartır(y için: YEAR MONTH WEEK DAY ve komutlar kullanılır
SQL i bir hesap makinesi olarak nasıl kullandığımızı göstermiştik SQL sayılar arasında hesap yapabileceği gibi harf ve tarihler arasında da hesap yapabilmesi mümkün.SELECT adi, dogum_tarihi, CURRENT_DATE as bugun,(YEAR(CURRENT_DATE)) –(YEAR(dogum_tarihi))-(RIGHT(CURRENT_DTE,5))