Sıfırdan Microsoft Access SQL Sorguları Yazma

  • Harry James
  • 0
  • 2876
  • 630
reklâm

Microsoft Access, Microsoft Office paketinin tamamındaki tartışmasız en güçlü araçtır, ancak Office uzman kullanıcılar arasında gizemlidir (bazen korkutur). Word veya Excel'den daha dik bir öğrenme eğrisi ile, birinin başını bu aracın kullanımı etrafında nasıl sarması gerekiyor? Bu hafta, Bruce Epper, bu sorunun yol açtığı bazı sorunlara okurlarımızdan birinden bakacaktır..

Bir okuyucu sorar:

Microsoft Access'te bir sorgu yazma konusunda sorun yaşıyorum.

Sayısal ürün kodu ve ilişkili ürün adıyla 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ı içeren Sonuçlar ve mevcut olmadığında Tablo B'deki ürün adını içeren bir sütun eklemek istiyorum Tablo A’da.

Herhangi bir tavsiyen var mı?

Bruce kullanıcısının yanıtı:

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, Yapısal Sorgu Dili'ni (SQL) anlama gereksinimini ortadan kaldıran kullanıcılar için grafiksel bir arayüz sağlar..

SQL, veritabanında depolanan bilgileri eklemek, silmek, güncellemek ve iade etmek, ayrıca tablo veya dizinleri eklemek, silmek veya değiştirmek 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 henüz bir bilginiz yoksa, devam etmeden önce bu kaynaklarla başlamanızı öneririm:

  • Peki bir veritabanı nedir? Peki, yine de bir veritabanı nedir? [MakeUseOf Açıklar] Peki, Yine de Bir Veritabanı Nedir? [MakeUseOf Açıklar] Bir programcı veya teknoloji meraklısı için, bir veritabanı kavramı gerçekten verilen için alınabilecek bir şeydir. Bununla birlikte, birçok insan için veritabanı kavramı, biraz yabancı… Ryan Dube, ilişkisel veritabanlarının temelini göstermek için Excel'i kullanıyor..
  • Microsoft Access 2007'ye Başlamak İçin Hızlı Kılavuz Microsoft Access 2007'ye Başlamak İçin Hızlı Kılavuz Microsoft Access 2007'ye Başlamak İçin Hızlı Kılavuz Access'e ve Access veritabanını içeren bileşenlere genel bir bakış olan Microsoft Access 2007'ye Başlarken.
  • Microsoft Access 2007'deki Tablolara Hızlı Bir Öğretici Microsoft Access 2007'deki Tablolara Hızlı Bir Öğretici Microsoft Access 2007'deki Tablolara Hızlı Bir Öğretici, yapılandırılmış verilerinizi depolamak için ilk veritabanınızı ve tablolarınızı oluşturmaya bakar.
  • Microsoft Access 2007'de sorgular hakkında hızlı bir öğretici Microsoft Access 2007'de sorgular hakkında hızlı bir öğretici Microsoft Access 2007'de sorgular üzerinde hızlı bir öğretici veritabanı tablolarında depolanan verilerin belirli bölümlerini döndürmenin yollarını inceliyor.

Bu makalelerde sağlanan kavramlar hakkında temel bir anlayışa sahip olmak, aşağıdakileri sindirimi biraz daha kolaylaştıracak.

Veritabanı İlişkileri ve Normalleştirme

Tüm dünyada 50 farklı tipte widget satan bir şirket işlettiğinizi hayal edin. 1.250 müşteri tabanına sahipsin ve ortalama bir ayda bu müşterilere 10.000 pencere satıyorsun. Ş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.

Yukarıdaki resimler, kullandığınız sipariş takibi elektronik tablosunun bir parçasıdır. Şimdi, her iki müşterinin de sizden yılda birkaç kez widget satın aldığını ve bu nedenle her ikisi için de çok fazla satırınız olduğunu 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. Eğer 'Joan Smith' adında iki farklı müşteriniz varsa, sorun daha da karmaşıklaşı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 fazla tabloya ayırabiliriz..

Örneğimizin müşteri kısmına baktığımızda, Müşteri Adı ve Müşteri Adresi sütunlarını kaldırır ve bunları yeni bir tabloya koyarız. Yukarıdaki resimde, verilere daha ayrıntılı erişim için işleri daha iyi dağıttım. Yeni tablo, Birincil Anahtar (İstemci Kimliği) için bir sütun da içerir - bu tablodaki her satıra erişmek için kullanılacak bir sayı.

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

Şimdi, Joan Smith adını Joan Baines olarak değiştirdiğinde, değişikliğin Müşteri tablosunda sadece bir kez yapılması gerekir. Katılan tablolardan gelen diğer tüm referanslar uygun müşteri adını alacaktır ve Joan'ın son 5 yıl boyunca ne satın aldığına bakan bir rapor, raporun nasıl oluşturulduğunu değiştirmek zorunda kalmadan hem kızlık hem de evli isimler altındaki tüm siparişleri alacaktır..

Ek bir avantaj 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 ifadesinde isteğe bağlıdır..

Microsoft Access, INNER (varsayılan), LEFT OUTER, RIGHT OUTER ve CROSS kullanımına izin verir. FULL OUTER, böyle desteklenmiyor, ancak LEFT OUTER, UNION ALL ve RIGHT OUTER kullanılarak, daha fazla CPU çevrimi ve G / Ç işlemlerinin maliyeti karşılığında sahte olabilir.

Bir CROSS birleşiminin çıktısı, sağ tablonun her satırıyla eşleştirilmiş sol tablonun her satırını içerir. Şimdiye dek kullanılan bir CROSS üyeliğini gördüğüm tek zaman veritabanı sunucularının yük testi sırasında.

Temel birleştirmelerin nasıl çalıştığına bir göz atalım, sonra onları gereksinimlerimize uyacak şekilde değiştiririz.

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

Otomatik Sayı, girişlere, tabloya eklendiklerinde atanan otomatik olarak artan uzun bir tam sayıdır. Metin seçeneği değiştirilmedi, bu yüzden 255 karakter uzunluğunda bir metin dizesini kabul edecek.

Şimdi, onları bazı verilerle doldur.

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

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

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

Maddeler arasındaki ilişkiyi temsil eden tablolar arasındaki satıra sağ tıklayın. Üyelik Özellikleri'ni seçin.

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

Önce INNER grubuna bakacağız, bu yüzden 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), her iki tablodaki ProductName alanını, ilk sütunda ProdA tablosundaki ve ikincisinde ProdB değeri olan gösterecektir..

Sonuçlara göre, yalnızca ProductID'nin her iki tabloda da eşit olduğu değerleri gösterin. ProdB tablosunda ProductID = 1 için bir giriş olmasına rağmen, ProdA tablosunda ProductID = 1 bulunmadığından 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..

ProdA.ProductName, ProdB.ProductName ProdA INNER JOIN ProdA ÜZERİNDEN ProdB BİRLEŞTİRMENİN ÜRÜN TANIMI = ProdB.ProductID;

Tasarım görünümüne geri döndüğünüzde, 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, ProdB'deki ProdB tablosunda eşleşen bir ProductID girdisine sahip olanlar 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 ProDA'DAN SONRA KATILMIŞTIR ProdB ÜZERİNDEKİ ProdA.ProductID = ProdB.ProductID;

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

Sonuçlar, ProdA tablosunun eşleşen bir değere sahip olmadığı boş (NULL olarak bilinen) 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 ProDA'DAN SAĞ BİRLEŞTİRMENİN ProdB'İN ÜZERİNDEN ProdB.ProductID = ProdB.ProductID;

Sorguda İşlevleri Kullanma

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

Anında IF (IIF) fonksiyonu bu sonucu elde etmek için kullanılabilir. İşlev üç parametre alır. Birincisi, Gerçek veya Yanlış değerine göre değerlendirilmesi gereken bir durumdur. İ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şlevli yapı şuna benzer:

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

Koşul parametresinin eşitliği kontrol etmediğine dikkat edin. Veritabanındaki Null değeri, başka Null 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. Hiç. Bunu aşmak için, 'Is' anahtar sözcüğünü kullanarak değeri kontrol ederiz..

Aynı zamanda 'Boş Değil' seçeneğini kullanabilirdik ve aynı sonucu elde etmek için Doğru ve Yanlış parametrelerinin sırasını değiştirebilirdik..

Bunu Sorgu Tasarımcısı'na koyarken, tüm işlevi Alan: girişine yazmanız gerekir. 'Results' 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şlevi 'Results:' ile önceden yerleştirin..

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

ProdA.ProductName SELD, ProdB.ProductName, IIF (ProdA.ProductID NULL, ProdB.ProductName, ProdA.ProductName) ProdA SAĞLI JOIN ProdA.ProductID ÜZERİNDEKİ GİDERLER = ProdB.ProductID;

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

ProdA tablosunun bir değeri olduğu her giriş için bu değeri Results sütununa yansıtıyoruz. ProdA tablosunda bir giriş yoksa, ProdB'den giriş tam olarak okuyucumuzun sorduğu Sonuçlarda görünür..

Microsoft Access'i öğrenmek için daha fazla kaynak için Joel Lee'nin Microsoft Access'i Nasıl Öğreneceğinizi Öğrenin: 5 Ücretsiz Çevrimiçi Kaynaklar Microsoft Access'i Nasıl Öğrenirsiniz: 5 Ücretsiz Çevrimiçi Kaynaklar Microsoft Access'i Nasıl Öğrenirsiniz: 5 Ücretsiz Çevrimiçi Kaynaklar Çok miktarda yönetmeniz gerekiyor mu? veri Microsoft Access'e bakmalısınız. Ücretsiz eğitim kaynaklarımız, başlamanıza ve daha karmaşık projeler için gereken becerileri öğrenmenize yardımcı olabilir. .




Henüz no comments

Modern teknoloji hakkında basit ve uygun fiyatlı.
Modern teknoloji dünyasında rehberiniz. Her gün bizi çevreleyen teknolojileri ve araçları nasıl kullanacağınızı ve Internet'te ilginç şeyleri nasıl keşfedeceğinizi öğrenin.