Sıfırdan Microsoft Access SQL Sorguları Nasıl Yazılır

Sıfırdan Microsoft Access SQL Sorguları Nasıl Yazılır

Microsoft Access, tüm Microsoft Office paketindeki tartışmasız en güçlü araçtır, ancak Office uzman kullanıcılarını şaşırtıyor (ve bazen korkutuyor). Word veya Excel'den daha dik bir öğrenme eğrisi ile, birinin bu aracın kullanımına nasıl kafa yorması gerekiyor? Bu hafta Bruce Epper, okuyucularımızdan birinden gelen bu sorunun yol açtığı bazı konulara bakacak.





Bir Okuyucu sorar:

Microsoft Access'te sorgu yazarken sorun yaşıyorum. Sayısal ürün kodu ve ilişkili ürün adı içeren ortak bir sütun içeren iki ürün tablosu içeren bir veritabanım var. Tablo A'dan hangi ürünlerin bulunabileceğini öğrenmek istiyorum Tablo B'de. Varsa Tablo A'daki ürün adını, Tablo A'da yoksa Tablo B'deki ürün adını içeren Sonuçlar adlı bir sütun eklemek istiyorum. Herhangi bir tavsiyeniz var mı?





Bruce'un Cevabı:

Microsoft Access, hem Windows hem de Mac makinelerinde kullanılmak üzere tasarlanmış bir Veritabanı Yönetim Sistemidir (DBMS). Veri işleme ve depolama için Microsoft'un Jet veritabanı motorunu kullanır. Ayrıca, kullanıcılar için Yapılandırılmış Sorgu Dili'ni (SQL) anlama ihtiyacını neredeyse ortadan kaldıran bir grafik arabirim sağlar.





SQL, veritabanında depolanan bilgileri eklemek, silmek, güncellemek ve döndürmek ve ayrıca tablo veya dizin ekleme, silme veya değiştirme gibi temel veritabanı bileşenlerini değiştirmek için kullanılan komut dilidir.

Başlangıç ​​noktası

Access veya başka bir RDBMS hakkında bilginiz yoksa, devam etmeden önce şu kaynaklarla başlamanızı öneririm:



Bu makalelerde verilen kavramların temel bir anlayışına sahip olmak, aşağıdakileri sindirmeyi biraz daha kolaylaştıracaktır.

Veritabanı İlişkileri ve Normalleştirme

Tüm dünyada 50 farklı türde widget satan bir şirket yönettiğinizi hayal edin. 1.250 müşteri tabanınız var ve bu müşterilere ortalama ayda 10.000 widget satıyorsunuz. Şu anda tüm bu satışları izlemek için tek bir elektronik tablo kullanıyorsunuz - etkin bir şekilde tek bir veritabanı tablosu. Ve her yıl elektronik tablonuza binlerce satır ekler.





Yukarıdaki resimler, kullandığınız sipariş takip elektronik tablosunun bir parçasıdır. Şimdi, bu müşterilerin her ikisinin de yılda birkaç kez sizden widget satın aldığını söyleyin, böylece her ikisi için çok daha fazla satırınız olur.





Joan Smith, Ted Baines ile evlenir ve soyadını alırsa, adını içeren her satırın artık değiştirilmesi gerekir. 'Joan Smith' adında iki farklı müşteriniz varsa, sorun daha da artar. Oldukça yaygın bir olay nedeniyle satış verilerinizi tutarlı tutmak çok daha zor hale geldi.

Bir veritabanı kullanarak ve verileri normalleştirerek, öğeleri envanter, müşteriler ve siparişler gibi birden çok tabloya ayırabiliriz.

Örneğimizin müşteri kısmına bakarak, Müşteri Adı ve Müşteri Adresi sütunlarını kaldırıp yeni bir tabloya koyardık. Yukarıdaki resimde, verilere daha ayrıntılı erişim için işleri daha iyi ayırdım. Yeni tablo ayrıca, bu tablodaki her satıra erişmek için kullanılacak bir sayı olan Birincil Anahtar (ClientID) için bir sütun içerir.

Bu verileri kaldırdığımız orijinal tabloda, bu belirli müşteri için bilgileri içeren uygun satıra bağlanan bir Yabancı Anahtar (ClientID) için bir sütun eklerdik.

Şimdi, Joan Smith adını Joan Baines olarak değiştirdiğinde, değişikliğin Müşteri tablosunda yalnızca bir kez yapılması gerekir. Birleştirilmiş tablolardaki diğer tüm referanslar uygun müşteri adını alacak ve Joan'ın son 5 yılda ne satın aldığına bakan bir rapor, raporun oluşturulma şeklini değiştirmek zorunda kalmadan hem kızlık hem de evli adları altındaki tüm siparişleri alacaktır. .

Ek bir fayda olarak, bu aynı zamanda tüketilen toplam depolama miktarını da azaltır.

Birleştirme Türleri

SQL beş farklı birleşim türünü tanımlar: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER ve CROSS. OUTER anahtar sözcüğü, SQL deyiminde isteğe bağlıdır.

Microsoft Access, İÇ (varsayılan), SOL DIŞ, SAĞ DIŞ ve ÇAPRAZ kullanımına izin verir. FULL OUTER bu şekilde desteklenmez, ancak LEFT OUTER, UNION ALL ve RIGHT OUTER kullanılarak daha fazla CPU döngüsü ve G/Ç işlemi pahasına taklit edilebilir.

Bir CROSS birleştirmenin çıktısı, sağdaki tablonun her satırıyla eşleştirilmiş soldaki tablonun her satırını içerir. Bir CROSS birleştirmenin kullanıldığını gördüğüm tek zaman, veritabanı sunucularının yük testi sırasında.

Temel birleşimlerin nasıl çalıştığına bir göz atalım, sonra bunları ihtiyaçlarımıza göre değiştireceğiz.

Aşağıdaki tasarım özellikleriyle ProdA ve ProdB olmak üzere iki tablo oluşturarak başlayalım.

Otomatik Sayı, girdiler tabloya eklendikçe atanan, otomatik olarak artan uzun bir tamsayıdır. Metin seçeneği değiştirilmedi, bu nedenle 255 karaktere kadar bir metin dizesini kabul edecek.

Şimdi, onları bazı verilerle doldurun.

3 birleştirme türünün çalışma biçimindeki farklılıkları göstermek için ProdA'dan 1, 5 ve 8 girişlerini sildim.

Sonraki, yeni bir sorgu oluştur giderek Oluştur > Sorgu Tasarımı . Tabloyu Göster iletişim kutusundan her iki tabloyu da seçin ve Ekle'yi tıklayın , sonra Kapat .

ProdA tablosundaki ProductID'ye tıklayın, bunu ProdB tablosundaki ProductID'ye sürükleyin ve tablolar arasında ilişki oluşturmak için fare düğmesini bırakın.

Öğeler arasındaki ilişkiyi temsil eden tablolar arasındaki çizgiye sağ tıklayın ve Mülklere Katıl'ı seçin .

Varsayılan olarak, birleştirme türü 1 (INNER) seçilidir. Seçenek 2, bir LEFT OUTER birleşimidir ve 3, bir RIGHT OUTER birleşimidir.

Önce INNER birleştirmeye bakacağız, bu nedenle iletişim kutusunu kapatmak için Tamam'ı tıklayın.

Sorgu tasarımcısında, açılır listelerden görmek istediğimiz alanları seçin.

Sorguyu çalıştırdığımızda (şeritteki kırmızı ünlem işareti), ilk sütunda ProdA ve ikinci sütunda ProdB tablosundaki değerle her iki tablodan ProductName alanını gösterecektir.

Sonuçların yalnızca her iki tabloda da ProductID'nin eşit olduğu değerleri gösterdiğine dikkat edin. ProdB tablosunda ProductID = 1 için bir giriş olmasına rağmen, ProdA tablosunda ProductID = 1 olmadığı için sonuçlarda görünmüyor. Aynısı ProductID = 11 için de geçerlidir. ProdA tablosunda bulunur, ancak ProdB tablosunda yoktur.

Şeritteki Görünüm düğmesini kullanarak ve SQL Görünümüne geçerek, bu sonuçları almak için kullanılan tasarımcı tarafından oluşturulan SQL sorgusunu görebilirsiniz.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Tasarım Görünümüne geri dönerek, birleştirme türünü 2 (LEFT OUTER) olarak değiştirin. Sonuçları görmek için sorguyu çalıştırın.

Gördüğünüz gibi, ProdA tablosundaki her giriş sonuçlarda temsil edilirken, sonuçlarda yalnızca ProdB'de, ProdB tablosunda eşleşen bir ProductID girişine sahip olanlar gösterilir.

ProdB.ProductName sütunundaki boş alan, ProdB tablosunda eşleşen bir değer olmadığından özel bir değerdir (NULL). Bu daha sonra önemli olacak.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Aynı şeyi üçüncü birleşim türüyle de deneyin (RIGHT OUTER).

Sonuçlar, ProdA tablosunun eşleşen bir değere sahip olmadığı boş (NULL olarak bilinir) değerleri gösterirken, ProdB tablosundaki her şeyi gösterir. Şimdiye kadar, bu bizi okuyucumuzun sorusunda istenen sonuçlara en yakın hale getiriyor.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Bir Sorguda İşlevleri Kullanma

Bir işlevin sonuçları, bir sorgunun parçası olarak da döndürülebilir. Sonuç kümemizde 'Sonuçlar' adlı yeni bir sütunun görünmesini istiyoruz. Değeri, ProdA'nın bir değeri varsa (NULL değilse), ProdA tablosunun ÜrünAdı sütununun içeriği olacaktır, aksi takdirde ProdB tablosundan alınmalıdır.

Bu sonucu oluşturmak için Anında EĞER (IIF) işlevi kullanılabilir. Fonksiyon üç parametre alır. Birincisi, True veya False değeri olarak değerlendirilmesi gereken bir koşuldur. İkinci parametre, koşul True ise döndürülecek değerdir ve üçüncü parametre, koşul False ise döndürülecek değerdir.

Durumumuz için tam işlev yapısı şöyle görünür:

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

Koşul parametresinin eşitliği kontrol etmediğine dikkat edin. Bir veritabanındaki Null değeri, başka bir Null da dahil olmak üzere başka herhangi bir değerle karşılaştırılabilecek bir değere sahip değildir. Başka bir deyişle, Null, Null'a eşit değildir. Durmadan. Bunu aşmak için, bunun yerine 'Is' anahtar sözcüğünü kullanarak değeri kontrol ederiz.

Aynı sonucu elde etmek için 'Is Not Null' kullanabilir ve True ve False parametrelerinin sırasını değiştirebilirdik.

Bunu Sorgu Tasarımcısına yerleştirirken, tüm işlevi Alan: girişine yazmalısınız. 'Sonuçlar' sütununu oluşturmasını sağlamak için bir takma ad kullanmanız gerekir. Bunu yapmak için, aşağıdaki ekran görüntüsünde görüldüğü gibi işlevin önüne 'Sonuçlar:' ile başlayın.

Bunu yapmak için eşdeğer SQL kodu şöyle olacaktır:

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Şimdi bu sorguyu çalıştırdığımızda bu sonuçları üretecek.

adanmış video ram nasıl değiştirilir

Burada, ProdA tablosunun bir değere sahip olduğu her giriş için bu değerin Sonuçlar sütununda yansıtıldığını görüyoruz. ProdA tablosunda bir giriş yoksa, ProdB'den gelen giriş, tam olarak okuyucumuzun istediği gibi Sonuçlar'da görünür.

Microsoft Access'i öğrenmek için daha fazla kaynak için Joel Lee'nin Microsoft Access Nasıl Öğrenilir: 5 Ücretsiz Çevrimiçi Kaynak bölümüne bakın.

Paylaş Paylaş Cıvıldamak E-posta Windows 11'e Yükseltmeye Değer mi?

Windows yeniden tasarlandı. Ancak bu sizi Windows 10'dan Windows 11'e geçmeye ikna etmek için yeterli mi?

Sonrakini Oku
İlgili konular
  • üretkenlik
  • Uzmanlara Sorun
Yazar hakkında bruce epper(13 Makale Yayınlandı)

Bruce, 70'lerden beri elektronikle, 80'lerin başından beri bilgisayarlarla oynuyor ve tüm zaman boyunca kullanmadığı veya görmediği teknolojiyle ilgili soruları doğru bir şekilde yanıtlıyor. O da gitar çalmaya teşebbüs ederek kendini rahatsız ediyor.

Bruce Epper'dan Daha Fazla

Haber bültenimize abone ol

Teknik ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için bültenimize katılın!

Abone olmak için buraya tıklayın