MS-SQL Sorguları

  • 787
  • (2)
  • (5)
  • 07 Haz 2017

Select Sorgusu

MS-SQL ile ilgili yazılarımızda diagramı aşağıdaki gibi olan 7 tabloluk TRecords isimli küçük bir veritabanı kullanabiliriz. MS-SQL Server 2012 kullanarak oluşturulmuş bu veritabanı hakkında biraz detay edinmek gerekebilir.

Veritabanındaki tablolardan şöyle bahsedebiliriz,

  • Ürünleri kaydetmek için tabloUrunler isimli tablo kullanılıyor.
  • Markaları barındırmak için tabloMarkalar isimli tablo kullanılıyor.
  • Ürün çeşitlerini barındırmak için tabloUrunTurleri isimli tablo kullanılıyor.
  • tabloUrunler isimli tabloda UrunID alanı int türündedir. Aslında bütün tabloların birincil anahtar (primary key) alanları int türündedir.tabloUrunler tablosundaki marka ve ürün türü alanları da tabloMarkalar ve tabloUrunTurleri tablolarındaki birincil anahtarlarla (MarkaID ve UrunTuruID) ilişkili int türündedir.

Veritabanını oluşturmak için script dosyasını ve back up dosyasını aşağıdaki linklerden indirebilirsiniz.

Script Dosyası

Tablodan Veri Çekmek

Bir tablodan veri çekmek için select sorgusu kullanılır. Bu sorgunun syntax dizilimi en temelde aşağıdaki gibidir.

    select alan_adi1, alan_adi2, alan_adi3 from tablo_adi

Bu sorgu tablodan alan_adi1, alan_adi2, alan_adi3 isimli sütunları getirir. Eğer tüm alanların getirilmesini istiyorsanız aşağıdaki gibi bir sorgu kullanmalısınız.

    select * from tablo_adi

Uygulamalar

Elinizdeki TRecords veritabanı ile bazı uygulamalar gerçekleştirebilirsiniz.

    select * from tabloUrunler

sorgusu tabloUrunler tablosundaki bütün satırları, bütün alanları ile beraber getirecektir.

UrunID, UrunAdi, UrunKodu, UrunAciklama, UrunTuruID ve MarkaID alanları bu tablonun bütün sütunlarıdır. select kelimesinden sonraki * işareti ms-sql dilinde "all" anlamına gelir. Yani aslında bu kod select all from tabloUrunler şeklinde okunmaktadır.

Bu tabloda UrunID birincil anahtar (primary key) özelliği taşımaktadır. Her tabloda sadece bir tane birincil anahtar olabilir. Birincil anahtar alanında her satırın bir nevi kimlik numarası ya da benzersiz kayıt numarası tutulmaktadır. Aynı zamanda bu alan aracılığı ile tablolar arası ilişkilendirme sağlanır.

UrunAdi, UrunKodu, UrunAciklama alanları satırın içerisindeki normal alanlardır. Ancak UrunTuruID ve MarkaID içerisinde ne bir ürün türü ne de marka adı yazmamaktadır. Onun yerine int türünde belli sayılar karşımıza çıkmaktadır. Çünkü markalar ve türler başka iki tabloda depolanmıştır. O tabloların birincil anahtarları int türünde MarkaID ve UrunTuruID olarak belirlenmiştir. Diagramda da görüldüğü üzere o birincil anahtarlar bu tablonun içerisinde alanlarla ilişkilendirilmiştir. Yani bu noktada tabloUrunler tablosundaki MarkaID ve UrunTuruID sütunlarının Foreign Key olduğu öğreniliyor. Foreign Key, yabancı anahtar veya ilişkisel anahtar şeklinde de kullanılan bir terimdir.

Örneğin, bu tablodan çektiğimiz verilerde sadece UrunAdi, UrunKodu ve UrunAciklama görülmesi isteniyorsa ne yaparız?

    select UrunAdi, UrunKodu, UrunAciklama from tabloUrunler

sorgusu ile de şöyle bir sonuç elde edilir.

Karmaşık Sorgular

Markaların ve ürün türlerinin verilerini bu sorguda görmek isterken kullanabileceğimiz iki yol vardır.

Birinci yol iç içe sorgu yazmaktır. İç içe sorgular hakkında daha detaylı bilgi için tıklayın.

    
select UrunAdi, UrunKodu, UrunAciklama,
	(select TurAdi from tabloUrunTurleri where tabloUrunler.UrunTuruID = UrunTuruID) as UrunTuru, 
	(select MarkaAdi from tabloMarkalar where tabloUrunler.MarkaID = MarkaID) as MarkaAdi
from tabloUrunler

İkinci yol join kullanmaktır. Join içeren sorgular hakkında daha detaylı bilgi için tıklayın.

    
select UrunAdi, UrunKodu, UrunAciklama, ut.TurAdi, m.MarkaAdi from tabloUrunler u 
	left join tabloUrunTurleri ut on u.UrunTuruID = ut.UrunTuruID
	left join tabloMarkalar m on u.MarkaID = m.MarkaID

İki sorgunun da sonucu aşağıdaki gibidir.

Tablodan Belli Verileri Çekmek

Bir tablodan belli verileri çekmek için where ifadesi ile belli koşullara uyan sonuçlar döndürülür.

Öncelikle tabloUrunTurleri ve tabloMarkalar içerisinde hangi ID lerin hangi değerlere karşılık geldiğine bakalım.

'Ekran' türünden ürünlerin ID' sinin 5 olduğunu görüyoruz. Bu türden ürünleri çekmek için kullanılması gereken sorgu şöyledir.

    select * from tabloUrunler where UrunTuruID = 5

Eğer ürün türünün ID değerini kullanmadan bu türdeki ürünleri çekmek istiyorsanız şöyle bir sorgu kullanabilirsiniz.

    select * from tabloUrunler where UrunTuruID = (select UrunTuruID from tabloUrunTurleri where TurAdi = 'Ekran')

Ekran türünde olmayan ürünlerin sorgusu için =(eşittir) operatörü yerine <>(eşit değildir) operatörü kullanmalısınız.

    select * from tabloUrunler where UrunTuruID <> (select UrunTuruID from tabloUrunTurleri where TurAdi = 'Ekran')

UrunAdi alanı içerisinde 'ASUS' ifadesi geçen sonuçları döndürmek isterseniz şöyle bir sorgu kullanabilirsiniz.

    select * from tabloUrunler where UrunAdi like '%ASUS%'
    
select * from tabloUrunler where UrunAdi like '%ASUS%' --İçerisinde ASUS geçen sonuçları döndürür
select * from tabloUrunler where UrunAdi like 'ASUS%' --ASUS ile başlayan sonuçları döndürür
select * from tabloUrunler where UrunAdi like '%ASUS' --ASUS ile biten sonuçları döndürür
select * from tabloUrunler where UrunAdi not like '%ASUS%' --İçerisinde ASUS geçmeyen sonuçları döndürür
select * from tabloUrunler where UrunAdi not like 'ASUS%' --ASUS ile başlamayan sonuçları döndürür
select * from tabloUrunler where UrunAdi not like '%ASUS' --ASUS ile bitmeyen sonuçları döndürür

İçerisinde 'ASUS' geçmeyen sorgu aşağıdaki gibi gelecektir.

Tablodan Sıralanmış Veri Çekmek

Sorgu sonuçlarını sıralanmış görmek istiyorsanız order by ifadesini sorgunun sonuna yazmalısınız. Bu ifadeden sonra hangi alana göre sıralanmasını istiyorsanız o alanın adını yazmalısınız.

    select * from tabloUrunler order by UrunAdi

Ters sıralama için ise desc ifadesini kullanmalıyız.

    select * from tabloUrunler order by UrunAdi desc

Bazı sorgularda birden fazla sıralama gereği duyulabilir. Örneğin, MarkaID alanına göre sıralama yaptığınız zaman her MarkaID içerisinde de UrunAdi alanına göre sıralama yapmasını istiyorsanız,

    select * from tabloUrunler order by MarkaID, UrunAdi

sorgusu ile şöyle bir sonuç elde edeceksiniz.

Tablodan Belli Verileri Sıralanmış Çekmek

Bir tablodan where komutu ile alınmış belli verileri sıralamak isteyebiliriz. where komutu ile order by komutu birlikte şu şekilde kullanılır.

    select * from tabloUrunler where UrunKodu like '001%' or UrunKodu like '008%' order by UrunAdi

UrunKodu alanı '001' ile veya '008' ile başlayan kayıtları alıp UrunAdi alanına göre sıralama yapılmaktadır.

İlişkili İçerikler

MS-SQL veritabanı tablolarına veri satırları girmek oldukça kolay bir işlemdir.

MS-SQL veritabanı tablolarındaki veri satırlarını güncelleme konusunu inceleyebilirsiniz.

MS-SQL veritabanı tablolarındaki veri satırlarının nasıl silindiğini öğrenebileceğiniz metni inceleyebilirsiniz.

Paylaşın
Etiket Bulutu