Tekil Mesaj gösterimi
Alt 24 Nisan 2007, 20:24   #1
Çevrimdışı
Freak
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
SQL VE TQUERY Dev Arşiv...




SQL VE TQUERY


BÖLÜM 1

1.1 - Giriş

Bu makalede, Structured Query Language' in önemini programcılık yapacak kişilerin veya programlama dilleriyle uğraşan kişilerin kavramasına yardımcı olmak ve özellikle Delphi' de piyasada bulunan büyük bir açığı kapatmak hedeflenmiştir. Burada aynı zamanda şu sorulara da cevap aranmaya çalışılmıştır. TQuery nesnesinin özellikleri nasıl kullanılır ve ne gibi etkileri vardır ? Programlama aşamasında karşılaşılabilecek hatalar nelerdir? Metot ne demektir. Metotların kullanımı nasıl olmaktadır ? Hangi metotlar ne zaman kullanılmalıdır ?

Günümüz bilişim dünyası hızla gelişmekte, şirketler ve kurumlar arası dolaşan bilgi trafiği hızla artmaktadır. İşte bu trafiğe ve yığılan dosyaların imdadına bilgisayarlar yetişti. Yüksek veri depolama ve hız haftalar, aylar alan işlemleri saatlere düşürdü. Şirketlerin veri saklama ve bu veriler içi işlemlerin yükünden kurtulmaları bu yüksek hız ile birlikte sağlam veri tabanları ve bu veri tabanlarının optimum kullanımını gerektirmektedir. Veriler artık insanlar için çok değerlidirler ve iyi korunmaları, istenildiğinde istenilen bilgiye ulaşılabilmesi gerekmektedir. Milyonlarca veri, binlerce,on binlerce kayıt arasından sizin ihtiyaçlarınıza ve isteklerinize uyan bilgilerin en kısa zamanda ve yüksek güvenilirlik ve geçerlilikle size sunulması gerekmektedir.

1992 yılında Sicurello, F.; Villa, M. Ce İstanbul'da yapılan konferansta 'System to manage a clinical data base on aids' başlığıyla sorguların önemi üzerinde durulmuş ve şöyle denmiştir :

"...sorgular önemlidir çünkü bunlar bize daha önceden kaydedilmiş bilgileri hızlı bulabilmemizi sağlarlar. Ve bunları işleyebilir, seçilen verileri yazıcıdan çıkartabiliriz, laboratuar testleri ve grafikleri kolayca elde edebiliriz..."

Veri raporlama , istenilen verilerin bulunması insanlar için vazgeçilemez bir konuma gelmiştir. Burada yapılacak bir hata veya gözden kaçırılacak bir nokta çok önemli zararlara yol açabilmektedir.

Bu amaçlara yönelik olarak Structured Query Language (Yapısal Sorgu Dili) oluşturulmuştur. Sorgulama her dilde profesyonel program yapan programcılarca kullanılmaktadır. Visual Basic'te MsQuery , Oracle 'da PL/SQL kullanımı gibi. Bugün , veri tabanlarını kullanan her yazlımın ya da kullanıcının mutlaka SQL ile karşı karşıya gelmesi zorunlu olmaktadır.

SQL'in kullanım şekli diller arasında pek fazla fark etmemekle birlikte yine de bazı yazım farklılıkları mevcuttur.

SQL'in programcılıktaki önemli yerini Ruhver Barengi 1998 de yazmış olduğu kitabında şu şekilde ifade etmiştir "SQL Delphi' nin değil veri tabanlarının kendilerinin kullandığı bir dildir. Ancak Delphi sayesinde SQL cümleciklerini , veri tabanına göndermek ve veri tabanının verdiği yanıtları alarak işlemek mümkün olmaktadır. Uygulamalarda veri tabanlarını ve SQL cümleciklerini kullanmak çok verimli programlar üretmemize yardımcı olacaktır. Delphi' de SQL cümleciklerini veri tabanına göndermek için Tquery bileşenleri kullanılır."

Problem; veri tabanı uygulamalarında, veri tanımlama, veri bütünlüğünün kontrolü, veri tabanlarına erişimin kontrolü ve veri tabanlarının sorgulanması ve güncellenmesi amaçları için gerekli komutlara sahip bir alt dildir. (sub language). Alt dil denmesinin nedeni: bir bilgisayar dilinin sahip olması gereken tüm komutlara sahip olmayışıdır. SQL ilişkisel veri tabanındaki veriye erişim için kullanılan komut gruplarıdır. Bu makalede SQL'in Oracle' daki kullanım şekillerine de yer verilmekle birlikte asıl olarak Delphi' deki kullanımına değinilecek ve asıl sorgu nesnesi olan TQuery incelenecektir. TQuery nesnesinin özellikleri ve metotları ayrıntılı olarak anlatılacak ve çeşitli kısa program örnekleriyle konu pekiştirilmeye çalışılacaktır.

Hızlı ve etkili bir program yazabilmek için hem SQL mantığını hem de bunun Delphi' deki kullanımını iyi bilmek gerekir. Delphi bu konuda çok fazla özelliğe sahip olup bütün bunların incelenmesi ve anlaşılması, konu hakkındaki kaynakların hep İngilizce olması ve herkesin ingilizce seviyesinin bunları okuyup anlayabilecek seviyede olmaması nedeniyle konunun öğrenilmesini zorlaştırmaktadır.

66 özelliği ,97 metodu ve olaylarıyla çok karmaşık olan TQuery nesnesinin var olan tüm özelliklerini ve kullanım şekillerini bilmeden program yazmaya kalkmak elinde ne tür silahları olduğunu ve bu silahların gücünü, kapasitesini bilmeyen bir devletin savaşa girmesine benzer. Tabii ki bu devletin savaşı kazanması düşünülemez. Bir programcının da makalede verilen bilgilere sahip olmadan veri tabanı programı yazmaya kalkması yukarıdaki örnekteki gibi fiyaskoyla sonuçlanacaktır.
Yukarıda belirttiğim nedenlerle birlikte profesyonel bir program yazabilmek için SQL mantığı ve bilgisiyle birlikte TQuery nesnesinin öğrenilmesi zorunlu olmaktadır.

1.2 - BAZI TANIM VE KISALTMALAR

TANIM AÇIKLAMAAlias:Takma ad .Database konfigürasyon bilgisini özel bir veri tabanına bağlanmak için gerekli bilgiyi içerir. InterBase, dBase gibi.Alt sorgu:Sorgu içerisinde başka bir veri tabanından sorgulaya- rak veri alan bölüme denir.Blob:Resim dosyasının veri tabanındaki türü.Boolean:Mantıksal değer. True veya False değerlerini alır.Buffer:Tampon bellektir.Cache:Ön bellektir. Çok hızlı olması sebebiyle tercih edilir.CaseSensitive:Büyük küçük harf ayrımı yapması. A<>aClient:İstemci veya terminal olark ifade edilir.Component:Görsel geliştirme dillerinde kullanılan nesnel öğelere denir .Dataset:Tablo , veri tabanı bağlantısını belirtir.Deplhi'de temel veri tabanı sınıfıdır.DataSource:Veri tabanı veri bilinçli bileşeni. TTable, TQuery vb.. nesneler ile veri bilinçli nesnelerde gösterilecek veri için aracılık yapar.Event:Nesnelerle ilgili herhangi bir durumda meydana gelen olaylar. OnChange, OnExit gibi.Index:Belli bir alan dizisine göre çeşitli formatlarda sıralama.Join:Farklı tablolardan farklı alan verilerin alınıp birleştirilmesi.Keyfield:Anahtar alan.Master- Detail:Ana veri ve buna bağlı detay veri ilişkisiParametre:Yöntemlere (Procedure, Fonksiyon) değer göndermek ve almak için kullanılan değişkenlerPartialKey:Arama işleminde kısmi değer bildirimiPrimary Key:Birincil anahtar alanıRemote Server:Uzak sunucuServer:SunucuSession:OturumChild Obje:Çocuk nesneQuery:Sorgu.Belli kriterlere uyan veri kümesini elde etmeHost:SunucuProtokol:Yerel ve uzak uygulamalar arasında ver alış verişinde kullanılan ortak dilDML:Data Manipulation Language - Veri İşleme Dili-R-:Read Only - Salt Okunur[]:Tercihe bağlı kullanılacak parametre, özellik, değerleri göstermek için kullanılıyor.BDE:Borland Database Engine - Borland Veri Tabanı Motoru
BÖLÜM 2

2.1- SQL 'in Yapısı ve Gelişimi

Yapısal sorgu dili (SQL) sunucusu veri kümeleri üzerinde matematiksel ilişkiler gerçekleştiren veri tabanı motorudur. Burada verinin nasıl bulunduğunu anlatmaya gerek yoktur. Veriyi almak için sadece SQL e başvurmak yeter.

SQL, 1974 te icat edilmesine rağmen 1986 yılına kadar bir standart haline gelmedi. Bu arada bir çok geliştirmeci bunun üzerine ilişkisel veri tabanı sistemleri geliştirdiler. Bu desteklere rağmen bunlar yeterince uygun olmadı çünkü: ofissel bir standart ortaya konmadan geliştirilmişlerdi. SQL 'in ilk başlangıcı ilişkisel veri tabanı modelinin kuramını ortaya koyan , E
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
. Codd' un 'A relational model for large shared data banks " adlı makalesine dayandırmak olasıdır. Daha sonra IBM tarafından Structured English Query Language (SEQUEL) tanımlanmıştır. İlk SQL standardı ISO tarafından 1987'de ISO 9075 kodu ile yayınlanmıştır.Bu dilin standart bir dil olması hızla yaygınlaşmasını sağlamıştır. Ayrıca ANSI versiyonu ise , teknik olarak ISO 9075 ile tamamı aynı nitelikte olup 1986' da X3.135 kodu ile yayınlanmıştır. ISO ,1989'da 'bütünlük artırımı özelliğini' (integrity enhancement feature) ekleyerek ISO 9076 kodu ile yayınlamıştır. Ayrıca ANSI , gömülü (embedded) SQL dilleri ile ilişkili standartları da içeren X3.168 standardını yayınlamıştır.

Standartlar üzerindeki çalışmalar ve eklemeler halen sürmektedir.Standart SQL komutları ile çalışmanın doğal olarak uygulamaların çeşitli heterojen ortamlar arasında taşınabilirliği (portability), açık sistem mimarisini destekleme gibi çeşitli açılardan büyük yararları vardır.Bütün bunlarla birlikte SQL 'deki eksiklikler geliştirmecileri bu konudaki yeni eklemelere ve gelişmelere mecbur kılmıştır.


SQL lokal ve uzak veri tabanı mimarilerini desteklemektedir.

2.2- LOKAL SQL

Local SQL tam yol ve dosya ismi yazmanıza izin verir. Select from 'Parca.DBF' ifadesi ile Select from "C:\ORNEK\PARCA.DBF" ifadesinin yazımında ikisi de doğrudur. Bunlar yerine BDE Alias (takma adlar) da kullanılabilir. Örneğin Select from "
Bu forumdaki linkleri ve resimleri görebilmek için en az 25 mesajınız olması gerekir.
DDX:Table1"


NOT: Yerel tablo ismini yazmazsanız BDE Configuration Utility 'deki belirlenen tipi kabul eder. Bu tip tablolar ile Query nesneleri ile ilişkilendirilen standart takma adlar için olan varsayılan sürücü tipindedir.

Sütunlar

Local SQL Paradox' un çoklu kelimeli sütun isimlerini ve SQL anahtar kelimelerinin uzunluğunun iki katını desteklemektedir. Bu SQL anahtar kelimeleri şunlardır.

• Tek veya çift tırnak içinde yazılanlar
• SQL tablo ismi ile başlayan veya tablo ile ilişkili isimler

Örnek:
Select M."Mus_no" from Musteri

Tarihler

Local SQL tarihlerin U.S formatında da olduğu gibi MM/DD/YY (ay/gün/yıl) olarak girilmesini bekler.Uluslar arası tarih formatını desteklemez.

Veri İşleme

Bazı sınırlamalarla birlikte Local SQL aşağıdaki ifadeleri desteklemektedir.

Select : Var olan veriyi açmak için
Insert : Tabloya yeni bir veri eklemek için
Update : Var olan veriyi düzeltmek için
Delete : Tablodan veriyi silmek için


Aşağıdaki bölümler Local SQL DML ifadeleri için kullanılabilen fonksiyonları tarif eder.
• DML ifadelerindeki parametre alt durumları
• Toplam fonksiyonları
• String fonksiyonları
• Tarih (date) fonksiyonları
• Operatörler
• Güncellenebilen sorgular

SQL İfade ve Deyimleri

A) Select

Select ifadesi bir veya daha fazla tablodan veri getirmek için kullanılır. Çoklu tablolardan veri işini yapan Select ifadelerine "Join" (birleştirme) denir. Local SQL Select İfadelerinin aşağıdaki şekillerini desteklemektedir.

SELECT [DISTINCT] sütun_listesi
FROM tablo_adı
[WHERE arama_durumu]
[ORDER BY sıralama_listesi]
[GROUP BY grup_listesi]
[HAVING sahiplik_durumu]
[UNION secim_açıklaması]
(heterojen birleşmeler)
Aşağıda belirtilenler hariç bütün cümlecikler ANSI_standart SQL' ce kullanılır. [ ] içinde olanlar istenirse kullanılır.
A.1 Distinct Cümleciği

Kelime manası ayrı ,hariç,tek demektir. Deyim olarak aynı alandaki benzersiz olanları bulmayı ifade eder.
Aşağıdaki örnek şehir alanı ne olursa olsun tüm öğrencileri gösterir
Select ogr_sehir From Ogrenci

Aşağıdaki örnek ise sehirleri aynı oln öğrencilerin yalnız ilkini seçer.
Select DISTINCT ogr_sehir From Ogrenci


A.2 From Cümleciği

From cümleciği verinin getirileceği tablo veya tabloları belirtir . Tablo referansı tek bir tablo ,tabloların virgülle ayrıldığı bir liste veya iç/dış birleştirme (SQL -92 standartında belirtilen ) olabilir . Örneğin aşağıdaki ifade tek bir tabloyu çağırır :
Select ogr_ad,ogr_soyad From "Ogrenci.dbf"

Aşağıdaki ifade bir sol dış birleştirmesini gösteren tablo referansına bir örnektir.
Select From Parca left Outer join İthalat On Parca.Parca_no=Ithalat.Parca_no


A.3 Where Cümleciği

İsteğe bağlı olarak kullanılan Where cümleciği arama durumunda belirtilen kriterlere uyan kayıtların alınmasını böylece filtreleme yapılmasını sağlar.
Örneğin aşağıdaki ifade sadece Parca_nosu 543' den büyük olan satırları çağırır.
Select From Parca Where Parca_no>543

Where cümleciği IN yüklemini de içerebilir. IN yüklemi parantez ,içinde değerler listesini içerir. Örneğin aşağıdaki ifade sadece Parca_no 'su IN yüklem listesindeki öğelere eşit olan satırları çağırır.
Select From Parca Where Parca_no IN (543,544,650,680)
Select from Dersler Where bol_kod='12' and ogr_sinif='4'
Where cümleciğinde karşılaştırma için > ,<,=, <> gibi operatörler kullanılabilir. Bunun yanı sıra IN , ANY , ALL , EXIST yüklemleri de kullanılabilir

A.4 Order By

Order By cümleciği çağrılan satırların sırasını belirtir.
Örneğin aşağıdaki sorgu öğrenci ismine göre alfabetik(artan) sıralı olarak bütün öğrencilerin listesini verir
Select From Ogrenci Order By ogr_no ASC
aşağıdaki sorgu öğrenci soyadına göre alfabetik(azalan) sıralı olarak bütün öğrencilerin listesini verir.
Select From Ogrenci Order By ogr_soyad DESC

Hesaplanmış alanlar korelasyon( ilişki) ismine veya sıra durumuna göre sıralanabilir. Örneğin aşağıdaki sorguda ad ile soyad alanı birleştirilerek oluşturulan alana göre sıralanarak kayıtlar ekrana çağrılır.
Select soyad || ',' ad || as tam_ad ,telefon From müsteri Order by tam_ad

A.5 Group By

Group By cümleciği toplam fonksiyonları için çağrılan satırların nasıl gruplandırılacağını belirler.

Örnek:
Select Parca_no, Sum(miktar) as Toplam
From Parca
Group By Parca_no

A.6 Having

Having cümleciği kaydın sorguca belirlenen değerlere sahip olup olmadığına bakar. Group By ile birlikte kullanılır. Having cümleciğiyle denkleşmeyen gruplar sonuç kümesinden çıkarılırlar. Alt sorgular Having cümleciğince desteklenirler.

Alt sorgu ,ana sorguca döndürülecek kayıtların sayısını sınırlayan arama koşullarıdır. =,<,> gibi koşullandırmalar yanında IN ,ANY ,ALL, EXIST gibi ön yüklemler de kullanılabilir.

Bölümlere göre öğrenci sayıları 500 kişinin üstünde olan bölüm kodlarının listesini veren bir örnek aşağıdadır.
Select DISTINCT ogr_bol_kod, COUNT() From Ogrenci Group By ogr_bol_kod Having COUNT ()>500

A.7
Union

Union cümleciği iki veya daha fazla Select ifadesinin sonucundan tek bir tablo üretmek için kullanılır.
Örneğin :
Select From Ogrenci UNION Select From Veli

A.8 İntersect

Sorgulardan elde edilen ortak kayıtları verir.
Select From Ogrenci INTERSECT Select From Veli


A.9 Minus

Birinci sorguda bulunup ikinci sorguda bulunmayan kayıtların bulunmasında kullanılır.Diğer bir şekilde bir grup öğenin seçimden çıkarılması amacıyla kullanılır.
Select Ogr_num From Ogrenci MINUS (Select ali_ogr_num, From alınandersler)

A.10 Heterojen Birleşmeler

Local SQL farklı veri tabanlarındaki tabloların birleştirilmesini destekler. Heterojen birleştirme yapılacağı zaman yerel bir takma ad seçebilirsiniz. Takma ad seçmek için SQL/SELECT ALIAS 'ı seçin. Eğer Alias seçmezsen Local SQL tabloyu kullanılan veri tabanının olduğu aktif dizinde bulmaya çalışacaktır.
Örneğin ISLER Alias 'ı fonksiyonda geçen veri tabanı idaresi olabilir.
Yerel bir Alias seçtikten sonra bir tablo ismi belirtirsek

• Yerel tablolar için hem Alias' ı hem yolu belirtin
• Tabloları uzaktan kontrol için sadece Alias' ı belirtin

Aşağıdaki ifade Paradox tablosundan ve Dbase tablosundan veri getirir.
Select Distinct M.Müs_no,M.Sehir,S.Siparis_no From "MUSTERI.DB" M , "SIPARIS.DBF" Select Where M.Müs_no= S.Müs_no


B) Update

Ansi -Standard Update için belirtilen bir sınırlama yoktur.
Örneğin :
Update ULKETABLOSU Set baskent='Paris' Where ULKE='FRANSA' And baskent='Istanbul'


C) Delete

Ansi -Standard Delete için belirtilen bir sınırlama yoktur
Örneğin :
DELETE FROM TEZ9.DB WHERE SOYAD="ERTEM"

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet reklamver