.

21 Kasım 2010 Pazar

Firebird T-Sql Query & Tabloları Birleştirmek

Aslında birazdan anlatacağım ve uygulayacağımız sorgulama yöntemi Karmaşık Sql sorgular olarak adlandırılırlar.Başlığın ve logomuzun Firebird olması Firebird ODBC sürümünde dahi TSQL sorguların uygulanabilirliğini göstermektir.

Firebird ODBC sürümünde gayet hızlı ve verimli çalışan T-SQL Query çalışmalarımı buradan paylaşmaya ve elbette Firebird Veritabanının sınırlarını zorlamaya devam edeceğiz.



Bu yazıya kadar devam etmiş Firebird konulu bloglarım başlangıç notları niteliğindedir.Firebird ve Asp.Net web uygulamaları hakkında fikir edinmek yada uygulamak isteyenler için faydalı yazılar olduğunu umuyorum.Bu aldığım mailler ve diğer sitelerin yazılarıma link vermelerindende anlaşılıyor. Şimdi gayet uzun olacak Firebird ODBC V2.0 TSQL Query ile tablolarımızı nasıl birleştireceğiz görelim...

Herhangi bir Database için verilerimizi birleştirmek ve sunmak için şu soru aklımıza gelmelidir.
Birleştirmek mi Yoksa Alt Sorgular mı kullanmalıyım. ?
Öncelikle Ms Sql Server Relational Table (İlişkisel Tablolar) hakkında yazdığım yazıyı hatırlatmak isterim.O yazımda Primary Key ve Foreing Key yani Birincil ve Dış anahtar değerleri ile Database diagramları oluşturmak ve Table ilişkileri hakkında önemli bir kaç not paylaşmıştım.Sql Query kullandığım yazımda birden fazla Ms Sql server Tablosundan verilerimizi istediğimiz şekilde almıştık.Peki Firebird sürümleri için durum nasıldır? Ms Sql Managment Studio gibi çok önemli bir DBMS sisteminden yoksun Firebird için birden fazla Tabloları nasıl birleştireceğiz? Merak etmeyin TSql kalıpları ve fonsiyonları yanınızdadır.

Tablo Birleştirmeye genel bir bakış; Eğer herhangi bir veritabanı sadece SELECT gibi bir operatörü destekleseydi tüm verilerimizi tek bir tabloya yığmış olurduk bu münkündür, fakat çok fazla veri tekrarı olacağından veritabanında depolamak kadar sorgulamakta zahmetli bir iş olacaktı.Transact SQL birden fazla tablodan veri almayı sağlayan birleştirme operatörleri ile donatılmıştır.Daha somut bir örnekleme ile TSQL 2 tabloyu en az 5 kez ve farklı biçimde bağlayabilmekte.Bunlar "Equijoin,kartezyen,Doğal,Teta,Dış birleştirme" olarak bilinirler bizim en çok üzerinde durduğumuz yöntem ise Doğal Birleştirmedir ki belirli amaçları ve kazanımlarıda vardır.Sırasıyla bunlarıda anlatmaya fırsat bulabiliriz umarım.

Evet kullanacağımız birleştirme yöntemi Doğal Birleştirmedir.Peki hangi söz dizimi ile ? e SQL diyebilirsiniz.
Burda yeni başlayanların aklını karıştıracağım biraz fakat bunlarında bilinmesi gereklidir.İki yada daha fazla tabloyu birleştirmek için iki farklı söz dizimi kullanabilirsiniz.Bunlar ise ANSI ve SQL Server birleştirme dizimleridir.Nasıl Yani ? sorusunu sorduğunuzun farkındayım !

ANSI birleştirme dizimi birleştirme tipleri ve dizimi daha açık bir şekildedir.Buna göre WHERE kalıbı ile kapalı olmayan yeni FROM kalıbında açık anahtarlar kullanır.Bunların en çok kullanılanları INNER JOIN gibi açık dizilimleri içerir.
Sql Server birleştirme ise namı diğer eski usul olarak bilinir ve her birleştirme birleştirilecek sütünları kullanılarak kapalı olarak yazılır.Bu iki anlatımım Firebird ile yaptığımız bu örnek tablo birleştirmesi ile alakalı var fakat Hem Firebird sürümünde Sql Server kullanamadığımızdan, hemde Asp.Net Visual Studio 2010 gibi bir Editör kullacağımızdan bizim birleştirme işlemlerimiz Sql Query şeklinde olacaktır.Bu farkı anlamanız için anlatımımı daha geniş tutmuş oldum.Artık örnekler üzerinde konuşmaya başlayabiliriz.!

ISQL ile 3 Yeni Firebird Table oluşturdum.


ItemList - ItemCategorys - ItemGroup Table
Yapmak istediğim Firebird veritabanımda oluşturduğum Itemlist tablosuna ürün bilgilerimi kaydetmek,ürünlerimi kaydederken Primary keylerini belirleyeceğim kategoriler ve üst gruplarıda kaydetmek ve elbette daha sonra bunları dilediğim şartlarda ve kıstaslarda sorgulamak.
ItemCategorys adlı Firebird tablomda Kategoriler kaydedeceğim bunu bir alt grup olarak düşünebiliriz.Bir üst gruba fiziksel olarak bağlantısı olmayan kategorileri sorgularımda PRIMARY KEY ile yapmam münkün olacaktır.



ItemGroup isim Firebird Tablomda ise Kategorilerin üst kıstası olarak düşünelim ve Bir ürünü 2 farklı seçenekle kaydedeceğim.Buraya kadar herşey tamam.Bu örnek Firebird Table içinde relational türünde bir diagramım olmadığını ve ancak Sql Query ile veri birleştireceğim sanırım anlaşılmıştır...


Şimdi ise sırasıyla yapmamız gerekenler var ki bunları geçmiş bloglarda anlatmıştım.Sırasıyla sadece yazacağım blog içinde Database ve Firebird yazılarında biraz vakit geçirmenizi tavsiye ederim.
1 ODBC Driver System DSN yapılandırınız ...
2 Web Config Connection String yapılandırınız...
3 Mevcut Firebird Table içlerine uygun veriler girin...

Yukarıda uzunca yazdıklarıma birde manuel Database Diagramı iliştireyim.
Bir kaç Kitap verisi girdiğim ItemList tablom,  kategorilerle ve gruplar altında sorgulamaya başlıyorum.

Yandaki resimdede görüldüğü üzere hedef anahtarlarım bellidir.Buna göre yapmam gereken sorgularımı SELECT ve WHERE kalıplarına uyarlayacak ve Visaul Studio 2010 aracımda Define Custom Statament or Stored Prosedures  içine Query'lerimi yazmalıyım, bunu yaparken bir önceki bloglardan hatırlayacağınız Asp.Net Data aracım olan Sql Datasource konfigre etmem gerekli..


İki şekilde sorgularımı çalıştırabilirim.Visual Studio 2010 içinde Server Explorer bilgisini Connection String 'ten almış Database sağ tıklayarak New Query ile direk yazabilirim.yada...
Visual Studio 2010 Sql Datasource aracına SQL Server veya ANSI dizimiyle bir birleşim girdiğimde sonuç değişmeyecektir ve TSQL ile birleştirme işlemim gerçekleşecektir.

ItemList Table içeriğim şu şekilde

Firebird 2 Tabloyu Sql Query ile birleştirmek (ItemList Table = ItemCategorys Table)

SELECT     ItemName, ItemCatId, ItemCategorys.CategoryName
FROM         ItemsList, ItemCategorys
WHERE     (ItemsList.ItemCatId = ItemCategorys.CategoryId)

Firebird 3 Tabloyu Sql Query ile birleştirmek (ItemList Table = ItemCategorys Table) AND ItemGroups 



SELECT     ItemName, ItemCatId, ItemCategorys.CategoryName, ItemGroups.GroupName
FROM         ItemsList, ItemCategorys, ItemGroups
WHERE     (ItemCatId = CategoryId) AND (CategoryId = GroupId)



Visual Studio 2010 ve Firebird ODBC ile hazırladığım bu Asp.Net Web uygulaması örneğini edinmek ve incelemek isterseniz mail yada yorum yazarak bana ulaşmanız yeterli..

1 yorum:

  1. bir veri tablosundaki kayıtlı veri, başka bir tablonun adını teşkil etmektedir. bu bilgi ile select sorgusu içinde başka bir select sorgusu koşturup ilişki kurmam gerekiyor.
    REF_TABLO_ADI ve REF_TABLO_SNU

    bu konu ile ilgili yardımcı olabilir misin?

    bu iki kolon sayesinde tablolar arasında verisel çapraz ilişki kurdum.
    ancak view olarak bu bilgileri nasıl listeleme yapabilir?

    YanıtlaSil