SQL - SELECT SORGUSU
Select sorguları bir veya daha fazla tablodan istenilen bilgileri alarak görüntülemek için kullanılır. Select sorguları sadece listeleme işi yapar, tablo(ların) orjinal hallerinde bir değişiklik yaratmazlar.
Select komutundan sonra görüntülenecek alanların ismi yazılır.
From komutu ile bu alanların yer aldığı tablonun ismi belirtilir.
Eğer kayıtlara sınırlama getirilecek ise Where komutu ile birlikte koşul belirtilir.
Kayıtların artan ya da azalan şekilde sıralanarak listelenmesi isteniyorsa Order By komutu kullanılır.
Aşağıda örnek bir tablo oluşturulup bu tablo için örnek sorgular yazılmıştır.
Tablo Adı: Personel
kimlik
|
adi
|
soyadi
|
diplomanotu
|
cinsiyeti
|
sehir
|
1
|
Ahmet
|
Öztürk
|
38
|
E
|
İstanbul
|
2
|
Veysel
|
Göktürk
|
47
|
E
|
Ankara
|
3
|
Şükran
|
Şentürk
|
74
|
K
|
Sakarya
|
4
|
Ahmet
|
Ali
|
84
|
E
|
Çanakkale
|
5
|
Salih
|
Yılmaz
|
|
E
|
İstanbul
|
SELECT adi, soyadi FROM personel
Personel tablosundaki adi ve soyadi alanlarındaki tüm kayıtları listeler.
Personel tablosundaki tüm alanlardaki kayıtları listeler.
Where Kullanımı
Where komutu listelenecek kayıtların filtrelenmesini sağlar. Where kullanmadığımızd tablodaki tüm kayıtların belirtilen alanları listelenecektir. Where komutundan sonra bir veya birden fazla şart belirtirsek, sadece bu şart(lara) uyan kayıtlar listelenecektir.
SELECT * FROM personel WHERE cinsiyeti=”E”
Personel tablosunda cinsiyeti "E" olan kayıtların tüm alanlarını listeler.
SELECT adi, soyadi FROM personel WHERE diplomanotu>=70 AND cinsiyeti=”E”
Personel tablosunda diploma notu 70'ten büyük olan ve cinsiyeti "E" olan kayıtların adi ve soyadi alanlarını listeler. İki şartın arasına And operatörü yazıldığı için bu şartların ikisinin de tutması gerekir.
SELECT adi, soyadi FROM personel WHERE diplomanotu>=70 AND diplomanotu<=100
Personel tablosunda diploma notu 70'ten büyük ve diploma notu 100'den küçük olan kayıtların adi ve soyadi alanlarını listeler.
SELECT adi, soyadi FROM personel WHERE diplomanotu BETWEEN 70 AND 100
Bir üstteki sorgu ile aynı işi yapar. Personel tablosunda diploma notu 70 ile 100 arasında olan kayıtların adi ve soyadi alanlarını listeler.
SELECT adi + “ “ +soyadi FROM personel
Personel tablosundaki tüm kayıtların, adi ve soyadi alanlarını, aralarında bir boşluk olacak şekilde birleştirerek listeler. + operatörü kullanılarak metin türündeki alanların birleştirilmesi, sayı türündeki alanların ise toplanması sağlanabilir.
Sayı türündeki alanlar ile diğer matematiksel işlemler de gerçekleştirilebilir.
SELECT adi, soyadi, maasi / 100 FROM personel
Yukarıdaki örnekte adi, soyadi alanları ve maasi alanının 100'e bölünmüş hali listelenecektir.
As Komutu Kullanımı
Kayıtlar listelendiğinde sütun başlıkları veritabanındaki başlık ile aynı görünecektir. Listeleme sırasında görünecek başlıkları değiştirmek istersek As komutu kullanabiliriz. Bu kullanım tablodaki sütun başlığını değiştirmez, sadece listelerken farklı görünmesini sağlar.
SELECT adi AS Adı, soyadi AS Soyadı FROM personel
Personel tablosundaki tüm kayıtların, adi alanlarını başlığı "Adı" olacak şekilde, soyadi alanlarını ise başlığı "Soyadı" olacak şekilde listeler.
SELECT adi & “ “ & soyadi AS AdSoyad FROM personel
Metin türündeki alanları birleştirmek için & operatörü de kullanılabilir. Örnekte iki alan birleştirilirken As komutu kullanılarak sütun başlığı AdSoyad yapılmıştır.
Like Komutu İle Arama
Metin türündeki alanlarda bir ifadeyi aramak için kullanılır. Aranan ifadenin önüne ya da sonuna * % gibi özel ifadeler yazılarak arama özelleştirilebilir.
* ifadesi Access için geçerliyken, Sql Server'da % işareti kullanmak gerekir. Yine Access programında çift tırnak kullanılırken, Sql Server'da tek tırnak kullanılarak sabit metinler belirtilir.
SELECT * FROM personel WHERE adi LIKE “A*” OR diplomanotu<45
SELECT * FROM personel WHERE adi LIKE ‘A%’ OR diplomanotu<45 (Sql Server için)
Personel tablosunda adi alanı "A" ile başlayan (devamı ne olursa olsun) veya diplomanotu alanı 45'ten küçük olan kayıtların tüm alanlarını listeler.
SELECT * FROM personel WHERE adi NOT LIKE “A*” OR diplomanotu<45
Personel tablosunda adi alanı "A" ile başlamayan veya diplomanotu alanı 45'ten küçük olan kayıtların tüm alanlarını listeler.
Sql dilindeki diğer joker karakterler:
_ (Alt tire): Tek bir karakter gelebilir.
[bsz] belirtilen karakterlerden biri gelebilir (bsz)
[a-d] a ile d harfleri arasındaki tüm harflerden biri gelebilir (a, b, c, d)
[!abc] belirtilen karakterler hariç herhangi bir karakter gelebilir.
SELECT * FROM personel
WHERE adi LIKE ‘A[bds]%[a-g]’
Yukarıdaki örnekte adi alanının belirtilen şarta uyması için ilk harfi A olmalı, ikinci harfi b veya d olmalı, sonrasında istenen uzunlukta metin gelebilir, son harfi ise a ile g arasında olmalı. Mesela Asiye..
In Komutu Kullanımı
Tablodaki bir alanın birden fazla değer eşit olabilme ihtimali varsa, bu şartları Or kullanarak ayrı ayrı yazmak yerine, In komutu ile belirtebiliriz. Belirtilen alan In parantezine yazılan değerlerden birine eşitse o kayıt listelenecektir.
SELECT * FROM personel WHERE sehir IN("İstanbul","Ankara") AND soyadi IN("Öztürk","Ali","Göksu","Yılmaz" )
Personel tablosunda sehir alanı "İstanbul" veya "Ankara olan ve soyadi alanı "Öztürk, Ali, Gösu, Yılmaz" değerlerinden biri olan kayıtların tüm alanlarını listeler. In komutu sayesinde parantez içerisinde verilen değerlerden birisi olacak şekilde kısıtlama getirebiliriz.
Is Null Kullanımı
Belirtilen alanın boş olduğu kayıtları seçmek için is null, boş olmayanları seçmek içinse is not null şeklinde kullanabiliriz.
SELECT * FROM personel WHERE diplomanotu Is Null
Personel tablosunda diplomanotu alanı boş olan kayıtların tüm alanlarını listeler.
SELECT * FROM personel WHERE diplomanotu Is Not Null
Personel tablosunda diplomanotu alanı boş olmayan kayıtların tüm alanlarını listeler.
Order By Kullanımı
Kayıtların listelenirken belli bir alandaki veriye göre, artan (küçükten büyüğe - ASC) veya azalan (büyükten küçüğer - DESC) şekilde sıralanmasını sağlar. Asc veya desc belirtilmezse, varsayılan olarak Asc kabul edilir ve artan sıralama yapılır.
SELECT * FROM personel ORDER BY diplomanotu DESC
Personel tablosundaki tüm kayıt ve alanları, diplomanotu alanına göre azalan şekilde sıralayarak listeler.
SELECT adi, soyadi FROM personel ORDER BY diplomanotu
Personel tablosundaki tüm kayıtların adi ve soyadi alanlarını, diplomanotu alanına göre artan şekilde sıralayarak listeler.
SELECT adi, soyadi FROM personel WHERE cinsiyeti=”E” ORDER BY diplomanotu DESC
Personel tablosunda cinsiyeti alanı "E" olan kayıtların adi ve soyadi alanlarını, diplomanotu alanına göre azalan şekilde sıralayarak listeler.
SELECT * FROM personel ORDER BY diplomanotu DESC, adi ASC, soyadi DESC, kimlik
Personel tablosundaki tüm kayıt ve alanları;
öncelikle diplomanotu alanına göre azalan,
diplomanotu eşit ise adi alanına göre artan,
adi alanı da eşit ise soyadi alanına göre azalan,
soyadi alanı da eşit ise kimlik alanına göre artan şekilde sıralayarak listeler.
Top Komutu
Listelenen kayıtların tamamını değil de belli bir miktarını almak için kullanılır. Örneğin sınav notuna göre ilk 3 öğrenciyi listelemek gibi..
SELECT TOP 5 adi, soyadi FROM matematik ORDER BY sinav1 DESC
Kayıtların belli bir yüzdesi de elde edilebilir. Örneğin maaşlarına göre sıralanan çalışanların yüzde 25 kadarını listelemek için:
SELECT TOP 25 PERCENT adi, soyadi FROM personel ORDER BY maas DESC
Distinct Kullanımı
Bazen kullanılan tabloda aynı kayıtlar birden fazla defa geçebilir. Böyle durumlarda aynı değerlerin yalnızca bir defa listelenmesini istersek Distinct komutunu kullanabiliriz.
Örneğin en üstteki tabloda İstanbul iki defa geçmektedir. Aşağıdaki sorgu çalıştırıldığında İstanbul bir defa listelenecektir.
SELECT DISTINCT sehir FROM personel
*** SQL Server için bu sorgular yazılacak ise çift tırnakların yerine tek tırnak konmalıdır.
sql Select sorgusu örnekleri, sql where kullanımı ile filtreleme, sql verileri sıralama, küçükten büyüğe sıralama, sql order by kullanımı
KONU İLE İLGİLİ ÖRNEKLER
Bu konu ile ilgili örnek bulunmamaktadır.
46901 kez okundu.