Koşullu Sorgulamalar
Transkript
Koşullu Sorgulamalar
8. Hafta Koşullu Sorgulamalar BPR255 Veritabanı Yönetim Sistemleri-II Bu Derste Öğrenecekleriniz: Koşullu Sorgulamalar a. b. c. d. e. f. g. h. Karşılaştırma operatörleri Mantıksal operatörlerin kullanımı BETWEEN (Arasında) operatörü IS NULL Kullanımı Küme operatörü (IN) LIKE operatörü LIKE ile beraber kullanılan joker karakterler Alt sorgulamalar ve alt sorgulamalarda kullanılan operatörler (IN, ANY, ALL) Aşağıdaki tabloda koşul ifadelerinde kullanılan operatörler anlamaları ile beraber listelenmiştir. () İşlemleri gruplandırma ve işlem önceliği belirleme = Belirtilen değere eşit olanlar > Belirtilen değerden büyük olanlar < Belirtilen değerden küçük olanlar !=, <> Belirtilen değere eşit olmayanlar >= Belirtilen değerden büyük veya eşit olanlar <= Belirtilen değerden küçük veya eşit olanlar IN Bir grup değer içinde olanlar NOT IN Bir grup değer içinde olmayanlar ANY Verilen bir koşula uygun olarak, bir grup içindeki değerlerden birini belirler ALL Verilen bir değeri bir liste içindeki tüm değerlerle karşılaştırır. BETWEEN x AND y x ve y değeri arasındaki değerleri belirler NOT BETWEEN x x ve y değeri arasında olmayan değerleri belirler. Yani x’den küçük, y’den AND y büyük değerler. IS NULL Null (yokluk) değerine sahip olanları tanımlar IS NOT NULL Null değerine sahip olmayanları tanımlar LIKE Belirli bir kalıba uygun olan bilgileri tanımlar Aşağıdaki tabloyu inceleyin. Sorgulama işlemlerini bu tabloya göre yapacağız. CREATE TABLE ÇALIŞANLAR ( NUMARA INT ADI VARCHAR(25) SOYADI VARCHAR(25) CINSIYET VARCHAR(5) [DOĞUM TARİHİ] SMALLDATETIME MEMLEKET VARCHAR(25) MAAŞ SMALLMONEY TELEFON VARCHAR(16) MAIL VARCHAR(255) CONSTRAINT PRIMARY KEY , NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NULL, NULL, CHK_CINS CHECK(CINSIYET IN ('BAY', 'BAYAN')), ) 1 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 8. Hafta Koşullu Sorgulamalar BPR255 Veritabanı Yönetim Sistemleri-II Koşul İfadeleri Bir tablodan koşullu bir sorgulama yapılacağı zaman WHERE anahtar sözcüğü kullanılır. SELECT FROM WHERE alan1,alan2,[,…n] tablo_adı koşul_ifadesi -- sorgulanmak istenen alanlar -- kaynak tablo ismi -- koşul ifadesi Aşağıdaki sorgulamada çalışanlar tablosundan numarası 123 olan çalışan getirilecektir. SELECT FROM WHERE ADI, SOYADI ÇALIŞANLAR NUMARA = 123 -- sorgulanmak istenen alanlar -- kaynak tablo ismi -- koşul ifadesi Yukarıdaki sorgulama ifadesine dikkat edilirse koşul ifadesinde = kullanılmış. Bu; sorgulama koşul ifadesinde belirtilen alanın belirtilen değere eşit olma koşulunun sağlandığı kayıtları getirir. Bunun gibi aşağıdaki karşılaştırma ifadeleri koşul ifadelerinde kullanılabilir. a- SQL Karşılaştırma Operatörleri (=, >, <, >=, <=, !=, <>) Aşağıdaki sorgulamada doğum tarihi ’01-01-1990’ dan büyük olan çalışanların adı ve soyadı getirilecektir. SELECT FROM WHERE ADI, SOYADI ÇALIŞANLAR [DOĞUM TARİHİ] > '01-01-1990' Aşağıdaki sorgulamada maaşı 1200 den küçük ve eşit olan çalışanların adı, soyadı ve memleketleri listelenecektir. SELECT FROM WHERE ADI, SOYADI, MEMLEKET ÇALIŞANLAR MAAŞ <= 1200 Aşağıdaki sorgulamada memleketi Bartın olmayan çalışanlar listelenecektir. SELECT FROM WHERE ADI, SOYADI, MEMLEKET ÇALIŞANLAR MEMLEKET != 'BARTIN' SELECT FROM WHERE ADI, SOYADI, MEMLEKET ÇALIŞANLAR MEMLEKET <> 'BARTIN' b- Mantıksal Operatörlerin Kullanımı (AND, OR) SELECT FROM WHERE * ÇALIŞANLAR ADI = 'ALİ' AND MEMLEKET = 'BARTIN' Yukarıdaki sorgulamada adı ali olup memleketi Bartın olan çalışanlar listelenecektir. SELECT FROM WHERE * ÇALIŞANLAR ADI = 'ALİ' OR MEMLEKET = 'BARTIN' Yukarıdaki sorgulamada adı ali olan veya memleketi Bartın olan çalışanlar listelenecektir. 2 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 8. Hafta Koşullu Sorgulamalar SELECT FROM WHERE BPR255 Veritabanı Yönetim Sistemleri-II * ÇALIŞANLAR (ADI = 'ALİ' AND MEMLEKET = 'BARTIN') OR (ADI = 'VELİ' AND MEMLEKET = 'KARABÜK') Yukarıdaki sorgulamada adı ali olup memleketi Bartın olanlar veya adı veli olup memleketi Karabük olan çalışanlar listelenecektir. c- BETWEEN AND kullanımı Belirtilen aralıklardaki kayıtları getirir. Örneğin aşağıdaki sorgulama sonucunda maaşı 1200 ile 1500 arası olan çalışanların tüm bilgileri listelenecektir. Burada 1200 ve 1500 dahil değerler olacaktır. SELECT FROM WHERE * ÇALIŞANLAR MAAŞ BETWEEN 1200 AND 1500 İstersek NOT ile beraber kullanarak belirtilen aralığın dışında kalan kayıtları sorgulayabiliriz. SELECT FROM WHERE * ÇALIŞANLAR MAAŞ NOT BETWEEN 1200 AND 1500 BETWEEN AND kullanımı genellikle sayısal değerler ile veya tarih veri tipleri ile beraber kullanılır. SELECT FROM WHERE * ÇALIŞANLAR [DOĞUM TARİHİ] BETWEEN '01-01-1980' AND '01-01-1990' Burada çalışanlar tablosundan doğum tarihi belirtilen aralıkta olanlar listelenecektir. SELECT FROM WHERE * ÇALIŞANLAR [DOĞUM TARİHİ] NOT BETWEEN '01-01-1980' AND '01-01-1990' Burada çalışanlar tablosundan doğum tarihi belirtilen aralıkların dışında olanlar listelenecektir. Yani 01-01-1980 den önce doğmuşlar ile 01-01-1990 tarihinden sonra doğmuşlar listelenecektir. d- IS NULL kullanımı Belirtilen alanların NULL olanlarını seçmek için kullanılır. SELECT FROM WHERE * ÇALIŞANLAR TELEFON IS NULL Bu sorgulama ile telefon alanı NULL olan çalışanlar getirilecektir. NULL olmayanlar sorgulanmak istenirse IS NOT NULL kullanılır. SELECT FROM WHERE 3 * ÇALIŞANLAR TELEFON IS NOT NULL Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 8. Hafta Koşullu Sorgulamalar BPR255 Veritabanı Yönetim Sistemleri-II Aşağıdaki sorgulama sonucunda ise hem telefon alanı hem de mail alanı NULL olanlar listelenecektir. SELECT FROM WHERE * ÇALIŞANLAR TELEFON IS NULL AND MAIL IS NULL e- SQL Küme Operatörü (IN) Alanın belirtilen kümede olanlarına göre sorgulama yapar. SELECT FROM WHERE * ÇALIŞANLAR MEMLEKET IN ('BARTIN', 'KARABÜK', 'ZONGULDAK') Çalışanlar tablosundan Memleketi Bartın, Karabük veya Zonguldak olanları listeler. Not ile beraber kullanılırsa işlemi tersine çevirir. Örneğin aşağıdaki sorgulama sonucunda memleketi Bartın, Karabük veya Zonguldak olmayanları listeleyecektir. SELECT FROM WHERE * ÇALIŞANLAR MEMLEKET NOT IN ('BARTIN', 'KARABÜK', 'ZONGULDAK') f- LIKE kullanımı Belirli bir kalıba uygun olan bilgileri seçmek için kullanılır. SELECT FROM WHERE * ÇALIŞANLAR ADI LIKE 'AL%' Yukarıdaki sorgulama sonucunda ismi AL ile başlayan kayıtları listeleyecektir. Aşağıdaki sorgulama sonucunda ise çalışanlar tablosundan mail adresi ‘@mail.com’ olan ları listeleyecektir. SELECT FROM WHERE * ÇALIŞANLAR MAIL LIKE '%@mail.com' Burada % işareti herhangi bir yazı anlamına geliyor. g- LIKE ile kullanılan joker karakterler ve anlamları ( % , _ , [ ] , [^ ] ) %: Herhangi bir yazı yerine geçer. Aşağıdaki sorgulamayı kontrol edin; SELECT FROM WHERE * ÇALIŞANLAR ADI LIKE '%ALİ%' Bu sorgulamaya göre isminin her hangi bir yerinde ali geçen tüm kayıtlar seçilir. Ali, Alim, Mehmet Ali, Ali Can, Vali, Halim, Halime, Salih, Salihe … kelimeleri bu koşulu sağlar. 4 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 8. Hafta Koşullu Sorgulamalar BPR255 Veritabanı Yönetim Sistemleri-II LIKE anahtar sözcüğünden önce NOT kullanılırsa işlemi tersine çevirir. Aşağıdaki örneği kontrol edin: SELECT FROM WHERE * ÇALIŞANLAR ADI NOT LIKE '%ALİ%' Bu sorgulama sonucunda isminin herhangi bir yerinde Ali geçmeyen çalışan bilgileri listelenecektir. _ (Alt çizgi): Bir tek karakter yerine geçer. SELECT FROM WHERE * BÖLÜMLER [BÖLÜM KODU] LIKE 'BPR_' Yukarıdaki sorgulama sonucunda bölüm kodu BPR ile başlayıp dördüncü karakterin herhangi bir şey olabilen sonuçlar getirilecektir. Eğer tablomuzda BPR1 ve BPR2 varsa ikisi de listelenecektir. SELECT FROM WHERE * ÇALIŞANLAR ADI LIKE '__san' Burada da ilk iki harf önemli değil gerisi san ile biten isimler listelenecektir. Örneğin Hasan, İhsan gibi isimler bu şartı sağlar. [ ] : Belirtilen alan veya kümeden bir tek karakter seçerek yerine koyar. [a-f] denilince seçilecek karakter a,b,c,d,e,f harflerinden biri olacak. [abcdefk] denilince de belirtilen harflerden biri olacak. SELECT FROM WHERE * ÇALIŞANLAR SOYADI LIKE 'Meli[h-s]' Yukarıdaki sorgulama sonucunda soyadı “Meli” ile başlayıp son harfi h-s aralığında olan çalışan bilgileri listelenecektir. Örneğin Melih, Melik, Melis gibi kelimeler bu koşulu sağlıyor. SELECT FROM WHERE * ÇALIŞANLAR ADI LIKE 'Şey[dmz]a' Yukarıdaki sorgulama sonucunda ise ismi Şeyda, veya Şeyma veya Şeyza olan çalışanların bilgileri listelenecektir. Yani ilk üç harf “şey”, dördüncü harf “d”, “m” veya “z” harflerinden biri ve beşinci harf “a” olan kayıtlar listelenecektir. [ ^] : Belirtilen karakterlerden veya karakter kümesinden olmayacak şekilde bir tek harf yerine kullanılır. [^a-f] veya [^abcdef] denince belirtilen karakter a,b,c,d,e,f harflerinden biri olmayacak. SELECT FROM WHERE * ÇALIŞANLAR ADI LIKE 'Fe[^r]%' Yukarıdaki sorgulama sonucunda ismi “Fe” ile başlayan, üçüncü harfi “r” olmayan gerisi önemli olmayan çalışan bilgileri listelenecektir. Örneğin Ferit, Ferhat, Ferhan gibi isimler listelenemeyecek, ancak Feyzi, Fevzi, Fehmi gibi isimler listelenecektir. 5 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 8. Hafta Koşullu Sorgulamalar SELECT FROM WHERE BPR255 Veritabanı Yönetim Sistemleri-II * ÇALIŞANLAR SOYADI LIKE 'de[^a-c]%' Yukarıdaki sorgulama sonucunda soyadı “de” ile başlayan ancak üçüncü harfi a,b,c harflerinden biri olmayan çalışanları listeleyecektir. Not: %, _ (alt çizgi), ve [ ] (köşeli parantez)in özel anlamları olduğu için yazı içinde özellikle onları kullanmak için aşağıda verilen örneklerdeki gibi yöntemler uygulanır. Sembol LIKE '5[%]' LIKE '[_]n' LIKE '[a-cdf]' LIKE '[-acdf]' Anlamı 5% _n a, b, c, d, or f -, a, c, d, or f Sembol LIKE '[[]' LIKE ']' LIKE 'abc[_]d%' LIKE 'abc[def]' Anlamı [ ] abc_d , abc_de abcd, abce, abcf h- Alt Sorgulamalar ve alt sorgulamalarda IN, ANY, ALL kullanımı Aşağıdaki sorgulamayı kontrol ediniz. Bu tür sorgulamalara alt sorgulama denir. SELECT FROM WHERE * ÖĞRENCİLER [BÖLÜM KODU] =( SELECT [BÖLÜM KODU] FROM BÖLÜMLER WHERE [BÖLÜM ADI] = 'Bilgisayar Programcılığı') Burada öğrenciler tablosundan bilgisayar programcılığı bölümünde okuyan tüm öğrenciler listelenecektir. Bölüm kodunun ne olacağı öncelikle bölümler tablosundan sorgulanıyor, daha sonra da öğrenciler tablosundan bölüm kodu bu bölüm kodu ile eşleşen tüm öğrenciler listeleniyor. SELECT FROM WHERE * ÇALIŞANLAR MAAŞ > ( SELECT FROM AVG(MAAŞ) ÇALIŞANLAR ) Yukarıdaki sorgulamada da alt sorgulama ile önce çalışanların ortalama maaşları sorgulanıyor, daha sonra da dış sorgulama ile ortalama maaştan daha fazla maaş alan çalışan bilgileri listeleniyor. Eğer alt sorgulama sonucunda sadece bir tek sonuç oluşacaksa, (örneğin ortalama maaş gibi) bu durumda normal karşılaştırma operatörleri kullanılabilir. Ancak eğer alt sorgulama sonucunda birden fazla sonuç oluşacaksa bu durumda IN, ANY, ALL anahtar sözcükleri ile beraber alt sorgulamalar kullanılır. 6 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi 8. Hafta Koşullu Sorgulamalar BPR255 Veritabanı Yönetim Sistemleri-II Örneğin: SELECT FROM WHERE * MÜŞTERİLER MEMLEKET IN ( SELECT FROM WHERE MEMLEKET ÇALIŞANLAR ADI = 'ALİ' OR ADI = 'VELİ') Burada iç sorgulamada adı ali veya veli olan çalışanların memleketleri listelenecek, dış sorgulamada da müşterilerden memleketleri ali veya veli ile aynı olan tüm müşteri bilgileri listelenecek. Bu sorguyu ANY anahtar sözcüğünü kullanarak ta aşağıdaki gibi yapabiliriz. SELECT FROM WHERE * MÜŞTERİLER MEMLEKET = ANY ( SELECT FROM WHERE MEMLEKET ÇALIŞANLAR ADI = 'ALİ' OR ADI = 'VELİ') Burda önce içteki sorgulama ile ismi ali veya veli olanların memleketleri listelenecek, daha sonra dış sorgulama ile memleketleri bu ikisinden herhangi birine eşit olan müşteriler listelenecktir. Any ile listenin herhangi birine eşit, herhangi birinden büyük, veya herhengi birinden küçük gibi işlemler de yapılabilir. Aşağıdaki örnekleri kontrol ediniz. SELECT FROM WHERE * ÇALIŞANLAR MAAŞ >= ANY ( SELECT FROM WHERE MAAŞ ÇALIŞANLAR ADI = 'ALİ' OR ADI = 'VELİ') Burada çalışanlardan ismi ali veya veli olanların maaşına eşit veya daha fazla olan çalışan bilgileri listelenecektir. Eğer alt sorgulama sonucunda oluşacak listede birden fazla sonuç olacaksa ve örneğin dış sorgu sonucu istenecek kayıtların bu listenin tüm değerlerinden büyük veya küçük olması isteniyorsa ALL anahtar sözcüğü ile bu işlem yapılabilir. Aşağıdaki örneği kontrol ediniz: SELECT FROM WHERE * ÇALIŞANLAR MAAŞ > ALL ( SELECT FROM WHERE MAAŞ ÇALIŞANLAR ADI = 'ALİ' OR ADI = 'VELİ') Burada adı Ali veya Veli olan çalışanlardan daha fazla (ikisinden de daha fazla) maaş alan çalışanlar listelenecektir. 7 Bartın MYO – Bilgisayar Programcılığı | Öğr. Gör. Bayram AKGÜL | 2013-2014 Güz Dönemi