|
|
||||||||||||
|
|
- veritabanı özel - Hangi veritabanını kullanırsanız kullanın, bu ay anlatılan birçok sorgu türüne ihtiyacınız olabilir. Bu yazıda SQL Server, Paradox gibi sistemlerde kullanabileceğiniz gelişmiş sorgu örnekleriyle birlikte, Access’in kendisine özel sorgu türlerinin ilginç örneklerini bulacaksınız. Access yerine bu ay veritabanı inceliklerinin yeraldığı Veritabanı özel köşesi ile karşınızdayız. Yazıda anlatılan sorgu türlerinin birkaçı dışında hemen hepsini Access, Delphi, VB ya da ASP ile çalışırken aynı şekilde kullanabilirsiniz. İhtiyacınıza göre yapılandırabileceğiniz karmaşık sorgular, çarpraz sorgular, içiçe sorgular, birleşmiş sorgular yazının devamında.
Sorgu Sihirbazı diğer bileşenler gibi özelliklerin listelendiği bir pencereye sahiptir. Sorgu tasarımında iken Görünüm > Özellikler (View > Properties) menüsü ile özellikler penceresi açılıyor. Yeri geldiğinde bu pencere işinize çok yarayabilir.
Üstteki boş alanı seçtiğinizde sorgunun, alt tarafa yerleştirdiğiniz bir veri alanını seçtiğinizde o veri alanının özelliklerini listeliyor ve değiştirebilmenizi sağlıyor. Fakat veri alanı kısmında tüm alanları listelemek için kullandığınız bir etiket olduğunda (Musteriler.* gibi) veri alanının değil –ki bu zaten veri alanı değildir– sorgunun özellikleri listelenir.
Dördüncü durum ise sql görünümünün açık olması halinde geçerli. Bu görünümde de başka özellikler listeleniyor.
Bu listedeki diğerlerine bakarsanız yüzdeli değerler göreceksiniz. Bu durumda kayıt kümesinin ilk yüzde 10’luk dilimini listelemeniz mümkün. Görünüm menüsünden sql görünümüne geçtiğinizde şuna benzer bir kod göreceksiniz: SELECT TOP 10 PERCENT Musteriler.* Percent deyimi öncesindeki sayı kadar ilk yüzdelik dilimi listeliyor. Sıralamayı değiştirmek istediğinizde ise OrderBy deyimini kullanın. Özellikler listesindeki özelliklerin bazıları sql kodunu etkilemez. Örneğin kayıt kümesini sıralamak için bu listedeki Order By özelliğine güvenmemek gerekiyor. Özellikler listesindeki Order By özelliği sorgunun kodunu etkilemeyip kayıtların listelenmesi aşamasında devreye giriyor. Bazı durumlarda sorguyu çalıştırırken açılışta sizden bir parametre istenirse sorgunun tasarımında bu listedeki Order By’ın değerinden şüphelenmelisiniz. Zira sorgunun sonucunu incelerken fare menüsündeki sıralama komutlarını kullandığınızda oluşan sıralama bilgisi buraya kaydediliyor. Daha sonra sorgunun ismini bir şekilde değiştirdiğinizde bu sorunla karşılaşabilirsiniz. (“Order By deyimi” ile “Order By özelliği” arasındaki farka dikkat!) Kayıtları sıralamak için alt tarafa yerleştirdiğiniz her bir veri alanının altındaki Sırala (Sort) listesinden Artan ya da Azalan (Ascending – Descending) değerini seçmelisiniz. Üretilecek sql kodundaki Order By bölümü bu seçimler sonrasında oluşur. Çoklu sıralama yapmak için ilgili alanların altındaki listeden gerekli olanını seçin. Veri alanlarının listelenmesindeki sıralama ile kayıtlardaki sıralamanın farkı olması gerektiğinde bazı alanları alttaki bölgeye tekrar yerleştirmeniz gerekebilir. Bu ay bahsettiğim sorgu örneklerini Internet’ten yükleyebileceğiniz bir dosyaya yerleştirdim ve kolay anlaşılması için sorgu isimlerinin başına grup numarası verdim. Bu yazıda da aynı isimleri kullandım. Resimdeki K1-Sırala sorgusunu inceleyin.
Sütunların ilkinin Adsoyad alanı olması gerektiği için sıralama koşulundan dolayı bu alanı ikinci kez ekledim ve uygun sıralamayı belirttim. Alt taraftaki Göster (Show) seçeneğini kaldırıp bu alanın gösterilmemesini, sadece sıralama amaçlı kullanılmasını sağladım. AdSoyad alanını iki defa eklemek, kayıt kümesinde bu alanın iki kez yer alacağı anlamına gelmiyor. Show satırındaki kutunun seçili olmadığı alanlar görüntülenmez. Query Properties penceresindeki diğer seçeneklerden biri de sizin yerleştirmenize gerek kalmadan tüm alanların listelenmesini sağlayan Output All Fields özelliği. Bu özelliği aktif ettiğinizde tüm veri alanları kayıt kümesinde listelenir. SELECT AdSoyad, Sehir, * Yeni bir sorguda iki veri alanını alt tarafa yerleştirdikten sonra Output All Fields özelliğini Yes olarak işaretledim. Sorgunun sql kodu yukarıdaki gibi oldu. Tasarım görünümünde tabloların üst tarafında bulunan yıldız işareti ile buradaki birbirinden biraz farklı. Output All Fields özelliğini hiç kullanmadan tablodaki yıldız işaretini ya da bazı veri alanlarını fareyle sürükleyip aşağıdaki alana dizebilirsiniz. Tablonun üstündeki yıldızla birlikte diğer veri alanlarını da aynı zamanda aşağıya ekleyebilirsiniz. Tablodaki yıldız işareti diğer alanları ekleseniz de tüm alanları tekrar görüntüler. SELECT Musteriler.* Bu kodları henüz göremediyseniz sorgu tasarımında View (Görünüm) menüsünde üstteki üç komutu inceleyin. Tasarım, SQL, Tablo görünümleri (Design, SQL, Datasheet) ile sorguyu üç farklı halde görüntüleyebilirsiniz. Bir veri alanının birden çok kez eklendiği K2 sorgusunun resmini inceleyin.
Bu tür bir sorguyu çalıştırdığınızda isimlerin tekrarlanmasından dolayı sütun başlıklarını Access kendine göre yeniden adlandıracaktı. Böyle durumlarda altta veri alanının adından önce yeni ad yazılıyor ve ikisinin arasına üstüste iki nokta işareti ekleniyor. Bu, veri alanının yeni bir adla gösterilmesini sağlıyor. Bunun SQL dilindeki karşılığı ise AS deyimi. SELECT AdSoyad AS BirinciAdSoyad, AdSoyad AS
ikinciAdSoyad, Sehir AS BirinciSehir, Sehir AS ikincisehir, Musteriler.* AS deyimi standart SQL dilinde de var olup birçok yerde buna benzer şekilde kullanılıyor. Sadece veri alanı için değil, tablo isimleri için de bunu kullanabilirsiniz. Bu deyim SQL Server’daki View objelerinde de kullanılabiliyor. Örneğin Haberler adlı tablonuzda Türkçe ve İngilizce haberler yer aldığında bunları ASP sayfalarında pratik olarak kullanmak için View nesnelerinden faydalanabilirsiniz. İngilizce ve Türkçe haber bilgilerini aynı tabloda tuttuğunuzda muhtemelen Baslik, Baslik_Eng, Haber, Haber_Eng gibi isimlerde veri alanlarınız olacak. Haberler_Eng adlı bir view oluşturup içine şuna benzer bir sql kodu ekleyin: SELECT Baslik_Eng as BASLIK, Haber_Eng as HABER
Türkçe ASP sayfasını hazırladıktan sonra bunun kopyasını alıp alan isimlerinin olduğu bloklarda değişiklik yapmak yerine sadece Recordset nesnesinin açıldığı yere Haberler_Eng yazmak yeterli olur. Peki Output All Fields özelliği ne için var? Sorgu tasarım görünümünde tablonun üstündeki yıldızı aşağı sürüklediğinizde oluşan sql kodu şu şekilde idi: SELECT Musteriler.* Output All Fields ise şunu üretiyor: SELECT * Tek başına yıldız işareti olmadan ALL deyimi de geçerli. SELECT ALL * Yıldız işareti, seçilmemiş olan alanları sorgunun devamına ekliyor. Bu işaret hangi sırada olursa olsun kullanılmamış alanlar son sıradan itibaren dizilir. SELECT *, Adsoyad, Email ya da SELECT Adsoyad, Email, * deyimleri, sırasıyla AdSoyad, Email, ID, Sehir, DogumTarihi, Meslek, Cinsiyet alanlarını listeleyecek ve alan tekrarı olmayacak. SELECT Adsoyad, Email, Musteriler.* kullandığınızda ise AdSoyad ve Email alanları
tekrar edecekti. Sorguların performansı için, gerekli olmayan veri
alanlarını sorguya dahil etmemek daha iyidir. Örneğin “SELECT * FROM Musteriler”
gibi bir deyim yerine tüm alanları listelemeyip sadece gerekli alanların
seçildiği “SELECT AdSoyad, Email FROM Musteriler” gibi sorgular yazmanız
önerilir.
DOSYA: | |||||||