bu örneğimizde tüm personel bilgilerine ihtiyacımız olmadığı için sadece işimize yarayan bilgilerin tablodaki sütun isimlerini yazdık. Ayrıca Where komutunun kullanımı ile tablo içerisinde istenilen alanlara ulaştık. Ayrıca SQL.Add komutunu iki defa kullandık. İsterseniz yukarıdaki işlemleri aşağıdaki gibi tek satırda da yazabilirsiniz. Sonuç değişmeyecektir.
SQL.Add('SELECT adi, soyadi, Departman, MesaiBaslangic From personel Where Departman="Bilgi İşlem"');
örnek 3: Personel Maaş tablosunda bulunan çocuk yardımı ve lojman yardımını belirterek ek yardım diye sanal bir kolon oluşturma ve bu üç kolonu birlikte listeleme;
procedure TForm1.Button4Click(Sender: TObject);
begin
With Query1 Do
Begin
Query1.Close;
SQL.Clear;
SQL.Add('Select lojman, cocukyardimi, lojman+cocukyardimi As ekyardim *
From Bodro');
Query1.Open;
End;
end;
liste almak için oluşturduğumuz sorgu satırında yukarıda örneği verilen değişkenlerin kendi aralarında işlemlere tabi tutulması yanında, sabit değişkenlerle de toplama, çıkartma, bölme ve çarpma işlemlerine tabi tutulabilir.
örnek 4: Muhasebe ve İnsan kaynakları servisinde çalışan personeli, ad alanına göre küçükten büyüğe sıralama.
procedure TForm1.Button5Click(Sender: TObject);
begin
With Query1 Do
Begin
Query1.Close;
SQL.Clear;
SQL.Add('Select AdiSoyadi, Departman From Personel');
SQL.Add('Where Departman in ('Muhasebe, insankaynakları'));
SQL.Add('ORDER BY Adisoyadi');
Query1.Open;
End;
end;
iki ayrı tablodan kayıt okuyarak işlem yapmakta SQL sorgulama dilinde oldukça kolay olmaktadır. İki ayrı tablo birleştirilirken ilişkisel alanlardan faydalanılır. Bir müessesede personel giriş çıkışlarının tutulduğu bir tablo ile personel bilgilerinin tutulduğu ikinci tabloyu, personel ortak saydığımız personel numaraları vasıtası ile birleştirerek, personel işe başlama saatini ve personellerin baba adlarını listeleyelim.
procedure TForm1.Button6Click(Sender: TObject);
begin
With Query1 Do
Begin
Query1.Close;
SQL.Clear;
SQL.Add('Select P.PersonelNo, P.BabaAdi, M.isegiris FROM Personel P, Mesai M');
SQL.Add('Where P.PersonelNo=M.PersonelNo');
Query1.Open;
End;
end;
Aşağıdaki örneklerler size SQL komutları ile tablolara hakim olmanın zevkini tattıracaktır. SQL komutlarını database programlarınızda kullandıkça eksikliğini duyduğunuz şeyleri yavaş yavaş hakimiyetiz altına girdiğini göreceksiniz.
örnek I: X firmasında alacakları olan personellerin adı soyadını ve alacaklarını SQL komutları ile şarta bağlı olmadan okuyalım.
Bu örneğe dikkat edilirse iki tablodaki bilgiler birbiri ile ilişkilendirilecek daha sonra her iki tablodan da bazı sütun bilgileri sonuç olarak döndürülecek. Ve bu iki tablonun bire bir olmadığını varsayalım.
Şimdi örnekte belirtilen isteğimizi yerine getirecek olan komut satırını yazalım.
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select Tablo1.AdiSoyadi, Tablo2.Alacaklar From Table2, Table1');
Query1.SQL.Add(' Where Tabo1.PerNosu=Tablo2.PerNosu'); Query1.Open;
end;
yazmış olduğumuz komut satırında adisoyadi bilgisini tablo1'den almasını söylemek için tablo1. Adisoyadi ve alacaklar listesini de Tablo2 ' de alması gerektiğini belirtmek için tablo2. Alacaklar şeklinde belirtik.
Şayet değişkenleri birden fazla tablodan çağırıyorsak, tablo isimlerini değişken başına yazmak yerine kısaltmalarda kullanabilirsiniz.
Query1.SQL.Add(' Select P.AdiSoyadi, A.Alacaklar From Table2 A, Table1 P');
Kullandığımız harflerde bağlayıcı bir sınırlama bulunmamaktadır. Yukarıdaki komut satırında from komutundan sonra tablo isimleri ardından da bu tabloyu ilişkilendirecek olan harfi yazıyoruz. Tablo1 ile P değişkenini isimlendirdik artık personel değişkenlerinden herhangi bir sütuna ulaşmak istediğinizde P.Departmanı, P.Medeni hal şeklinde yazarak ulaşabilirsiniz.
Not : SQL komut satırlarını yazarken aklınızdan çıkartmamanız gereken nokta From komutundan sonra yazmış olduğunuz tablolarda küçük olan tabloyu en sona yazmaya dikkat edin şayet ikiden fazla tablo kullanıyorsanız sıralama büyük tablo en başta sonra bir küçüğü, akabinde daha küçüğü gelecek şekilde olsun. Bu sıralamaya dikkat etmeniz halinde tablonuz üzerinde yapmış olduğunuz işlemlerde performans daha iyi olacaktır.
örnek II : X firmasında çalışan evli ve 500 milyon ve üzerinde maaş alan personellerinin listesi.
Böyle bir problemde yapacağımız örnek birinci örnekten farklı olmayacaktır, sadece koşul satırına iki kelime daha ekleyeceğiz. Değiştireceğimiz komut satırı aşağıdaki gibi olacaktır. Bu örnekle birlikte sorgu satırına and, or vs. ve olmak üzere boolean cebirini kullanabiliyorsunuz.
Query1.SQL.Add(' (Where Tablo1.PerNosu=Tablo2.PerNosu) and (Tablo2.PerNosu >= '700000000')');
Örnek III : Firma da telefon kaydı bulunmayan personellerin listesini gösterme ...
Bu problemi çözebilmemiz için boş alanlara göre sorgulama yapmamız gerekmektedir. Örnek 2 'de olduğu gibi bu örnekte de sadece where satırında değişiklik yapmamız yeterli olacaktır.
Query1.SQL.Add (' (Where Tablo1.EnTelefonu is Null)');
// eğer telefonu olanları listelemek isteseydik...
Query1.SQL.Add (' (Where Tablo1.EnTelefonu is not Null)');
// şeklinde yazmamız gerekecekti.
Buraya kadar gördüklerinizle aklınıza gelebilecek onlarca raporu çok kolay bir şekilde alabilirsiniz.
Like Komutunun Kullanımı :
Where koşul komutu ile birlikte kullanılır (Genellikle Fulltext soruce aramalarında). Örneğin; bir Tmemo alanında bulunan doküman içerisinden bir arama yapmamız gerekiyorsa bu komutu kullanmamız gerekecektir. LIKE komutunun bir diğer kullanım alanı SQL' de tam olmayan bilgilere göre arama yapmak istediğinizde kullanmanız gerekmektedir. Bu komut şu şekilde kullanılır.
% : Aranan kelimenin başı ne olursa olsun sonu da değeri var ise o kayıtları bize döndürecektir. diğeri ile bite kelimeleri getirecektir.
%% : Kelimenin Sonu ve başına bakılmadan kelime içerisinde geçen kayıtları getirecektir.
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From Table1');
Query1.SQL.Add(' Where Adisoyadi like ');
Query1.Open;
end;
Like komutunun yukarıda da bahsettiğimiz gibi daha çok kullanıldığı alanı herhangi bir metin içerisinde arama yapmasıdır. Metin içerisinde aramalarda aranan anahtar kelimenin başına ve sonuna yüzde işareti konur. Örneğin bir database içerisinde binlerce doküman tutuyoruz diyelim. Bu binlerce doküman içerisinde ayanı anda İstanbul ve İzmir geçen dokümanlara ulaşmak isteyelim bu durumda yazacağımız komut satırı aşağıdaki gibi olacaktır.
Metin değişkeni TMemo tipinde varsayın..
procedure TForm1.ButtonClick(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Add('Select * From Table1');
Query1.SQL.Add('Where (Metin like '%Nihat%') and (Metin like '%ibrahim%')');
Query1.Open;
end;
SQL komutlarını yazarken direk "Query1.SQL.Add('Where... " şeklinde yazmak yerine bu bilgiler bir değişken üzerinde hazırlandıktan sonra SQL komut satırına atamamız esnekliği daha da arttıracaktır. Örneğin edit1 içerisinden Nihat Edit2 içerisinden ibrahim yazısını alıp arattığımızı düşünülelim.
Önce bunları bir değişken üzerinde hazırlamamız aşağıdaki gibi olacaktır.
procedure TForm1.ButtonClick(Sender: TObject);
Var
Kosul : String;
Begin
Kosul := 'Where (Metin like %' + Edit1.Text + '%) and (Metin like %' + Edit2.Text + '%)');
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Select * From Table1');
Query1.SQL.Add(Kosul);
Query1.Open;
end;
//Not: Bu bilgileri Delphi seni seviyordan alındı.