İlan

Microsoft Access, tüm Microsoft Office paketindeki tartışmasız en güçlü araçtır, ancak Office güç kullanıcılarını gizler (ve bazen korkutur). Word veya Excel'den daha dik bir öğrenme eğrisiyle, herkesin bu aracın kullanımı etrafında kafasını nasıl sarması gerekir? Bu hafta, Bruce Epper okuyucularımızın birinden bu sorunun yol açtığı bazı konulara bakacaktır.

Bir Reader şunu sorar:

Microsoft Access'te sorgu yazmada sorun yaşıyorum.

Sayısal ürün koduna ve ilişkili ürün adına sahip ortak bir sütun içeren iki ürün tablosu içeren bir veritabanım var.

Tablo A'daki hangi ürünlerin Tablo B'de bulunabileceğini bulmak istiyorum. Varsa, Tablo A'daki ürün adını ve Tablo A'da bulunmadığında Tablo B'deki ürün adını içeren Sonuçlar adlı bir sütun eklemek istiyorum.

Herhangi bir tavsiyen var mı?

Bruce’un Cevabı:

Microsoft Access, hem Windows hem de Mac makinelerde 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ısal Sorgu Dili'ni (SQL) anlama ihtiyacını neredeyse ortadan kaldıran bir grafik arabirim sağlar.

instagram viewer

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

Başlangıç ​​noktası

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

  • Peki Veritabanı Nedir? Zaten Veritabanı Nedir? [Açıklamalar MakeUseOf]Bir programcı veya teknoloji meraklısı için, veritabanı kavramı gerçekten kabul edilebilir bir şeydir. Ancak, birçok insan için bir veritabanı kavramı biraz yabancıdır ... Daha fazla oku Ryan Dube ilişkisel veritabanlarının temellerini göstermek için Excel'i kullanır.
  • Microsoft Access 2007'ye Başlamak için Hızlı Bir Kılavuz Microsoft Access 2007'ye Başlamak için Hızlı Bir Kılavuz Daha fazla oku Access'e ve Access veritabanını oluşturan bileşenlere üst düzey bir genel bakış sağlar.
  • Microsoft Access 2007'deki Tablolara Hızlı Bir Eğitim Microsoft Access 2007'deki Tablolara Hızlı Bir Eğitim Daha fazla oku yapılandırılmış verilerinizi saklamak için ilk veritabanınızı ve tablolarınızı oluşturmaya bakar.
  • Microsoft Access 2007'deki Sorgular Üzerine Hızlı Bir Eğitim Microsoft Access 2007'deki Sorgular Üzerine Hızlı Bir Eğitim Daha fazla oku veritabanı tablolarında depolanan verilerin belirli kısımlarını döndürme yollarına bakar.

Bu makalelerde verilen kavramları temel olarak anlamak, 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 işlettiğinizi düşünün. 1.250 müşteri tabanınız var ve bu ayda ortalama ayda 10.000 widget satıyorsunuz. Şu anda tüm bu satışları izlemek için tek bir e-tablo kullanıyorsunuz - etkili bir şekilde tek bir veritabanı tablosu. Ve her yıl e-tablonuza binlerce satır ekler.

düz Tablo-1düz tablo-2

Yukarıdaki resimler, kullandığınız sipariş izleme e-tablosunun bir parçasıdır. Şimdi, bu müşterilerin her ikisinin de yılda birkaç kez widget satın aldığını ve böylece her ikisi için çok daha fazla satıra sahip olduğunuzu söyleyin.

Joan Smith Ted Baines ile evlenir ve soyadını alırsa, adını içeren her satırın şimdi değiştirilmesi gerekir. 'Joan Smith' adında iki farklı müşteriniz varsa, bu sorun daha da artmaktadır. Oldukça yaygın bir etkinlik 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.

normalleştirme

Örneğimizin istemci kısmına baktığımızda, Müşteri Adı ve Müşteri Adresi sütunlarını kaldırır ve yeni bir tabloya yerleştiririz. Yukarıdaki görüntüde, verilere daha ayrıntılı erişim için işleri daha iyi çözdüm. Yeni tablo ayrıca Birincil Anahtar (ClientID) için bir sütun içerir - bu tablodaki her satıra erişmek için kullanılacak bir sayı.

Bu verileri kaldırdığımız orijinal tabloya, bu belirli istemcinin bilgilerini içeren uygun satıra bağlanan Yabancı Anahtar (ClientID) için bir sütun ekleriz.

Ş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ştirilen tablolardaki diğer tüm referanslar, uygun müşteri adını ve Joan'ın ne için satın aldığını inceleyen bir rapor alır son 5 yıl, raporun şeklini değiştirmek zorunda kalmadan, hem kızlık hem de evli isimler altındaki tüm siparişleri alacak üretti.

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

Birleştirme Türleri

SQL beş farklı türde birleşim tanımlar: İÇ, SOL DIŞ, SAĞ DIŞ, TAM DIŞ ve ÇAPRAZ. OUTER anahtar sözcüğü SQL deyiminde isteğe bağlıdır.

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

Bir CROSS birleşiminin çıktısı, sol tablonun her satırını, sağ tablonun her satırı ile eşleştirilir. Şimdiye kadar kullanılan bir CROSS birleşimi 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, o zaman bunları ihtiyaçlarımıza göre değiştireceğiz.

Aşağıdaki tasarım özelliklerine sahip iki tablo, ProdA ve ProdB oluşturarak başlayalım.

erişim masa-defs

Otomatik Sayı, girdilere tabloya eklendikçe otomatik olarak artan uzun bir tamsayıdır. Metin seçeneği değiştirilmedi, bu nedenle 255 karakter uzunluğuna kadar bir metin dizesi kabul edecek.

Şimdi, bazı verilerle doldurun.

erişim masalar

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

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

Yeni sorgu

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

tasarım görünümü

Öğeler arasındaki ilişkiyi temsil eden tablolar arasındaki çizgiye sağ tıklayın ve Özellikleri Birleştir'i seçin.

join_properties

Varsayılan olarak, birleştirme türü 1 (INNER) seçilidir. Seçenek 2, SOL DIŞ bir birleşimdir ve 3 SAĞ DIŞ birleşimdir.

Önce INNER birleşimine 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.

tasarım görünümü-2

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

iç birleşim

Sonuçların yalnızca ProductID değerinin her iki tabloda da 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.

tasarım kurdele

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

ProdA INNER'dan ProdA.ProductName, ProdB.ProductName SEÇİN ProdA.ProductID = ProdB.ProductID üzerindeki ProdB'ye katılın;

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

Sol dış katılma

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

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

ProdA.ProductName, ProdB.ProductName'i ProdA SOL'DAN SEÇ ProdA.ProductID = ProdB.ProductID ÜZERİNE ProdB'ye KATILIN;

Üçüncü tür birleştirme ile de aynı şeyi deneyin (RIGHT OUTER).

right_outer_join

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 yaklaştırıyor.

ProdA.ProductName, ProdB.ProductName'i ProdA RIGHT'TAN SEÇİN ProdA.ProductID = ProdB.ProductID üzerindeki ProdB'ye katılın;

Sorguda İşlevleri Kullanma

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

Anında IF (IIF) işlevi bu sonucu oluşturmak için kullanılabilir. Fonksiyon üç parametre alır. Birincisi, Doğru veya Yanlış değer olarak değerlendirilmesi gereken bir durumdur. İkinci parametre, koşul Doğru ise döndürülecek değerdir ve üçüncü parametre, koşul Yanlış ise döndürülecek değerdir.

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

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

Condition parametresinin eşitliği denetlemediğine dikkat edin. Veritabanındaki bir Null değerinin, başka bir Null dahil olmak üzere başka herhangi bir değerle karşılaştırılabilecek bir değeri yoktur. Başka bir deyişle, Null, Null'a eşit değildir. Hiç. Bunu aşmak için, ‘‘ ’anahtar kelimesini kullanarak değeri kontrol ederiz.

Ayrıca, "Boş Değil" ifadesini kullanabilirdik ve aynı sonucu elde etmek için Doğru ve Yanlış parametrelerinin sırasını değiştirebilirdik.

Sorgu Tasarımcısı'na koyarken, tüm işlevi Field: girdisine yazmanız gerekir. "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şleve ‘Sonuçlar:’ ile önceden haber verin.

sağ-dış Aliased-sonuç-tasarım

Bunu yapmak için eşdeğer SQL kodu:

SELD ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID Boştur ProdB.ProductName, ProdA.ProductName) ProdA RIGHT JOD ProDB.ProductID = ProdB.ProductID ÜZERİNDEKİ Sonuçlar;

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

right_outer_with_aliased_results

Burada ProdA tablosunun bir değere sahip olduğu her giriş için bu değer Sonuçlar sütununa yansıtılır. ProdA tablosunda bir giriş yoksa, ProdB'deki giriş, tam olarak okuyucumuzun sorduğu Sonuçlar bölümünde görünür.

Microsoft Access'i öğrenmek için daha fazla kaynak edinmek için Joel Lee’nin Microsoft Access Nasıl Öğrenilir: 5 Ücretsiz Çevrimiçi Kaynak Microsoft Access Nasıl Öğrenilir: 5 Ücretsiz Çevrimiçi KaynakBüyük miktarda veriyi yönetmek zorunda mısınız? Microsoft Access'e bakmalısınız. Ücretsiz çalışma kaynaklarımız, daha karmaşık projeler için başlamanıza ve becerilerini öğrenmenize yardımcı olabilir. Daha fazla oku .

Bruce 70'lerden beri elektronikle, 80'lerin başından beri bilgisayarlarla oynuyor ve tüm zaman boyunca kullanmadığı veya görmediği teknoloji hakkındaki soruları doğru bir şekilde cevaplıyor. Ayrıca gitar çalmaya çalışarak da canını sıkıyor.