Select komutu SQL de tablodaki seçtiğimiz sütunları ekrana getirmeye yarayan komuttur. From ise getirececeğimiz tabloyu ifade etmektedir.
Select, SQL'de en çok kullanılan komuttur. SQL'deki SELECT İfadesi, bir veri tabanından bilgileri, verileri almak için kullanılır. Select ile tablomuzdaki verilerin tamamını (*) veya dilediğimiz verileri ekrana listeleyebiliriz. SELECT komutu ile sorgu sonucunda görüntülemek istediğimiz sütunları ve isteğe bağlı olarak sonuç tablosunda hangi sütun başlıklarını görmek istediğimizi belirtebiliriz. Select, veri tabanı sunucusunun değerlendirdiği ilk yan cümledir ve son yan cümlelerden biridir. Bunun nedeni, sonuç kümesine nelerin dahil edileceğini belirlemeden önce, sonuç tablosuna dahil edilebilecek tüm olası sütunları bilmemiz gerektiğidir.
Select ile istediğimiz bilgileri, From ile hangi tablodan istediğimizi girdikten sonra Where(şart) komutumuz ile dilediğimiz şartları yazarak. İstenilen bilgileri detaya indirebiliriz. Örnekler ile daha açıklayıcı olacaktır.
Örneklere geçmeden önce hızlıca aşağıda verdiğimiz komutları ve operatörleri okuyabilirsiniz fakat örnekler ile çok daha kolay anlayacaksınız.
SELECT = Seçtiğimiz tablodan hangi bilgileri istediğimiz listlememize yardımcı olacak.
FROM = Hangi tabloyu seçetiğimize from komutu ile karar veriyoruz.
WHERE = Şart komutumuzdur. SQL cümlemizde dilediğimiz şartı where komutu ile gerçekleştireceğiz
AND = Bir operatördür ingilizcedeki ve anlamının tam karşılığıdır.
BETWEEN = İngilizce karşılığı arasında demektir ve SQL cümlelerimizde de tam olarak arasında anlamı ile kullanacağız.
IN = İngilizce karşılığı içinde demektir ve SQL cümlelerimizde de içinde anlamı ile kullanacağız.
LIKE = Like benzeyen benzetilen anlamına gelmektedir. SQL de ise yine benzeyen anlamına yakın bir kullanım ile sonuçlanmaktadır.
OR = Ya da anlamına gelmektedir ve yine diğerlerinde olduğu gibi bu cümlelerimizde de bu anlamı ile kullanacağız.
AS = İsim etiketi gibi düşünebilirsiniz. AS ile kendi sorgulattığımız sütuna isim verebiliriz.
ORDER BY = SQL cümlelerimizde order by kullanarak değerli büyükten küçüğe, küçükten büyüğe gibi sıralamalar yapacağız.
Aşağıda verdiğimiz 3 farklı tabloyu referans alarak örneklerimizi anlatacağız.
YAZARALAR | KİTAPLAR | YAYINEVLERİ |
YzKod | KKod | YKod |
YzAd | KAd | YAd |
YzSoyad | KIsbn | YEposta |
YzTel | YKod | YWebadr |
YzEposta | YzKod | YTel |
Dyil | SayfaSayisi | KurulusYili |
USE kitap
kitap veritabanı seçilerek bu veritabanındaki tablolar üzerinde işlem yapılacağı belirtilir.
Unutmayalım ki SQL'de küçük büyük harf duyarlılığı yoktur. Yani siz SELECT yerine select de yazsanız cümleniz çalışacaktır ve doğrudur.
SELECT * FROM yazarlar
Selectin ardından " * " kullanarak yazarlar tablosunda yer alan tüm bilgileri ekrana yazdırmış oluyoruz.
SELECT * FROM kitaplar
Fromdan sonra kullanacağımız kelime tablyou ifade ettiği için bu sefer de kitaplar tablosundaki tüm bilgileri ekrana yazdırmış oluyoruz.
SELECT yzad, yzsoyad, dyıl FROM yazarlar
Bu Select sorgumuzda ise sadece istediğimiz bilgileri yazarak ekrana sadece yazar adı, yazar soyadı ve doğum yıllarını getirmiş oluyoruz.
SELECT * FROM yazarlar WHERE yzad='Yahya Kemal'
Yazarlar tablosundan adı Yahya Kemal olan kişilerin tüm bilgilerini ekrana getiren SQL cümlesidir. Burda select ve from komutumuzu kullandıktan sonra where ile istediğimiz şartı getirmiş olduk.
SELECT * FROM kitaplar WHERE sayfasayısı<150
Burda ise farklı bir tablomuz olan kitaplar tablosundan sayfa sayısı 150'den küçük kitapların tüm bilgilerini listelemiş olduk.
SELECT yzad, yzsoyad FROM yazarlar WHERE dyil>1975 AND dyil<1980
Burada ise doğum yılı 1975 ve 1980 arasındaki kişilerin sadece adı ve soyadını ekrana getirmiş olduk. And operatörü ile burada şartımızı daha da detaylı bir hale getirmiş olduk.
SELECT yad FROM yayinevleri WHERE kurulusyili>'2.12.1986'
Burada ise yine farklı bir tablomuz olan yayınevleri tablosundan kuruluş yılı 2.12.1986'dan büyük olan yayınevlerinin sadece adlarını listelemiş olduk.
SELECT * FROM yayinevleri WHERE kurulusyili>'1.1.2005' AND kurulusyili<'10.10.2010'
Burada ise yine adn kullanarak 1.1.2005 ile 10.10.2010 tarihleri arasında kurulmuş olan yayınevlerinin verilen tüm bilgilerini listelemiş olduk.
SELECT * FROM yayinevleri WHERE kurulusyili BETWEEN '1.1.2005' and '10.10.2010'
Burada ise between(arasında) operatörünü kullanarak "< , > " kullanmadan iki tarih arasındaki tüm bilgileri listelemiş olduk.
SELECT * FROM yazarlar WHERE yzad IN ('Mirac','Hüseyin')
Burada ise IN(içerisinde) kullanarak yzad bloğu içinde Mirac veya Hüseyin geçenlerin bilgilerini listeledik. Veritabanı dili türkçe olduğu için mirac ile MİRAC eşittiir. IN ingilizcede içinde demektir SQLde ise in kullanarak içinde ne geçmesini istedeğimi kelimeleri, harfleri kullanabiliriz.
SELECT * FROM yazarlar WHERE yzad LIKE ('M%')
LIKE ingilizcede benzemek anlamına gelmektedir. SQLde ise durum buna benzerdir. dilediğimiz harften sonra % işaretini kullanırsak baş harfi M olanların bilgilerini ekrana listelecektir. Siz burda dilediğini harfi, harfleri kullanabilirsiniz. Örneğin LIKE('Fa%') burada ise ilk iki harfi Fa olan yazar adlarının tüm bilgilerini listelecektir.
SELECT yzad, yzsoyad, yztel FROM yazarlar WHERE yzad LIKE ('[F]%')
Bu kullanım ise yukardakı ile aynı anlama gelmektedir. Burada ise adı F ile başlayanların adları, soyadları ve telefon numaralarını listelemiş olacağız.
SELECT * FROM yazarlar WHERE yzad LIKE ('[FA]%')
Yine daha önceden örenğini verdiğimiz kullanımın farklı bir gösterişi. Burada ise adı Fa--- ile başlayanların tüm bilgilerini listeleyecktir.
SELECT * FROM yazarlar WHERE yzad LIKE ('[^F]%')
Burada ise adı F ile başlamayanların tüm bilgilerini ekrana getirmiş olduk. ^ işareti köşeli içinde bulunanlar olmasın anlamındadır.
SELECT * FROM yazarlar WHERE yzad LIKE ('%i')
Burada ise % işaretini başta kullanarak adı i ile btenlerin bilgilerinni ekrana getirmiş olduk. Burdaki komutun çalışma mantığı ------i gibidir. % işaretini nereye nereye koyarsak işaretten önce sınırsız karakter varmış gibi düşünebiliriz.
SELECT * FROM yazarlar WHERE yzad LIKE ('%a%')
Bir önceki örnekte anlatmaya çalıştığımı burda daha iyi anlayabilirsiniz. Bu SQL cümlesi ile içinde a geçenlerim tüm bilgilerini listelemiş olduk. Örneğin --a---- veya -a--a---- veya ----a- gibi düşünebilirsiniz.
SELECT * FROM yazarlar WHERE yzad LIKE ('a__')
Burada ise adı a ile başlayan 3 harfli isimlerin tüm bilgilerini listele demiş olduk. % işareti birden fazla karekter. _ işareti ise tek karakteri temsil eder. Dilediğiniz kadar __ kullanabilirsiniz fakat tabloda böyle bir değer yoksa null değeri alırsınız.
SELECT yzad,yzsoyad FROM yazarlar WHERE yzad IN ('Mirac','Veli') AND yzkod>55 AND dyil between '1965' and '1983'
Burada ise yazarlar tablosundan adında Mirac ve Veli geçen, yazar kodu 55'den büyük ve doğum yılları 1965 ve 1983 arasında olanların, sadece adlarını ve soyadlarını listelemiş olduk.
SELECT * FROM yazarlar WHERE (yzad IN ('namık','yasar') OR yzkod>75) AND dyil BETWEEN '1989' and '1995'
Burada ise adının içinde Namık ve Yaşar geçen ya da yazar kodu 75den büyük ve doğum yılları 1989 ve 1995 arasında olanların tüm bilgilerini listeledik. OR ingilizcede ya da anlamına gelmektedir. SQLde ise tam karşılığına da ya da diyebiliriz.
SELECT * FROM yazarlar WHERE yzkod IS NULL
IS NULL değer yok, değeri atanmamış gibi düşünebilirsiniz. Buradaki cümlemiz ile yazarlar tablosundan yazar kodu belirtilmemiş, değeri bulunmayan kişilerin tüm bilgilerini ekrana listeliyoruz.
SELECT * FROM yazarlar WHERE yztel IS NOT NULL
Burada ise IS NOT NULL(değeri null(atanmamış) olmayan) kullanarak yazar telefon numarası değeri girilmiş olan yazarların tüm bilgilerini listeliyoruz.
As ifadesini kullanarak sorgumuz neticesinde ekrana gelen sütunumuzun ismini değiştirebilirz. Fakat bu değiştirme kalıcı bir değiştirme değil sadece o sorguyluk bir değiştirmedir, bir nevi isim etiketi gibi düşünebilirsiniz.
SELECT yzad, yzsoyad AS 'Yazarların Adları ve SoyAdları' FROM yazarlar
Burada AS kullanarak sorgumuzu tek bir sütun halinde görmeyi sağlamış olduk ve yeni sütunumuzun adına Yazarların adları ve soyadlarını vermiş olduk.
SELECT yzad as 'Yazar Adı', yzsoyad, 'Yazar Kodları' as yzkod FROM yazarlar
Burada ise yazar adlarını Yazar Adı sütunu altında, Soyadlarını olduğu gibi yzsoyad başlığı altında, Yazar kodlarını ise yzkod yerine Yazar Kodları sütun başlığı altına almış olduk.
SELECT dyil as 'Yazarın Dığum Yılı' FROM yazarlar
Burada ise dyil olarak listelenecek olan sütunu Yazarın Doğum Yılı olarak değiştirmiş oluyoruz.
SELECT dyil+5 as 'Doğum Yıllarının 5 fazlası' FROM yazarlar
Burada ise doğum yılarına 5 yıl daha eklencek ve sütun başlığımız Doğum Yıllarının 5 Fazlası olarak listelenecek.
SELECT * FROM yazarlar ORDER BY yzad
Order by sıralamalar için kullanılır. Burada ise yaz adlarına göre A'dan başlayarak Z'ye kadar bir sıralama söz konusudur. Ekranda listelenek tüm bilgiler yazarlardın adlarının baş harflerine göre sıralanmış olacaktır.
SELECT dyil FROM yazarlar ORDER BY dyil ASC
Burada ise yazarlar tablomuzdan doğum yıllarını ekrana listeledik. Fakat burda ilk örneklerde yaptığımız gibi karmaşık bir sıralama yok. Bu sefer Order By kullanarak doğum yıllarını artan şekilde sıraladık. ASC ascending'in kısaltmasıdır. Ascending ise ingilizce de artan anlamına gelmektedir. SQLde ise durum yine aynıdır. ASC kullanmasak da sql otomatik olarak order by'ı kullandıktan sonra listeleri artan şekilde sıralayaktır ama bu DESC için aynı değildir.
SELECT * FROM yazarlar ORDER BY yzkod DESC
DESC descending'in kısaltmasıdır. Descending ingilizce de azalan demektir. SQLde ise yine aynı anlamı ile kullanıyoruz. Burdaki örneğimizde yazarlar tablosundan yazar kodlarını azalan şekilde yani büyükten küçüğe sıralayarak tüm bilgileri listeleyecektir. (Önceden anlatmıştık fakat tekrar bir hatılatma yapalım * yerine tablodan ekrana listelenmesini istediğiniz şeyleri seçebilirsiniz.)
SELECT * FROM yazarlar ORDER BY yzad, yzsoyad
Burada ise ilk olarak tüm bilgileri yazar adının baş harfine göre sıralıyoruz(A-Z ASC) sonrasında ise baş harfleri aynı olanları da soyadının baş harfine göre sıralıyoruz. Örneği çoğaltmak isterseniz bir virgül daha koyarak soyadı aynı olanları neye göre sıralayacağınızı belirleyebilirsiniz.
SELECT * FROM yazarlar ORDER BY yzad+yzsoyad
Yukarda kullandığımız kullanıma benzer bir türdür. Adı aynı olanları sıralıyor sonrasında ise aynı ad değeri bulunanları soyadına göre sıralıyor.
SELECT * FROM yazarlar ORDER BY 1
Burada ise 1. sıradaki alana göre sıralama yapmış oluyoruz.
SELECT * FROM yazarlar ORDER BY 1,3
Burada ise önce 1. sonra 3. sıradaki alana göre sıralama yapmış oluyoruz.