Şimdi Ara

Combobox ta seçilen değere göre databeseden sorgulama

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
6
Cevap
0
Favori
5.582
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhabalar. Combobox ta seçilen bir değeri, x tablosundaki değerle eşleyip, eğer eşitse, inputbox a x tablosundan bir alanı otomatik olarak getirmek istiyorum. aşağıdaki gibi yapmaya çalıştım.
    <td>
    <select name="StoKod1">
    <%
    sql1 = "select StokKodu from webStoklar "
    MyRsQueryBegin(sql1)
    While not MyRs.Eof
    %>
    <option value="<%= MyRs("StokKodu" ) %>"><%= MyRs("StokKodu" ) %>
    <%
    MyRs.Movenext
    Wend
    MyRsQueryEnd()
    %>
    </select>
    </td>
    </td>

    üstteki kod combobox içine tüm stok kodlarını getiriyor. Burda seçtiğim stok kodu Eğer Stoklar tablosunda var ise, Stoklar tablosundan StokAdi ni bir inputbox a aktarsın istiyorum. Yardımlarınız için teşekkürler şimdiden.







  • kafayı kırdım hala yapamadım,,
  • kardeş sadece açtığın başlığa göre cevap veriyorum yoksaki anlattığında bişey anlamadım :) şimdi senin bi checkbox var bunun vaue degerine rs("id") vermen lazım sonra yoladığın sayfadan bunu alcaksın daha sorna sorgulama kısmında where id="&id&" diyeceksin veya where id='"&id&"' diyeceksin bnları toplu sildirmek istersen eğer

    for i= 1 to request.form("id").count deyeceksin :) yanlış yazmış olabilirim ama dediğim gibi biraz daha karıştır...

    kolay gelsin



    < Bu mesaj bu kişi tarafından değiştirildi olmez -- 6 Aralık 2006; 22:09:35 >
  • Benim bir combobox ım var, bunun içinde 4000 adet stok kodu var. Ben bu listeden bu kodlardan birini seçtiğim anda( Diyelim ki 22234 nolu stok kodunu seçtim) bu kodun aynısı webStoklar isimli database de de var. Seçtiğim ile Database dekini karşılaştırıp, databasde bu stok koduna ait ismi aynı sayfada yazdırmak.
  • içersinde sana uygun fiade vardır herhalde ... Kolay gelsin.


    Sunucu tabanlı bir programlama dili ile uğraşıyorsanız ve bu uğraşının içinde veritabanı varsa, SQL size hiç yabancı gelmeyecektir. Bu deyim, Dr. Edgar F. Codd ve IBM tarafından geliştirilen Structured Query Language (Yapısal Sorgu Dili) kelimelerinden geliyor. Biz bu dilin, sunucu tabanlı programlama dillerinde, veri tabanı içindeki kayıtlar arasında sorgulama yapma kısmını inceleyeceğiz. Web sayfalarının en önemli özelliklerinden birisi de, sayfanın açılma hızıdır. Eğer sayfanızda, bir veritabanından bilgi alış-verişi yapıyorsanız, hedef noktaya, yani veritabanı içindeki, sadece istenilen kayıtlara ulaşmak, sayfanızın açılma hızını arttıracaktır. O halde, istenilen kayıtlara ulaşmak için SQL sorgulama dilini iyi bilmek lazımdır.

    Bu dili öğrenirken, oluşturacağımız bir veritabanı üzerinde işlem yapacağız. Bu veritabanını Microsoft Access programı ile oluşturacağız. Projemiz, bir derneğin üyeleri için bir veritabanı oluşturup, bu veritabanı içinde sorgulama yapmaktır. İki tablodan sorgulama yapmasını öğrenebilmek için, veritabanını iki kısımda oluşturuyoruz. Birinci kısım, üye bilgilerinin olduğu tablo (uye).


    İkinci kısım ise, üyelerin avans ve prim durumlarını gösteren bir tablo olacaktır (kasa).


    Bir veri tabanı içindeki kayıtlar arasında seçim yapmak için, SELECT deyimi kullanılır. Veri tabanı içinde birden fazla tablo olabilir. Buna göre hangi tablodan seçim yapacağınızı belirtmelisiniz. SQL ile veritabanına FROM deyimi ile ulaşılır. Projemizdeki uye adlı tabloya ulaşıp, bütün bilgileri okumak için şöyle bir ifade yazılmalıdır.

    SQL = "SELECT * FROM uye"

    ÜYE NO İSİM SOYİSİM DOĞUM TARİHİ CİNSİYET MESLEK MAAŞ
    1 Ali Demir 10/2/1975 ERKEK avukat 5,000,000
    2 Mehmet Karakoç 6/15/1981 ERKEK kuaför 2,000,000
    3 Ceren Sari 4/25/1965 BAYAN emekli 6,500,000
    4 Mahmut Kurt 9/9/1982 ERKEK memur 3,500,000
    5 Önder Akyol 8/22/1971 ERKEK muhasebe 1,500,000
    6 Ayse Dikmen 5/14/1980 BAYAN ögrenci 2,500,000
    7 Filiz Birsen 1/30/1979 BAYAN ögrenci 2,000,000
    8 Kadir Aydemir 12/18/1970 ERKEK mühendis 4,000,000
    9 Suat Aygün 9/21/1969 ERKEK yazar 3,250,000
    10 Cenk Sermet 9/19/1985 ERKEK ögrenci 1,750,000
    11 Ersin Devran 2/6/1973 ERKEK muhasebe 4,500,000
    12 Nurten Yilmaz 11/9/1978 BAYAN serbest 3,500,000
    13 Zeki Ak 7/11/1968 ERKEK memur 1,750,000
    14 Jale Kopuz 4/20/1982 BAYAN ögrenci 2,500,000
    15 Rasim Harput 1/29/1980 ERKEK isçi 3,500,000
    16 Vedat Tatar 3/23/1983 ERKEK serbest 1,750,000
    17 Gonca Meral 10/17/1963 BAYAN isçi 2,500,000
    18 Sule Yildiz 8/5/1972 BAYAN avukat 1,500,000
    19 Turan Keser 8/8/1976 ERKEK muhasebe 3,500,000
    20 Ahmet Eral 5/28/1984 ERKEK ögrenci 4,000,000
    21 Hüseyin Tokatli 6/16/1967 ERKEK yazar 2,500,000
    22 Ersoy Dündar 12/13/1976 ERKEK doktor 3,500,000
    23 Eylem Atak 2/27/1986 BAYAN isçi 2,850,000
    24 Batuhan Yurda 6/3/1971 ERKEK mühendis 5,500,000
    25 Aylin Sever 7/21/1970 BAYAN kuaför 3,500,000
    26 Veysel Polat 1/14/1969 ERKEK doktor 1,750,000
    27 Serpil Han 6/4/1967 BAYAN serbest 4,500,000
    28 Asli Ragip 4/30/1983 BAYAN muhasebe 3,500,000
    29 Cüneyd Zafer 10/9/1971 ERKEK memur 2,500,000
    30 Bayram Gümüs 11/16/1982 ERKEK ögrenci 4,000,000


    Program bu ifadeyi görünce, uye adlı tablodaki tüm sütun başlıkları ve kayıtları tek tek okuyacaktır. Burada kullandığımız
  • ifadesi, bütün sütun başlıkları demektir. Eğer, bu tablo içindeki bir veya bir kaç sütun başlığı okunmak istenirse, bu sütun başlık isimlerini SELECT deyiminden sonra yazmak lazımdır. Mesela uye adlı tablodan, sadece AD, SOYAD ve MESLEK sütun başlıklarına ait kayıtları okumak istediğimizde, şöyle bir ifade yazılmalıdır.

    SQL = "SELECT AD, SOYAD, MESLEK FROM uye"

    İSİM SOYİSİM MESLEK
    Ali Demir avukat
    Mehmet Karakoç kuaför
    Ceren Sari emekli
    Mahmut Kurt memur
    Önder Akyol muhasebe
    Ayse Dikmen ögrenci
    Filiz Birsen ögrenci
    Kadir Aydemir mühendis
    Suat Aygün yazar
    Cenk Sermet ögrenci
    Ersin Devran muhasebe
    Nurten Yilmaz serbest
    Zeki Ak memur
    Jale Kopuz ögrenci
    Rasim Harput isçi
    Vedat Tatar serbest
    Gonca Meral isçi
    Sule Yildiz avukat
    Turan Keser muhasebe
    Ahmet Eral ögrenci
    Hüseyin Tokatli yazar
    Ersoy Dündar doktor
    Eylem Atak isçi
    Batuhan Yurda mühendis
    Aylin Sever kuaför
    Veysel Polat doktor
    Serpil Han serbest
    Asli Ragip muhasebe
    Cüneyd Zafer memur
    Bayram Gümüs ögrenci


    Buna göre, uye adlı tablodaki başka bir sütun başlığına ulaşamazsınız. Program ancak belirtilen sütun başlıklarına ait kayıtları okuyarak listeler. Eğer bunların dışında bir sütuna ulaşmak isterseniz, ASP programı şöyle bir hata verir.

    ADODB.Fields error '800a0cc1'
    ADO could not find the object in the collection
    corresponding to the name or ordinal
    reference requested by the application.
    /sql/sql_02.asp, line 26

    Veri tabanı içindeki kayıtları, belirli bir düzende okumak ve listelemek için ORDER BY komutu kullanılır. Bu komuttan sonra, sıralamanın hangi sütun başlığına göre yapılacağını bildirmelisiniz. Aksi belirtilmedikçe, sıralamayı artan şekilde yapar. Yani, sayısal verileri, küçükten büyüğe, alfanümerik verileri de, A'dan Z'ye göre sıralayarak listeler. Mesela, uye adlı tablodan AD, SOYAD ve MAAS adlı sütün başlıkları altındaki kayıtları listelerken, AD'a göre sıralamak için şöyle bir ifade yazılmalıdır.

    SQL = "SELECT AD, SOYAD, MAAS FROM uye ORDER BY AD"

    İSİM SOYİSİM MAAS
    Ahmet Eral 4,000,000
    Ali Demir 5,000,000
    Asli Ragip 3,500,000
    Aylin Sever 3,500,000
    Ayse Dikmen 2,500,000
    Batuhan Yurda 5,500,000
    Bayram Gümüs 4,000,000
    Cenk Sermet 1,750,000
    Ceren Sari 6,500,000
    Cüneyd Zafer 2,500,000
    Ersin Devran 4,500,000
    Ersoy Dündar 3,500,000
    Eylem Atak 2,850,000
    Filiz Birsen 2,000,000
    Gonca Meral 2,500,000
    Hüseyin Tokatli 2,500,000
    Jale Kopuz 2,500,000
    Kadir Aydemir 4,000,000
    Mahmut Kurt 3,500,000
    Mehmet Karakoç 2,000,000
    Nurten Yilmaz 3,500,000
    Önder Akyol 1,500,000
    Rasim Harput 3,500,000
    Serpil Han 4,500,000
    Suat Aygün 3,250,000
    Sule Yildiz 1,500,000
    Turan Keser 3,500,000
    Vedat Tatar 1,750,000
    Veysel Polat 1,750,000
    Zeki Ak 1,750,000


    Eğer, MAAS adlı sütun başlığına göre sıralarsanız, liste MAAS sütunundaki, rakamlara göre, küçükten büyüğe göre sıralanır. Bu durumu tersine çevirmek isterseniz, sütun başlığının yanına artma veya azalma durumunu belirtmelisiniz. Listeyi artan şekilde sıralamak için, ASC (ascending) komutu, azalan şekilde sıralamak için DESC (descending) komutu kullanılır. Mesela AD, SOYAD ve MAAS sütun başlıkları altındaki kayıtları listelerken, MAAS sütun başlığındaki verilere göre, büyükten küçüğe doğru sıralamak için, şöyle bir ifade yazılır.

    SQL = "SELECT AD, SOYAD, MAAS FROM uye ORDER BY MAAS DESC"

    İSİM SOYİSİM MAAS
    Ceren Sari 6,500,000
    Batuhan Yurda 5,500,000
    Ali Demir 5,000,000
    Serpil Han 4,500,000
    Ersin Devran 4,500,000
    Ahmet Eral 4,000,000
    Bayram Gümüs 4,000,000
    Kadir Aydemir 4,000,000
    Turan Keser 3,500,000
    Nurten Yilmaz 3,500,000
    Ersoy Dündar 3,500,000
    Rasim Harput 3,500,000
    Aylin Sever 3,500,000
    Mahmut Kurt 3,500,000
    Asli Ragip 3,500,000
    Suat Aygün 3,250,000
    Eylem Atak 2,850,000
    Ayse Dikmen 2,500,000
    Jale Kopuz 2,500,000
    Gonca Meral 2,500,000
    Hüseyin Tokatli 2,500,000
    Cüneyd Zafer 2,500,000
    Filiz Birsen 2,000,000
    Mehmet Karakoç 2,000,000
    Zeki Ak 1,750,000
    Cenk Sermet 1,750,000
    Veysel Polat 1,750,000
    Vedat Tatar 1,750,000
    Sule Yildiz 1,500,000
    Önder Akyol 1,500,000


    Sıralamayı birden fazla sütun başlığına göre yaptırmak için, sırası ile sütun başlıkları yazılmalıdır. Yani, asıl sıralama yapılacak sütun başlığı ilk yazılır. Bundan sonra yazılacak sütun başlıkları, kendi içinde sıralanır. Mesela, uye adlı tablodaki AD, MESLEK ve MAAS sütun başlıkları altındaki kayıtları, ilk önce MESLEK sütun başlığındaki verileri azalan, sonra aynı meslek grupları içinde kalanları da, MAAS sütun başlığındaki verilere göre artan şekilde sıralamak için, şöyle bir ifade yazılmalıdır.

    SQL = "SELECT AD, MESLEK, MAAS FORM uye"
    SQL = SQL&" ORDER BY MESLEK DESC, MAAS ASC"

    İSİM MESLEK MAAS
    Hüseyin yazar 2,500,000
    Suat yazar 3,250,000
    Vedat serbest 1,750,000
    Nurten serbest 3,500,000
    Serpil serbest 4,500,000
    Cenk ögrenci 1,750,000
    Filiz ögrenci 2,000,000
    Ayse ögrenci 2,500,000
    Jale ögrenci 2,500,000
    Ahmet ögrenci 4,000,000
    Bayram ögrenci 4,000,000
    Kadir mühendis 4,000,000
    Batuhan mühendis 5,500,000
    Önder muhasebe 1,500,000
    Turan muhasebe 3,500,000
    Asli muhasebe 3,500,000
    Ersin muhasebe 4,500,000
    Zeki memur 1,750,000
    Cüneyd memur 2,500,000
    Mahmut memur 3,500,000
    Mehmet kuaför 2,000,000
    Aylin kuaför 3,500,000
    Gonca isçi 2,500,000
    Eylem isçi 2,850,000
    Rasim isçi 3,500,000
    Ceren emekli 6,500,000
    Veysel doktor 1,750,000
    Ersoy doktor 3,500,000
    Sule avukat 1,500,000
    Ali avukat 5,000,000


    Her bir sıralamanın arasına virgül işareti koyarak, sıralama kategorisini arttırabilirsiniz. Yukarıdaki ifadede, iki satır kullandık. Ancak ikinci satırda yazdıklarımız, birinci satıra & işareti ile eklenmiş olduğundan, program bu SQL sorgulamasını tek bir satır olarak algılar. Bundan sonra, karışık bazı sorgulamaları, iki veya daha fazla satırda yapacağız.

    Veri tabanı içindeki kayıtlardan aynı olanları görüntülemek istemiyorsanız, DISTINCT komutu kullanmalısınız. Program bu komutun arkasında gördüğü sütun başlığında, aynı veriye sahip olanlardan sadece birini okur. Bu komutla birlikte başka bir sütun başlığına göre sıralama komutu kullanılamaz. Sadece DISTINCT komutundan sonra yazılan sütun başlığı okunabilir. Mesela, uye adlı tablodaki meslek gruplarını öğrenmek için, şöyle bir ifade yazılmalıdır.

    SQL = "SELECT DISTINCT MESLEK FROM uye ORDER BY MESLEK DESC"

    MESLEK GRUPLARI
    yazar
    serbest
    ögrenci
    mühendis
    muhasebe
    memur
    kuaför
    isçi
    emekli
    doktor
    avukat


    Veri tabanı içindeki kayıtları listelerken belirli bir şarta göre okunmasını sağlayabilirsiniz. Bunun için, WHERE komutu kullanılır. Bu komuttan sonra yazılan şarta uyan kayıtlar listelenmiş olur. Mesela, uye adlı tablodan, maaşı 2.000.000 'un üzerinde olanları listelemek için, şöyle bir ifade yazılır.


    SQL = "SELECT AD, SOYAD, MAAS FROM uye WHERE MAAS > 2000000"

    İSİM SOYİSİM MAAS
    Ali Demir 5,000,000
    Ceren Sari 6,500,000
    Mahmut Kurt 3,500,000
    Ayse Dikmen 2,500,000
    Kadir Aydemir 4,000,000
    Suat Aygün 3,250,000
    Ersin Devran 4,500,000
    Nurten Yilmaz 3,500,000
    Jale Kopuz 2,500,000
    Rasim Harput 3,500,000
    Gonca Meral 2,500,000
    Turan Keser 3,500,000
    Ahmet Eral 4,000,000
    Hüseyin Tokatli 2,500,000
    Ersoy Dündar 3,500,000
    Eylem Atak 2,850,000
    Batuhan Yurda 5,500,000
    Aylin Sever 3,500,000
    Serpil Han 4,500,000
    Asli Ragip 3,500,000
    Cüneyd Zafer 2,500,000
    Bayram Gümüs 4,000,000


    Bu şartı belirlerken kullanabileceğiniz işlemciler şunlardır.

    > Büyük.
    < Küçük.
    = Eşit.
    >= Büyük veya Eşit.
    <= Küçük veya Eşit.
    <> Eşit Değil.
    Karşılaştırma bir string'e göre yapılacaksa, string tek tırnak içine alınmalıdır. Mesela, uye adlı tablodan mesleği memur olanları görüntülemek için, ifade aşağıdaki gibi yazılmalıdır.

    SQL = "SELECT AD, SOYAD, MESLEK FROM uye WHERE MESLEK='memur'"

    İSİM SOYİSİM MESLEK
    Mahmut Kurt memur
    Zeki Ak memur
    Cüneyd Zafer memur


    Sorgulamayı yaparken, tarihlere göre şart koymak için, tarih olarak yazılan değeri # işaretleri arasına almak ve veri tabanındaki tarih formatına uygun olarak yazmak gereklidir. Mesela, uye adlı tablodan, doğum tarihi 01.01.1980'den büyük olanları listelemek için, aşağıdaki ifade yazılmalıdır.

    SQL = "SELECT AD, SOYAD, DOGUM_TARIHI FROM uye"
    SQL = SQL&" WHERE DOGUM_TARIHI > #01/01/1980#"

    İSİM SOYİSİM DOĞUM TARİHİ
    Mehmet Karakoç 6/15/1981
    Mahmut Kurt 9/9/1982
    Ayse Dikmen 5/14/1980
    Cenk Sermet 9/19/1985
    Jale Kopuz 4/20/1982
    Rasim Harput 1/29/1980
    Vedat Tatar 3/23/1983
    Ahmet Eral 5/28/1984
    Eylem Atak 2/27/1986
    Asli Ragip 4/30/1983
    Bayram Gümüs 11/16/1982


    Veri tabanına kayıtları işlerken, bazı kayıtların True/False (Doğru/Yanlış) olarak girilmesi gerekir. Bunu veri tabanında Yes/No olarak tanımlarız. Bu şekilde tanımlanmış olan, kayıt sütunu için, seçmeli kutucuklar çıkar. Bu kutucuklar seçili ise, kaydın değeri 1 (yani True), seçili değilse kaydın değeri, 0 (yani False) olur. Projemizde, üyelerin cinsiyet durumlarını, veri tabanına Yes/No olarak giriyoruz. Yani, bay için 1 değeri, bayan için 0 değeri verilmiş olur. Veri tabanından sadece bayanların listesini almak için, sorgulama aşağıdaki gibi yazılır.

    SQL = "SELECT AD, SOYAD, CINSIYET FROM uye"
    SQL = SQL&" WHERE CINSIYET = 0"

    İSİM SOYİSİM CİNSİYET
    Ceren Sari BAYAN
    Ayse Dikmen BAYAN
    Filiz Birsen BAYAN
    Nurten Yilmaz BAYAN
    Jale Kopuz BAYAN
    Gonca Meral BAYAN
    Sule Yildiz BAYAN
    Eylem Atak BAYAN
    Aylin Sever BAYAN
    Serpil Han BAYAN
    Asli Ragip BAYAN


    Çoğu sorgulamada bir koşul işimizi görmeyebilir. Birden fazla koşul belirtmek için AND, OR veya NOT komutları kullanılır. Bunun için birkaç örnek yapalım. Mesela, erkek öğrencileri listelemek için, aşağıdaki sorgulama yazılmalıdır.

    SQL = "SELECT AD, SOYAD, CINSIYET, MESLEK FROM uye"
    SQL = SQL&" WHERE CINSIYET = 1"
    SQL = SQL&" AND MESLEK = 'öğrenci'"

    İSİM SOYİSİM CİNSİYET MESLEK


    Maaşı 2.500.000'nin altında olmayan ve doğum tarihi 01.01.1975'ten büyük olanları listelemek için;

    SQL = "SELECT AD, SOYAD, DOGUM_TARIHI, MAAS FROM uye"
    SQL = SQL&" WHERE DOGUM_TARIHI > #01/01/1975#"
    SQL = SQL&" AND NOT MAAS < 2500000"

    İSİM SOYİSİM DOĞUM TARİHİ MAAŞ
    Ali Demir 10/2/1975 5,000,000
    Mahmut Kurt 9/9/1982 3,500,000
    Ayse Dikmen 5/14/1980 2,500,000
    Nurten Yilmaz 11/9/1978 3,500,000
    Jale Kopuz 4/20/1982 2,500,000
    Rasim Harput 1/29/1980 3,500,000
    Turan Keser 8/8/1976 3,500,000
    Ahmet Eral 5/28/1984 4,000,000
    Ersoy Dündar 12/13/1976 3,500,000
    Eylem Atak 2/27/1986 2,850,000
    Asli Ragip 4/30/1983 3,500,000
    Bayram Gümüs 11/16/1982 4,000,000


    Serbest meslek sahibi veya muhasebeci olanları isim sırasına göre listelemek için;

    SQL = "SELECT AD, SOYAD, MESLEK FROM uye"
    SQL = SQL&" WHERE MESLEK = 'serbest'"
    SQL = SQL&" OR MESLEK = 'muhasebe'"
    SQL = SQL&" ORDER BY AD"

    İSİM SOYİSİM MESLEK
    Nurten Yilmaz serbest
    Serpil Han serbest
    Vedat Tatar serbest


    AND ve OR komutlarını istediğimiz kadar kullanabiliriz. Ancak bu komutları arka arkaya kullanmaktansa, IN komutu ile, birden fazla sorgulama aynı anda yapılabilir. Mesela, uye adlı tablodaki, mesleği öğrenci, işçi ve serbest olmayan bayanları soyadlarına göre listelemek için, aşağıdaki gibi sorgulama yapılabilir.

    SQL = "SELECT AD, SOYAD, MESLEK, CINSIYET FROM uye"
    SQL = SQL&" WHERE NOT MESLEK IN ("serbest','öğrenci','işçi')"
    SQL = SQL&" AND CINSIYET = 0"
    SQL = SQL&" ORDER BY SOYAD"

    İSİM SOYİSİM CİNSİYET MESLEK
    Eylem Atak BAYAN isçi
    Filiz Birsen BAYAN ögrenci
    Ayse Dikmen BAYAN ögrenci
    Jale Kopuz BAYAN ögrenci
    Gonca Meral BAYAN isçi
    Asli Ragip BAYAN muhasebe
    Ceren Sari BAYAN emekli
    Aylin Sever BAYAN kuaför
    Sule Yildiz BAYAN avukat


    Yukarıdaki yazılımda, her bir meslek için ayrı ayrı OR komutu kullanabilirdik. Ancak IN komutu ile bir veri kümesi tanımlamış olduk ve bu veri kümesine göre arama yaptırdık. IN komutu NOT ile beraber kullanılabilir. Yani, yukarıdaki örneğin 2. satırını, şu şekilde de yazabiliriz.

    WHERE MESLEK NOT IN ("serbest','öğrenci','işçi')

    Sorgulamayı belirli bir aralıkta yaptırmak için, ya AND yada BETWEEN komutu kullanılır. Mesela, uye adlı tablodan, doğum tarihi 01.01.1970 ile 01.01.1980 arasında olan erkekleri, doğum tarihi sırasına göre listelemek için, aşağıdaki ifade yazılabilir.

    SQL = "SELECT AD, SOYAD, CINSIYET, DOGUM_TARIHI FROM uye"
    SQL = SQL&" WHERE DOGUM_TARIHI > #01/01/1970#"
    SQL = SQL&" AND DOGUM_TARIHI < #01/01/1980#"
    SQL = SQL&" AND CINSIYET = 1"
    SQL = SQL&" ORDER BY DOGUM_TARIHI"

    İSİM SOYİSİM CİNSİYET DOĞUM TARİHİ
    Kadir Aydemir BAY 12/18/1970
    Batuhan Yurda BAY 6/3/1971
    Önder Akyol BAY 8/22/1971
    Cüneyd Zafer BAY 10/9/1971
    Ersin Devran BAY 2/6/1973
    Ali Demir BAY 10/2/1975
    Turan Keser BAY 8/8/1976
    Ersoy Dündar BAY 12/13/1976


    Aynı sorgulama, aşağıdaki şekilde daha kısa olarak yazılabilir.

    SQL = "SELECT AD, SOYAD, CINSIYET, DOGUM_TARIHI FROM uye"
    SQL = SQL&" WHERE DOGUM_TARIHI BETWEEN #01/01/1970#"
    SQL = SQL&" AND #01/01/1980#"
    SQL = SQL&" AND CINSIYET = 1"
    SQL = SQL&" ORDER BY DOGUM_TARIHI"

    Veri tabanı içinde SQL ile arama yaptırmak mümkündür. Yani, bir karakter dizisini, belirli bir sütun başlığı içinde, arama yaptırabilirsiniz. Bunun için, LIKE komutu kullanılır. Arama yapılacak sütun başlığını, WHERE komutundan sonra yazıp, sonra LIKE komutunu yazmak lazımdır. Bu komutla, iki şekilde arama yaptırılabilir. Arama yapılacak karakterleri, tek tırnak içinde ve % işaretleri arasında yazarsanız, içinde bu karakterlerin geçtiği tüm kayıtları verir. Mesela, uye adlı tablodan, soyadında "ak" karakterleri olanları listelemek için, aşağıdaki sorgulama ifadesi yazılır.

    SQL = "SELECT AD, SOYAD, MESLEK FROM uye"
    SQL = SQL&" WHERE SOYAD LIKE '%ak%'"

    İSİM SOYİSİM MESLEK
    Mehmet Karakoç kuaför
    Önder Akyol muhasebe
    Zeki Ak memur
    Eylem Atak isçi


    Bu aramayı birden fazla sütun başlığında yaptırabilmek için, OR komutu ile devam edebilirsiniz. Yukarıdaki örneğe ileve olarak, adının içinde "ay" karakterleri geçenleri de sorgulayalım.

    SQL = "SELECT AD, SOYAD, MESLEK FROM uye"
    SQL = SQL&" WHERE SOYAD LIKE '%ak%'"
    SQL = SQL&" OR AD LIKE '%ay%'"

    İSİM SOYİSİM MESLEK
    Mehmet Karakoç kuaför
    Önder Akyol muhasebe
    Ayse Dikmen ögrenci
    Zeki Ak memur
    Eylem Atak isçi
    Aylin Sever kuaför
    Bayram Gümüs ögrenci


    Yukarıdaki her iki örnekte de, aranacak karakterlerin başına ve sonuna % işareti koyduk. Böylece, bu karakterlerin, ilgili sütun başlığı altındaki kayıtların herhangi bir yerinde geçip geçmediğini kontrol ederiz. Eğer yüzde işareti koyulmaz ise, eşitlik durumunda olan kayıtları verir. Yani yukarıdaki örneğe göre, soyadı "ak" olanları listeler. Aşağıdaki iki ifade de aynıdır.

    WHERE SOYAD LIKE 'ak'
    WHERE SOYAD='ak'

    LIKE komutu ile belirli sayıda karakteri ve bu karakterlerin içinde geçenleri de belirleyip de aramak mümkündür. Bunun için alt çizgi işareti kullanılır (_ ). Mesela, uye adlı tablodan adı, "er" ile başlayan ve 5 karakter olanları listelemek için, aşağıdaki ifade yazılmalıdır.

    SQL = "SELECT AD, SOYAD, MESLEK FROM uye"
    SQL = SQL&" WHERE AD LIKE 'er_ _ _'"

    İSİM SOYİSİM MESLEK
    Ersin Devran muhasebe
    Ersoy Dündar doktor


    Yukarıdaki yazılımda, alt çizgiler birleşik olmalıdır. Yukarıdaki gibi yazdığınız zaman, hata verir veya kayıt bulamaz.

    SQL sorgulama dilinde matematiksel işlemler de yaptırmak mümkündür. Bir sütun başlığına ait kayıtların toplamını almak için SUM komutu kullanılır. Mesela, uye adlı tablodaki, tüm üyelere ait maaşların toplamını bulmak için, aşağıdaki ifade yazılır.

    SQL = "SELECT SUM (MAAS) FROM uye"

    MAAŞ TOPLAMI
    95,100,000


    ASP sayfasında bu toplamı gösterebilmek için, kayıt dizisinin arkasına "(0)" yazılmalıdır. Yukarıdaki örneğe göre, maaş toplamı şu şekilde alınır.

    <%
    Dim veriyolu, SQL, dizi
    Set veriyolu=Server.CreateObject("ADODB.Connection")
    veriyolu.Open ("Driver={Microsoft Access Driver(*.mdb)};DBQ="&Server.MapPath("dernek.mdb"))

    SQL = "SELECT SUM(MAAS) FROM uye"

    Set dizi=veriyolu.Execute(SQL)

    Response.Write "Maaş toplamı = "
    Response.Write dizi(0)
    %>

    Burada dizi(0) ifadesi, tüm üyelerin maaş toplamını verir. Eğer, belirli bir kritere göre toplam almak isterseniz, WHERE komutu ile bu koşulu belirleyebilirsiniz. Mesela, uye adlı tablodaki, bayan öğrencilerin maaş toplamını, aşağıdaki ifade ile alabiliriz.

    SQL = "SELECT SUM (MAAS) FROM uye"
    SQL = SQL&" WHERE MESLEK = 'öğrenci'"
    SQL = SQL&" AND CINSIYET = 0"

    BAYAN ÖĞRENCİLERİN MAAŞ TOPLAMI Eksik bu liste yeniden kaydedilecek


    Aritmetiksel ortalama almak için, AVG komutu kullanılır. Bu komutla, kayıtlardaki rakamlar toplanır ve kayıt sayısına bölünür. Mesela, uye adlı tablodaki, memur ve yazarların maaş ortalamasını almak için, aşağıdaki ifade yazılmalıdır.

    SQL = "SELECT AVG (MAAS) FROM uye"
    SQL = SQL&" WHERE MESLEK IN ('memur','yazar')"

    MEMUR ve YAZARLARIN, MAAŞ ORTALAMASI
    2,700,000


    Bir tablo içindeki en yüksek veya en düşük değeri bulmak için, MAX ve MIN komutları kullanılır. Mesela, uye adlı tablodaki, mesleği, işçi ve avukat olmayanlar içinde, yaşı en genç olanı bulmak için, aşağıdaki ifade yazılır.

    SQL = "SELECT MAX (DOGUM_TARIHI) FROM uye"
    SQL = SQL&" WHERE MESLEK NOT IN ('işçi','avukat')"

    MESLEĞİ İŞÇİ veya AVUKAT OLMAYANLAR İÇİNDE EN GENÇ OLANI
    2/27/1986


    Tablo içindeki kayıtların sayılması için, COUNT komutu kullanılır. Herhangi bir koşul belirtilmediği zaman, tüm kayıtları sayar. Mesela, uye tablosundaki 2.000.000'nun üzerinde maaş alan kaç tane erkek üye olduğunu öğrenmek için, aşağıdaki ifade yazılır.

    SQL = "SELECT COUNT(*) FROM uye"
    SQL = SQL&" WHERE MAAS > 2000000"
    SQL = SQL&" AND CINSIYET = 1"

    2.000.000'nun ÜZERİNDE MAAŞ ALAN ERKEK ÜYE SAYISI
    13


    Veri tabanında bazı işlemleri yaptırırken, gruplandırarak yapmak gerekebilir. Mesela, her meslek grubuna ait işlemler için, ayrı ayrı işlem yapmaktansa, sorgulamayı gruplandırmak daha pratik olacaktır. Bunun için, GROUP BY komutu kullanılır. uye adlı tablodaki, her mesleğin maaş toplamlarını almak için, en pratik çözüm aşağıdaki gibidir.

    SQL = "SELECT MESLEK, SUM (MAAS) FROM uye"
    SQL = SQL&" GROUP BY MESLEK"

    MESLEK GRUPLARI MAAŞ TOPLAMLARI
    avukat 6,500,000
    doktor 5,250,000
    emekli 6,500,000
    isçi 8,850,000
    kuaför 5,500,000
    memur 7,750,000
    muhasebe 13,000,000
    mühendis 9,500,000
    ögrenci 16,750,000
    serbest 9,750,000
    yazar 5,750,000


    ASP programında, hem meslek gruplarını görmek, hem de maaş toplamlarını görmek için, yine kayıt dizisi değişkeninden faydalanırız. Yani bu sorgulamayı yaptıktan sonra, değerler aşağıdaki gibi alınır.

    <table>
    <tr>
    <td>GRUPLAR</td>
    <td>MAAŞ TOPLAMI</td>
    </tr>

    <%
    Set dizi = veriyolu.Execute(SQL)
    Do While Not dizi.eof
    %>

    <tr>
    <td> <% Response.Write dizi(0) %> </td>
    <td> <% Response.Write dizi(1) %> </td>
    </tr>

    <%
    Loop
    dizi.Close
    %>

    </table>

    Buna göre, her grup, kayıt dizisinin bir elemanı olacaktır. Sorgulamayı gruplandırarak yaparken, koşul vermek için, HAVING komutunu kullanmalısınız. Mesela, uye tablosundaki, ortalama maaşın 3.000.000'nun üzerinde olan meslek gruplarına ait, en yüksek maaşları listelemek için, aşağıdaki ifade yazılmalıdır.

    SQL = "SELECT MESLEK, MAX (MAAS) FROM uye"
    SQL = SQL&" GROUP BY MESLEK"
    SQL = SQL&" HAVING AVG (MAAS) > 3000000"

    MESLEK GRUPLARI EN YÜKSEK MAAŞ
    avukat 5,000,000
    emekli 6,500,000
    muhasebe 4,500,000
    mühendis 5,500,000
    serbest 4,500,000


    HAVING komutunu kullanırken, MIN, MAX, COUNT, AVG veya SUM komutlarından en az birinin olması gerekir. HAVING komutu WHERE ile karıştırılmamalıdır. WHERE ile, tablo içindeki kayıtları tek tek sorgularken, HAVING grup bazında işlem yapar.

    Veri tabanında, birden fazla tablo içinde sorgulama yapmak için, iki tabloyu JOIN metodu birleştirmek gerekir. Bu metod ile, seçim yapılacak olan tablo adları, FROM komutundan sonra yazılır. Birleştirmenin hangi koşulda yapılacağını WHERE komutu ile bildirmelisiniz. Birleştirmeyi yaparken, ilk önce tablo adını, sonra sütun başlığı adını yazmak gerekir. Mesela, kasa tablosundaki prim ve avansların kimlere ait olduğunu göstermek için, aşağıdaki ifade yazılmalıdır.

    SQL = "SELECT AD, SOYAD, PRIM, AVANS FROM uye, kasa"
    SQL = SQL&" WHERE uye.UYE_NO = kasa.UYE"
    SQL = SQL&" ORDER BY AD"

    İSİM SOYİSİM PRİM AVANS
    Ayse Dikmen 900,000 3,250,000
    Batuhan Yurda 2,450,000 3,240,000
    Batuhan Yurda 2,150,000 1,850,000
    Ceren Sari 400,000 4,250,000
    Ersoy Dündar 6,000,000 1,200,000
    Gonca Meral 3,550,000 1,450,000
    Kadir Aydemir 1,620,000 1,500,000
    Mahmut Kurt 1,100,000 2,750,000
    Mehmet Karakoç 500,000 1,000,000
    Mehmet Karakoç 750,000 3,250,000
    Nurten Yilmaz 3,450,000 6,000,000
    Nurten Yilmaz 1,000,000 2,300,000
    Suat Aygün 250,000 3,100,000
    Suat Aygün 2,150,000 3,250,000
    Vedat Tatar 1,650,000 2,500,000
    Zeki Ak 1,500,000 1,800,000


    2. satırdaki, "WHERE uye.UYE_NO = kasa.UYE" ifadesi, birleştirmenin olduğu yerdir. Görüldüğü gibi, ilk önce tablo adı ve arkasına sütun başlığı yazılmış. Tablo adı ve sütun başlığı, nokta işareti ile birleştirilmiştir.

    İki tabloyu birleştirerek, yukarıda öğrendiğimiz diğer özellikleri kullanmak mümkündür. Mesela, her meslek gruplarına ait, ödenmiş olan prim toplamlarını listelemek için, aşağıdaki sorgulama ifadesi yazılmalıdır.

    SQL = "SELECT MESLEK, SUM (PRIM) FROM uye, kasa"
    SQL = SQL&" WHERE uye.UYE_NO = kasa.UYE"
    SQL = SQL&" GROUP BY MESLEK"
    SQL = SQL&" ORDER BY MESLEK"

    MESLEK GRUPLARI PRİMLER
    doktor 6,000,000
    emekli 400,000
    isçi 3,550,000
    kuaför 1,250,000
    memur 2,600,000
    mühendis 6,220,000
    ögrenci 900,000
    serbest 6,100,000
    yazar 2,400,000


    Yukarıdaki örnekte, birleştirme üye numaralarına göre yapılıyor. Yani, kasa tablosundaki üye numarası ile uye tablosundaki üye numarası aynı ise, o kayda ait meslek gurubunun prim toplamına, kasa tablosundaki prim miktarı eklenir. Bu listeyi ASP sayfasında yazdırma işlemini yukarıda öğrenmiştik. Yani, kayıt dizisinin elemanlarını tek tek çağırıyoruz.

    İki tabloyu birleştirmeden sorgulama yapmak için, iç içe sorgulama yapmak gerekir. Mesela, 02.01.2001 tarihinden sonra, 2.000.000'nin üzerinde avans çekmiş üyelerin listesini görüntülemek için, iki adet sorgulama yapmak gerekir. Bunlardan ilki, kasa tablosunda, bu iki koşula uyan üye numaralarını almak olacaktır. Alınan bu üye numaralarına göre, uye tablosundaki üyeler listelenecektir. İfade aşağıdaki gibi yazılır.

    SQL = "SELECT UYE_NO, AD, SOYAD, MESLEK FROM uye"
    SQL = SQL&" WHERE UYE_NO IN"
    SQL = SQL&" (SELECT UYE FROM kasa"
    SQL = SQL&" WHERE AVANS > 2000000"
    SQL = SQL&" AND KAYIT_TARIHI > #02/01/2001#)"
    SQL = SQL&" ORDER BY UYE_NO"

    ÜYE NO İSİM SOYİSİM
    2 Mehmet Karakoç
    6 Ayse Dikmen
    9 Suat Aygün
    12 Nurten Yilmaz


    Yukarıdaki örneğe dikkat ettiyseniz, ilk sorgulama parantez işareti içinde yapılıyor. Bu sorgu neticesinde çıkan üye numaraları, ikinci sorgulamanın IN listesini oluşturuyor. Bu listedeki üye numaralarına eşit olan numaralar, ikinci sorguda listeleniyor. İki tabloyu birleştirmenin bir diğer yolu da, UNION komutudur. Bu komutla, iki sorgulamanın sonuçlarını birleştirebilirsiniz. Ancak sorgu neticesinde, aynı sayıda sütun başlığı içermelidir. Mesela, maaşından fazla prim veya avans almış olanları listelemek için, aşağıdaki ifadeler yazılabilir.

    SQL = "SELECT AD, SOYAD, MAAS, AVANS, PRIM FROM uye, kasa"
    SQL = SQL&" WHERE uye.UYE_NO = kasa.UYE"
    SQL = SQL&" AND PRIM > MAAS"
    SQL = SQL&" UNION SELECT AD, SOYAD, MAAS, AVANS, PRIM FROM uye, kasa"
    SQL = SQL&" WHERE uye.UYE_NO = kasa.UYE"
    SQL = SQL&" AND AVANS > MAAS"

    İSİM SOYİSİM MAAŞ PRİM AVANS
    Ayse Dikmen 2,500,000 900,000 3,250,000
    Ersoy Dündar 3,500,000 6,000,000 1,200,000
    Gonca Meral 2,500,000 3,550,000 1,450,000
    Mehmet Karakoç 2,000,000 750,000 3,250,000
    Nurten Yilmaz 3,500,000 3,450,000 6,000,000
    Vedat Tatar 1,750,000 1,650,000 2,500,000
    Zeki Ak 1,750,000 1,500,000 1,800,000


    Yukarıdaki örnekte, iki adet sorgulama var. Bunlardan ilki primin maaştan büyük olup olmadığını kontrol ediyor. İkincisi ise, avansın maaştan büyük olup olmadığını kontrol ediyor. Bu iki sorgulamanın neticesinde, AD, SOYAD, MAAS, AVANS ve PRIM sonuçları çıkıyor. Her iki sorguyu birleştirmek için, 4. satırda UNION komutu kullanılıyor.


    memduh saraç



  • < Bu mesaj bu kişi tarafından değiştirildi olmez -- 7 Aralık 2006; 23:02:13 >




  • olayın mantığını kabaca anlatmaya çalışayım olmazsa kodlarlada örnek verebilirim..

    bir tane açılır menü düşün

    <select size="1" name="birinci">
    <option value="deger">Değer</option>
    <option value="deger2>Değer2</option>
    </select>
    burda Değer2 yi seçtiğini düşünüyorum ve ikinci açılır menüyüde şu şekilde şekillendiriyoruz..

    <select size="1" name="D1">

    SQL = "SELECT * from Tablo_adi where alan_adi='"&Request.Form("birinci")&"'"
    if recordsetin.eof then
    Response.write "<option>Lütfen Bişiy Seçiniz..</option>"
    End if

    eğerki seçilenin karşılığı gelirse bir döngüyle beraber veritabanındaki bilgileri çağırıyoruz..

    do while not recordsetin.eof
    <option value="recorsetin("alan_adi")">recorsetin("alan_adi")</option>
    recordsetin.movenext:Loop
    </select>

    inşallah anlatabilmişimdir kolay gelsin..




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.