1. sayfa
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 |
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 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ç |
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.. |
1. sayfa
<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.
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.