Access'te SQL Kullanımı

28/08/2011, 16:37

mehmetdemiral

ACCESS’TE SQL


Veritabanı penceresinde Sorgu sayfasında yeni bir Sorgu oluşturalım. Sorguyu açtıktan sonra çıkan tablo seçme formundan sorgulamak istediğimiz tabloyu seçelim. (Yeni bir dosyada çalışıyorsanız, tabii ki önce bir tablo oluşturmalısınız.) Karşımıza, adının sonundaki sıfatı fazlasıyla hakeden Sorgu Sihirbazı çıktı.
Ben Kisiler tablosunu seçtim. Şimdi yukarıda öğrendiğimiz Sql kodlarını ilk olarak burada deneyebiliriz. Görünüm menüsünden Sql Görünümü’nü seçin.

Bende "SELECT FROM Kisiler;" görünüyor. Bunu, öğrendiğimiz kurallara uyarak;
SELECT Ad, Soyad
FROM Kisiler
WHERE Ad="Ahmet"
olarak değiştiriyorum. Görünüm menüsünden Tasarım’a geçtiğimizde nasıl bir görüntü oluştuğuna bakınız.


SELECT kısmında * işareti de kullanabilirdik. Şöyle bir ayrıntıyı hatırlatmalıyım burada ki, bazı durumlarda tasarım görünümünde bütün alanlar olmamasına rağmen sorguyu çalıştırınca bütün alanlar listelenebiliyor. Bu, sorguların bütün alanları gösterme özelliğinin aktif olmasından dolayıdır. Görünüm menüsündeki Özellikler komutundan çıkan pencerede "Tüm Alanları Göster" (Output All Fields) kısmındaki değeri NO yaparsanız sadece sizin seçtiğiniz alanlar listelenecektir.



Üçüncü örneğimizde Ad, Soyad, No, soyad, Ad alanları seçilmiş.
SELECT Ad, Soyad, [No]
FROM Kisiler
WHERE ( ([No])<100) AND (Soyad) Like "A*") )
ORDER BY Soyad DESC, Ad;

Bu metinle resmi birleştirelim:
1. No alanının parantez içine alınmasının sebebi "NO"nun özel bir kelime olup yorumlayıcı tarafından "Hayır" anlamında anlaşılmamasıdır.
2. En sağdaki Soyad ve Ad alanlarının ikinci kez kullanılmasının sebebi sıralamayı sütunların sıralanmasından farklı yapabilmek için. Yani önce Ad’a sonra Soyad’ göre sıralamak isteseydik baştaki Ad ve Soyad alanlarında sıralama seçerdik. Ama biz önce Soyad’ı istediğimiz için son tarafa bunları koyup Göster (Show) işaretini kaldırdık. (Aynı şeyi 2. soyad alanını birincinin olduğu yere taşıyarak da yapabilirdik. Zira, hem ORDER BY hem de SELECT için seçili alanların sırası aynı olacak.)
3. Sadece Göster (Show) değeri işaretli olan alanlar görüntülenir. Bunlar SELECT kısmına dahil edilir. (Tüm alanları gösterme özelliği kapalıysa tabii.)
4. Dördüncü sütundaki LIKE cümleciğini No alanınkinden alt satırda kullanmamızın sebebi VEYA sorgusu elde edebilmek. Yani " NO<100 OR SOYAD LIKE ‘A*’ " gibi. İkisini aynı satırda kullanırsak VE sorgusu elde ederiz ki, bu, cümlemizdeki "OR"un "AND"a dönüşeceği anlamına gelir.
Bu tasarım modunda ne kadar karışık ya da sade yaparsak yapalım Access evirip çevirip kendi bildiği gibi bir Sql kodu üretecektir.

SELECT Kisiler.Ad, Kisiler.Soyad, Kisiler.[No], *
FROM Kisiler
WHERE (((Kisiler.[No])<100)) OR (((Kisiler.Soyad) Like "A*"))
ORDER BY Kisiler.Soyad DESC , Kisiler.Ad;
Beşinci madde olarak da şunu ekleyeyim o zaman: Alan isimlerinin başına tablonun ismi yazılabilir. Bu, birden çok sayıda kullanılan tabloların olduğu sorgularda daha işe yarar olur.

HERKES İÇİN SORGULAR GRUPLAYARAK TOPLAMLAR ALMAK
Sorgularla ilgili en çok sorulan sorulardan biri gruplamalar hakkında.
o Her ürün ana grubunun içinde kaç adet ürün var?
o Her güne ait toplam satış tutarını nasıl hesaplayacağım?
Yukarıdakiler gibi sorularınız varsa GROUP BY deyimini kullanmanız gerekiyor demektir. Bunu en kolay yapabileceğimiz yer Access'teki Query Builder.
Yeni bir Query (Sorgu) oluşturup içine Kitaplar tablosunu ekleyin. Veri alanlarını alttaki sütunlara yerleştirip View > Totals (Görünüm > Toplamlar) menüsünü seçin ve Query1 resmindeki gibi sorguyu düzenleyin.

Bu haliyle sadece grup adını ve o grupta kaç kitap olduğunu bulmuş oluyoruz. Geçen aylarda bahsettiğimiz UNION sorgu türü ile toplam kitap adedini de bu sorguya dahil edelim.
SELECT GrupAdi, Adet
FROM
(
SELECT Grup as GrupAdi,
COUNT(Grup) AS Adet, 0 AS Sira
FROM Kitaplar
GROUP BY Grup
UNION
SELECT "(TOPLAM)" as GrupAdi,
COUNT(ID) as Adet, 1 AS Sira
FROM Kitaplar
)
AS Liste
ORDER BY Sira, Adet DESC;
Query2 resminde gördüğünüz gibi her bir grup adını ve içinde kaç adet kitap olduğunu listelemekle beraber en altta da toplam kitap adını göstermiş oluyoruz.
Sorguda kullandığımız Sira adlı alan UNION sorgu içindeki farklı iki kümeyi birbirinden ayırmak içindi. İlk kümeyi 0, ikincisini de 1 yapıp bu alanı en altta ORDER BY içine yerleştirmek yeterli oluyor.
Genel olarak adet bulma işlemleri için COUNT deyimini kullanmalısınız. Toplam hesaplamak için ise SUM deyimi kullanılıyor. AVG, MIN, MAX, STDEV, FIST, LAST gibi deyimlerle de ortalama, en küçük, en büyük, standart sapma, ilk, son gibi değerleri elde edebilirsiniz.
28/08/2011, 23:51

benremix

Eline sağlık hocam.

Saygılar....
29/08/2011, 01:56

life_exciting

Paylaşım İçin Teşekkürler,Elinize Sağlık Hocam.
29/08/2011, 02:06

DUAYEN

Teşekkürler hocam eline sağlık.
29/08/2011, 07:58

ozanakkaya

Teşekkürler Mehmet hocam,
31/08/2011, 11:35

assenucler

Sayın MehmetDemiral,

Emek ve paylaşımınız için teşekkürler.

İyi bayramlar..