MS-SQL Sorguları
- 1035
- (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
tabloUrunlerisimli tablo kullanılıyor. - Markaları barındırmak için
tabloMarkalarisimli tablo kullanılıyor. - Ürün çeşitlerini barındırmak için
tabloUrunTurleriisimli tablo kullanılıyor. - tabloUrunler isimli tabloda
UrunIDalanıinttüründedir. Aslında bütün tabloların birincil anahtar (primary key) alanlarıinttüründedir.tabloUrunlertablosundaki marka ve ürün türü alanları databloMarkalarvetabloUrunTurleritablolarındaki birincil anahtarlarla (MarkaIDveUrunTuruID) ilişkiliinttü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.