Access 2000, bize altı ayrı sorgu türü veriyor. Bunlardan Basit Seçme sorgusu, biraz önce ele aldığımız Gelişmiş Süzme/Sıralama aracının birden fazla tablo kabul edebilenidir. Çapraz sorgu, verileri gruplandırarak, bunlar için sayım, toplam ve ortalama gibi hesapları yapar. Örneğin öğrencileri cinsiyetlerine ve derslere göre gruplandırıp, aldıkları not ortalamalarını göstermek., çapraz tablo yapmaktır. Çapraz sorgu bir tabloda çalıştığı için, örneğin öğrencilerinizin notları derslere göre ayrı tablolarda ise bunları bir tabloda basit seçme sorgusuyla birleştirmeniz gerekir. Tablo yapma sorgusu, seçme sorgusundan farklı olarak, çalıştığı zaman ortaya bir tablo penceresi çıkmaz; Access, sizden daha önce aldığı isimle bir tablo oluşturur. Bu tablo veritabanının parçası haline gelir. Oysa diğer sorguların sonuçları ancak sorgu çalıştığı sırada vardır. Güncelleştirme sorgusu, sorgu tasarımı sırasında verdiğiniz bir sabit değeri veya verdiğiniz bir deyimin o sırada bulunacak sonucunu, tayin ettiğiniz bir alana yazar. Bu, “Bul-Değiştir” gibi basit bir araç olmayıp, her kaydı, belirli bir formüle veya kıydın kendi içindeki bir değere göre yeniden hesaplayabilir. Ekleme ve Silme sorguları da güncelleştirme sorgusu gibi, ya farklı tabloların kayıtlarını birbirine ekler, ya da tablolardaki kayıtları siler. Bunların dışında tasarım sırasında yüklediğiniz işlevlerin bir sonucu olarak bir sorgu Parametre sorgusu (verdiğiniz görevi yapabilmek için kullanıcıdan bir değer girmesini isteyen sorgu), SQL Sorgusu (SQL komutlarını kullanarak birleşim, doğrudan sorgu, veri tanımla ve alt sorgu gibi veritabanınızı ODBC yoluyla dışarıdan kullanacak kullanıcıları gözönünde tutarak hazırladığınız sorgular) ve otomatik arama sorgusu (yeni bir kaydın bazı alanlarının otomatik olarak doldurulmasını sağlayan sorgu, AutoLookup sorgusu) diye de adlandırılabilir.
Basit Seçme Sorgusu (BSS) dışındaki sorgular, ileri düzeyde Access bilgisi ve hatta bir ölçüde Programlar İçin Visual Basic (VBA) bilgisi gerektirebilir. BSS’yi iyi kavrayarak, bu ileri düzeydeki sorgular için mükemmel bir başlangıç yapabilirsiniz.
BSS’in temel özelliklerini sıralarsak, şunlar karşımıza çıkıyor:
1. Sorguda birden fazla tablo kullanabilirsiniz; tablolar arasında oluşturduğunuz ilişkiden yararlanabilirsiniz.
2. Sorgu sonucu sadece istediğiniz alanları görüntüleyebilir; bu sırada gerekli olmayan sütunları yeni sorgu sonucu tablosuna almayabilirsiniz.
3. Sorgu sonucu oluşacak tabloda alanları istediğiniz sütun sırasına sokabilirsiniz.
4. Seçme işlemi sonucu kaç kaydın görüntülenmesini istiyorsanız, o kadar kayda yer verebilirsiniz.
5. BSS (ve diğer) sorguları icra ettikten sonra, sorguya konu olan tabloların değerlyeri değişmez; başka bir deyişle sorgular tabloları sadece “okur,” içeriğini değiştirmezler. Bir sorgu işledikten sonra tablo oluşturuyorsa (Tablo Yapma Sorgusu ise) ortaya yeni bir tablo çıkar. Sorguyu tekrar çalıştırdığınızda bu tablo yeniden yazılır ve Access 2000, Özelleştir kutusunda yaptığınız uyarı ayarlarına göre sizi uyarabilir.
İkinci bölümdeki Adres Defteri alıştırmasını yaptıysanız, bu veri tabanını açın ve birlikte bir BSS oluşturalım. Adres Defteri veritabanını oluşturmadı iseniz, aşağıdaki adımları kendi veritabanınıza uygulamak zorundasınız. Burada yapmak istediğimiş iş veya Access 2000’e sormak istediğimiz soru şu: Istanbul’da oturan ve çocuğu olan dostlarımız kimler, çocuklarının adı ne?
Veritabanı dosyası açıldığında, veritabanı penceresinde, nesneler listesinde Sorgular satırını tıklayın. Sorgular penceresinde “Tasarım görünümünde sorgu oluştur” ve “Sihirbazı kullanarak sorgu oluştur” şeklinde iki kısayol göreceksiniz. Pencerenin araç çubuğundaki Yeni düğmesini tıklarsanız, karşınıza daha çok imkan sunan bir sihirbazın ilk adımını içeren bir kutu açılacaktır. Bu kutudaki Basit Sorgu Sihirbazı maddesi, Sorgu nesnesi penceresindeki “Sihirbazı kullanarak sorgu oluştur” kısayolu ile aynı sonucu verir. İster Yeni’yi tıklayıp açılan kutudan Basit Sorgu Sihirbazı maddesini seçin, ister “Sihirbazı kullanarak sorgu oluştur” kısayolunu tıklayın.
BSS sihirbazının ilk penceresinde hangi alanların sorguda bulunmasını istediğinizi belirtmeniz gerekir. Bir sorgu sadece tablodan değil sorgu sonucundan da seçme yapabilir; dolayısıyla sol üstteki seçmeli listede veritabanınızda mevcut bütün tablolar ve sorgular sıralanır. Bu listede seçilmiş olan tablo veya sorgunun içerdiği alanlar ise sol altta kullanılabilir alanlar listesinde yer alır. Veritabanımıza soracağımız sorunun birinci bölümü “Istanbul’da oturan” dostlarımızın seçilmesi olduğuna göre, bu kişilerin kayıtlı olduğu Aile tablosunu seçmek zorundayız. Bu alanlardan hangileri BSS sonucu oluşturulacak tablomuzda yer alsın istiyoruz? Bir kere dostlarımızın adını ve soyadını seçmemiz gerekir. Seçilecek kişilerin tümünün Istanbul’da oturanlar olması için Şehir alanının da seçilmesi şart. Bunu yapmak için arzu ettiğimiz alanın adını bir kere tıkladıktan sonra ortadaki düğmelerden en üstte olan sağa doğru tek oklu düğmeyi tıklıyoruz. Soldaki alanların tümünün sorgu sırasında kullanılabilir olmasını isteseydik, ikinci sıradaki iki oklu düğmeyi tıklamamız gerekirdi. Bir alanı yanlışlıkla sağa geçirirsek, üçüncü sıradaki sola doğru tek oklu düğmeyi tıklayarak sorguda kullanabileceğimiz alanlar listesinden çıkartırız. Bu alanların tümünü sorgu listesinden çıkartmak için el alttaki iki oklu düğmeyi tıklayabiliriz.
Veritabanına sorduğumuz sorunun ikinci bölümü, Istanbul’da oturan dostlarımızdan sadece çocukları olanların seçilmesini, üçüncü bölümü ise çocukların adlarının da listelenmesini gerektirdiğine göre, bize Çocuklar tablosu ve bu tablodaki çocuk adları alanı da gerekiyor. Şimdi Tablolar ve sorgular kutusunun seçme okunu tıklayarak açılan listeden Çocuklar tablosunu seçelim, sonra da bu tablonun Adı adlı alanını sağa aktaralım. Ama hemen İleri düğmesini tıklamayın.
Şimdi bir an için kendimizi Access 2000’in yerine koyalım: Biraz sonra bir seçme işlemi yapacağız; çocuğu olan ve Istanbul’da oturan kişileri seçeğiz. Istanbul’da oturanları seçmek kolay: Eğer Şehir alanındaki değer “Istanbul” ise bu kişiyi seçebiliriz. Peki bu kişilerin çocuğu olup olmadığını nasıl bilebiliriz? Veya şöyle soralım: bu kişilerin çocukları varsa bunları Çocuklar tablosunda nasıl belirleyebiliriz? Bu iki tablo arasında ilişki sağlayan alanla!
Veritabanı tasarımında en zor nokta, tablolarda gereksiz yere tekrarı önlemek amacıyla alanları başka tablolara aktarmak gerektiğinden söz ettiğimiz sırada, tablolar arasında ilişki kurmamız gerektiğini belirtmiştik. İkinci bölümden hatırlıyorsanız, Aile tablosuyla Çocuklar tablosu arasındaki ilişkiyi, yani hangi çocuğun hangi aileye mensup olduğunu Aile Sıra No alanındaki bilgiyi iki tabloda ortak kullanarak biliyoruz. Başka bir deyişle bir çocuğun Aile Sıra No alanındaki değer, bu çocuğun hangi ailenin üyesi olduğunu gösteriyor. Sorgu sırasında Access 2000, şöyle düşünebilir: “Hımm. Istanbul’lu bir kişiyi seçeyim; sonra bu kişinin Aile Sıra No alanındaki değeri, Çocuklar tablosundaki aynı adlı alanda arayayım; eğer bu iki değer aynı ise bu çocuğun adını alıp, Istanbullu kişi ile birlikte kaydedeyim.” Access’in düşündüğünü uygulayabilmesi için, ona her iki tablodan Aile Sıra No alanını da vermemiz gerekir. O halde önce açık olan Çocuklar tablosunun, sonra da yeniden Aile tablosunu seçerek, Aile Sıra No alanlarını sağa aktarın. Bu kutuda işimiz bittiğine göre Tamam’ı tıklayabilirsiniz. (Sorgu kaç tablodan kaç alan seçmeyi gerektiyorsa, o kadar alan seçebilirsiniz. Buradaki örnek bu alanları gerektirdiği için burada duruyoruz; sizin örneğiniz başka tablolardan başka alanlar gerektiyorsa, seçmeye devam edin.)
Basit sorgu sihirbazının ikinci penceresi, sorgu sonucu oluşturulacak tabloda kaç kayıt olacağını belirler. Varsayılan değer, seçtiğiniz tablolardaki tüm kayıtların sorgu sonucu oluşacak tabloya alınmasıdır. Fakat diyelim ki size sorgu sonucu oluşacak tablonun ilk 5, 25 veya 100 kaydını içeren özet bir tablo da oluşturabilirsiniz. Özet tablo için Özetk seçeneğini seçin ve Özet Seçenekleri düğmesini tıklayın. Bu iş bittikten sonra veya Ayrıntılı seçeneğini seçerek, İleriyi tıklayabilirsiniz.
Üçüncü pencerede yeni sorgunuza isim vermeniz, Son’u tıkladığınızda sorgunun icra edilmesini mi, yoksa sorguda sihirbazın yapmadığı değişiklikleri yapmak üzere tasarım görünümünün açılmasını mı istediğinizi belirtmeniz gerekir. Burada yardım isteyip istemediğinizi belirteceğiniz bir başka seçenek daha var. Tasarımı güç sorgular yaptığınızda, Access 2000’in yardım penceresinin açılmış olması size kolaylık sağlar. Şimdi, sorgunun tasarımı ile ilgili işlerimiz bitmediği için ikinci seçeneği işaretleyerek Son’u tıklayalım.
Access 2000, seçtiğiniz iki tabloyu sorgu tasarım penceresinin üst bölümünde gösteriyor. İki tablo arasındaki ilişki çizgisine dikkat edin; bu ilişkiyi ikinci bölümdeki alıştırma sırasında kurmuştuk. Access, seçtiğiniz altı alanı, değerleri ne olursa olsun, bütün kayıtları ile seçmeyi (ve bunu yaparken iki tabloyu birleştirmeyi) sağlayan bir sorgu tasarımı öneriyor. Bütün alanların seçildiğini, sorgu tasarım penceresinin alt yarısındaki kılavuzda, Alan satırındaki alan adlarından anlıyoruz. Bu satıra yazılan alan adlarını inceleyin; tablo adı ile tablonun alan adı nasıl birleştiriliyor? İkinci satırda ise tablonun adı belirtiliyor. Sırala satırının boş bırakıldığına dikkat edin. Göster satırındaki kutuların işaretli olması bu alanın sorgu sonucu oluşturulacak tabloda gösterileceği anlamına geliyor. Ve son olarak Ölçüt satırlarının boş olduğuna dikkat edin.
Biz sorgumuzun sadece çocukları olan Istanbulluları kapsamasını istiyorduk. O halde, Şehir alanının sütununda, Ölçüt satırına “Istanbul” yazmamız gerekiyor, ki sadece Istanbullular seçilsin. Peki bunlar arasından çocukları olanları nasıl seçeğiz, Access ile çalışma konusunda ustalığınız ilerledikçe, bu tür şartlı seçmeleri (SQL deyiminde “eğer” şartı geçen sorguları) oluşturma becerisi de edineceksiniz. Fakat şimdilik böyle bir sorgu deyimi oluşturmaya gerek yok: Access, çocuklar listesindeki Adı değerlerini seçerken, bunların Aile Sıra No değeri Aile tablosunda Aile Sıra No değerine denk gelmeyen kayıtları seçmeyecektir. (Aile tablonuzda çocuksuz Istanbullu dostlarınız, Çocuklar tablosunda da Istanbullu ailelere mensup olmayan çocuklar bulunmasını sağlayın, ki BSS’in gerçekten işleyip işlemediğini sınayabilelim.) Şimdi sorgu tasarım penceresinde Şehir sütununda Ölçüt satırına “Istanbul” yazın. Sorgu sonucu oluşacak yeni tablomuzda iki ayrı Aile Sıra No sütununa gerek olmadığı için Çocuklar tablosundan alınacak Aile Sıra No sütununun Görüntüle satırındaki işareti kaldırabiliriz; fakat BSS’in tablonun ilişki bağından nasıl yararlandığını görmek için şimdilik bu işareti kaldırmayın. Özetle, Access 2000 BSS sihirbazının tasarımına sadece Şehir alanında Ölçüt olarak “Istanbul” kelimesini eklemiş olduk. Bu sırada Access 2000’in araç buçuğunda ünlem işareti şeklinde bir simge belirdiğini görüyor musunuz? “Çalıştır” isimli bu araç, Access 2000’e “Bu sorguyu icra et ve sorduğum sorunun cevabını bana tablo alarak göster!” komutunun kısayoludur. Şimdi bu simgeyi tıklayalım.
İşte sorumuzun cevabı: Aile listemizde yer alan Şehir alanındaki değer “Istanbul” olan ve Çocuklar tablosunda kendilerine ait çocuk bulunan dostlarımızın listesi! Access ile çalışma becerinizi arttırdıkça, her çocuğu mensup oldukları aile ile aynı satıra “Çocuk 1,” “Çocuk 2” ... şeklinde yeni sütunlar halinde sıralamayı da sağlayabilirsiniz.
Bu sorgunun verdiği sonuçları doğru bulmuyorsanız, tekrar tasarım görünümüne dönebilirsiniz. Bunun için Access 2000 araç çubuğunda tasarım görünümü simgesini tıklayın. Sorgunun tasarımında istediğiniz değişikleri yaptıktan sonra Çalıştır simgesini tıklayabilirsiniz. Sorgunun istediğiniz sonucu verdiğini gördükten sonra kapatmaya kalktığınızda Access 2000 sorguyu veritabanı dosyasının içinde kaydededecektir.
Bir BSS tasarlamaya çalıştığınız sırada seçtiğiniz tablolar ilişkili değilse, Access 2000 sizi uyarır ve bu ilişkiyi kurmadan devam etmek istemez. Sorgu tasarımı sırasında seçtiğiniz tablolar arasındaki ilişki çizgisini silerek sorguyu çalıştırırsanız, anlamlı olmayan sonuçlar alırsınız.