BilgiTeknoloji.net    
b i l g i   t e k n o l o j i   y a z ı l ı m

Ana Sayfa

Marjinal XML Access Pratik Uygulamalar Projeler Ekonometri Dilimiz Çetrefil İletişim
 

- veritabanı özel -
Gelişmiş Sorgular


Sayfa 1
  Sayfa 2  Sayfa3

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.


SORGULARA BAŞLAYIN

Access, sorgulara başlamak için ya da gelişmiş sorgular hazırlamak için, en iyi sorgu tasarım araçlarından birini içerir. Access’teki Sorgu Sihirbazı’na (Query Builder) hakim birisi için en karmaşık sorguları hazırlamak çocuk oyuncağı sayılır.

Yeni bir sorgu oluşturma aşamasında, açılan listedeki tabloları seçip sorguya eklemek gerekiyor. Sorguda kullanılacak bir veya daha fazla tablo burada seçiliyor. Tablo eklemeyi daha sonra yapmak için Görünüm > Tablo Göster (View > Show Table) menüsü kullanılıyor.

Görünen tablolardaki alanları çift tıklatıp aşağıdaki bölgeye ekleyin ve Görünüm > Tablo Görünümü menüsü ile sorgunun sonucunu görün.


SORGU ÖZELLİKLERİ

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.

Özellikler penceresi seçili olan nesne için yerine göre dört farklı liste sunuyor. Eğer sorguya eklediğiniz bir tabloyu seçmişseniz bu pencere o tablonun özelliklerini listeliyor.

Ü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.

Özellikler penceresi tasarım anında sorgunun koduna müdahale etmeye gerek kalmadan önemli bazı ayrıntıların değiştirilebilmesini sağlıyor.

Örneğin sorgu özellikleri penceresi açıkken Top Values değeri ile kayıt kümesindeki kayıtları sınırlandırabiliyorsunuz. Bunun sql’deki karşılığı TOP deyimi. “SELECT TOP 50 * FROM Musteriler” gibi bir kod kayıt kümesinin ilk 50 kaydını getirir. Tasarım anında sql kodu görünümü açmak yerine özellikler penceresindeki bu değeri değiştirmeniz yeterli.

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.*
FROM 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.

 
LİSTELENECEK ALANLARI SEÇİN

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, *
FROM Musteriler
ORDER BY Sehir, AdSoyad;

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.*
FROM 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.*
FROM 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
FROM Haberler

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.*
FROM Musteriler;

Output All Fields ise şunu üretiyor:

SELECT *
FROM Musteriler;

Tek başına yıldız işareti olmadan ALL deyimi de geçerli.

SELECT ALL *
FROM Musteriler;

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
FROM Musteriler;

ya da

SELECT Adsoyad, Email, *
FROM Musteriler;

deyimleri, sırasıyla AdSoyad, Email, ID, Sehir, DogumTarihi, Meslek, Cinsiyet alanlarını listeleyecek ve alan tekrarı olmayacak.

SELECT Adsoyad, Email, Musteriler.*
FROM Musteriler;

kullandığınızda ise AdSoyad ve Email alanları tekrar edecekti.
Buraya kadarki sorgular için örnek dosyada K grubundaki sorguları inceleyin.

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.
 

Sayfa 1  Sayfa 2  Sayfa3


DOSYA:
GelismisSorgularMDB.rar

 
Serkan ŞAHİNOĞLU
(PC Magazİne, Aralık 2001)


http://BilgiTeknoloji.net